Здравствуйте, сегодня я покажу небольшую консольную программу на C#, с помощью которой можно обработать KML файл, доставая из него координаты точек в WGS 84 и переводить их в текстовый файл.


Данные из KML файла будут переводиться в формат DD°MM'SS'', для этого необходимо сразу будет установить пакет Aspose.GIS: это можно сделать через NuGet или с их официального сайта.

Чтобы где-то хранить значения строк для начала будет необходимо создать переменные, в которые будут записаны путь до файла, из которого будет необходимо достать данные, а также путь с новым файлом.
Итак, для начала вводим переменные пути к создаваемому и обрабатываемому файлу.
private static string _path_kml; //Файл, который будем парсить
public static string Path_kml
{
get { return _path_kml; }
set { _path_kml = value; }
}
private static string _path_create; //Создаваемый файл
public static string Path_create
{
get { return _path_create; }
set { _path_create = value; }
}
Далее создаём списки, нужные для обработки:
// Список координат для преобразования
static List<string> coordinates_collection = new List<string>();
// Здесь хранятся собранные из KML координаты
static List<string> name_collection = new List<string>();
Затем идут основные методы, в которых происходит сама обработка и создание нового файла с полученными значениями:
static void Main(string[] args)
{
start(); //Нужен для считывания строк пути файлов
open_file(Path_kml);
create_file(Path_create);
}
static void start()
{
Console.WriteLine("Парсинг KML координат в текстовый вид в форме DMS.\n Введите адрес KML. \nНапример: C:\\Users\\user\\old_file.kml");
Path_kml = Console.ReadLine();
Console.WriteLine("Теперь введите адрес куда сохранить файл, при этом введите название файла и расширение в конце \nНапример: C:\\Users\\user\\new_file.txt");
Path_create = Console.ReadLine();
}
static void create_file(string path)
{
using (StreamWriter sw = new StreamWriter(new FileStream(path, FileMode.Create)))
{
for (int n = 0; n < name_collection.Count; n++)
{
sw.WriteLine(name_collection[n]);
sw.WriteLine(Translate_coord_to_dms(coordinates_collection[n]));
}
}
}
static void open_file(string path)
{
bool is_first = true;
foreach (string line in File.ReadLines(path)) // Цикл для считывания строк из KML файла
{
if (line.Contains("<name>") && !line.Contains("точки")) // Здесь берём названия точек
{
if (is_first)
{
is_first = false;
continue;
}
else
{
string line2 = line.Remove(0, 14);
line2 = line2.Remove(line2.IndexOf('<'));
name_collection.Add(line2);
}
}
else if (line.Contains("<coordinates>")) // Здесь берём сами координаты
{
string line2 = line.Remove(0, 23);
line2 = line2.Remove(line2.IndexOf("</"));
coordinates_collection.Add(line2);
}
}
Последний метод задействуется непосредственно при создании файла, в методе create_file, в нём происходит преобразование координат в уже законченный вид:
В конечном итоге у нас получается код, который позволяет обрабатывать kml файлы в формат txt.