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