Страница 1 из 1

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

Добавлено: 19 апр 2018, 16:32
xtxskif
Всем привет.
Подскажите советом.
У меня есть KMZ-файлы. Названия каждого из файлов состоит из 8-значного числа. Когда я открываю их в Google Earth они выглядят так как на рисунке 1. Когда я открываю их в QGIS они выглядят так как на
рисунке 2.
Мне нужно чтобы в поле Name (в Google Earth) было название файла (состоит из 8-значного числа).
Я могу это сделать самостоятельно, но это занимает очень много времени, так как файлов kmz очень много.
Хочу как то автоматизировать этот процесс.
Помогите кто-нибудь советом.
Заранее благодарю

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

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

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

Добавлено: 20 апр 2018, 07:51
trir
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);
            }
        }

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

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

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

Добавлено: 20 апр 2018, 09:29
trir
402 это имя Placemark, а их может быть несколько в файле

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

Добавлено: 20 апр 2018, 09:57
xtxskif
мне нужно чтоби имя Placemark било как имя файла (в данном случае оно должно состоять из 8 цифр)

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

Добавлено: 20 апр 2018, 10:00
trir
В notepad++ есть find in files, но там нельзя получить имя текущего файла. Так что только програмирование

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

Добавлено: 20 апр 2018, 10:09
xtxskif
а можете помочь с програмированием?

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

Добавлено: 20 апр 2018, 10:09
trir
могу

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

Добавлено: 20 апр 2018, 10:14
xtxskif
помогите пожалуйста

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

Добавлено: 20 апр 2018, 21:07
xtxskif
помогите пожалуйста кто может, могу заплатить

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. строку, не анализируя содержимого. С регулярными выражениями можно сделать что-то более универсальное.
Исходные файлы бэкапятся. Новые пишутся на их место.