робота с KMZ-файлами

Не знаете, где задать вопрос? Задавайте здесь.
Ответить
xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -4
Откуда: Lviv
Контактная информация:

робота с KMZ-файлами

Сообщение xtxskif » 19 апр 2018, 16:32

Всем привет.
Подскажите советом.
У меня есть KMZ-файлы. Названия каждого из файлов состоит из 8-значного числа. Когда я открываю их в Google Earth они выглядят так как на рисунке 1. Когда я открываю их в QGIS они выглядят так как на
рисунке 2.
Мне нужно чтобы в поле Name (в Google Earth) было название файла (состоит из 8-значного числа).
Я могу это сделать самостоятельно, но это занимает очень много времени, так как файлов kmz очень много.
Хочу как то автоматизировать этот процесс.
Помогите кто-нибудь советом.
Заранее благодарю
Вложения
рисунок_1_.png
рисунок_1_.png (33.83 КБ) 6132 просмотра
рисунок_2.png
рисунок_2.png (6.48 КБ) 6132 просмотра
рисунок_1_.png
рисунок 1
рисунок_1_.png (33.83 КБ) 6135 просмотров
рисунок_2.png
рисунок 2
рисунок_2.png (6.48 КБ) 6135 просмотров
kmz-файл.7z
(3.02 КБ) 242 скачивания

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: робота с KMZ-файлами

Сообщение trir » 20 апр 2018, 04:39

тебе поможет любой язык программирования
<name>402</name>
только я не понял - что нужно изменить...
кстати, если использовать kml - можно обойтись блокнотом...

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: робота с KMZ-файлами

Сообщение trir » 20 апр 2018, 07:51

C# и SharpKml

Код: Выделить всё

        public void fun()
        {
            string path = @"C:\work\kmz-файл";
            DirectoryInfo di = new DirectoryInfo(path);
            FileInfo[] fArr =  di.GetFiles("*.kmz");
            foreach (FileInfo fi in fArr)
            {
                KmzFile f = KmzFile.Open(fi.FullName);
                KmlFile fkml = f.GetDefaultKmlFile();
                Kml rkml = (Kml)fkml.Root;
                Document doc = (SharpKml.Dom.Document)rkml.Feature;
                doc.Name = fi.Name.Replace(".kmz", "");
                MemoryStream ws = new MemoryStream();
                fkml.Save(ws);
                f.UpdateFile("doc.kml", ws.ToArray());
                f.Save(fi.FullName);
            }
        }

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -4
Откуда: Lviv
Контактная информация:

Re: робота с KMZ-файлами

Сообщение xtxskif » 20 апр 2018, 09:19

названия файлов (8 цифр) как на скриншоте из QGIS. Мне нужно чтобы это названия файлов (8 цифр) било в поле Name (в Google Earth) (например: вместо 402 нужно чтобы было 00000001).
Подскажите поподробнее как ето сделать. в блокноте думаю будет лучше, так как не имею опыта работы с программированием.

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: робота с KMZ-файлами

Сообщение trir » 20 апр 2018, 09:29

402 это имя Placemark, а их может быть несколько в файле

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -4
Откуда: Lviv
Контактная информация:

Re: робота с KMZ-файлами

Сообщение xtxskif » 20 апр 2018, 09:57

мне нужно чтоби имя Placemark било как имя файла (в данном случае оно должно состоять из 8 цифр)

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: робота с KMZ-файлами

Сообщение trir » 20 апр 2018, 10:00

В notepad++ есть find in files, но там нельзя получить имя текущего файла. Так что только програмирование

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -4
Откуда: Lviv
Контактная информация:

Re: робота с KMZ-файлами

Сообщение xtxskif » 20 апр 2018, 10:09

а можете помочь с програмированием?

trir
Гуру
Сообщения: 5278
Зарегистрирован: 09 апр 2010, 19:30
Репутация: 1014
Ваше звание: просто мимо прохожу
Откуда: Ё-бург

Re: робота с KMZ-файлами

Сообщение trir » 20 апр 2018, 10:09

могу

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -4
Откуда: Lviv
Контактная информация:

Re: робота с KMZ-файлами

Сообщение xtxskif » 20 апр 2018, 10:14

помогите пожалуйста

xtxskif
Завсегдатай
Сообщения: 455
Зарегистрирован: 17 фев 2016, 14:02
Репутация: -4
Откуда: Lviv
Контактная информация:

Re: робота с KMZ-файлами

Сообщение xtxskif » 20 апр 2018, 21:07

помогите пожалуйста кто может, могу заплатить

Аватара пользователя
Игорь Белов
Гуру
Сообщения: 2229
Зарегистрирован: 04 янв 2011, 22:00
Репутация: 1501
Откуда: Казань

Re: робота с KMZ-файлами

Сообщение Игорь Белов » 21 апр 2018, 18:15

Скрипт для bash и соответствующего окружения:

Код: Выделить всё

#!/bin/bash
for f in *.kmz
do
    unzip ${f}
    mv ${f} ${f}~
    mv doc.kml doc.kml~
    awk -v fn=${f%.*} '{ if (FNR == 11) printf "      <name>%s</name>\n", fn; else print $0 }' doc.kml~ > doc.kml
    zip ${f} doc.kml
    rm doc.kml*
done
Файл скрипта f2n.sh помещаем в ту же папку, где лежат данные, и запускаем:

Код: Выделить всё

$ . f2n.sh
Алгоритм примитивный, для конкретного случая, заменяет 11. строку, не анализируя содержимого. С регулярными выражениями можно сделать что-то более универсальное.
Исходные файлы бэкапятся. Новые пишутся на их место.
Вложения
kmz-file-2.7z
(3.24 КБ) 238 скачиваний
The purpose of computing is insight, not numbers

Ответить

Вернуться в «Я новичок!»

Кто сейчас на конференции

Сейчас этот форум просматривают: Amazon [Bot] и 11 гостей