Search
Write a publication
Pull to refresh

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

Level of difficultyEasy

Здравствуйте, сегодня я покажу небольшую консольную программу на 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.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.