Как стать автором
Обновить

Обработка KML файла с координатами точек в текстовый с помощью C#

Уровень сложностиПростой

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

KML файл
KML файл
Готовый текстовый файл
Готовый текстовый файл

Данные из 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.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.