получить все wikimapia-метки с определенного района карты

Модераторы: Tolik, zed

получить все wikimapia-метки с определенного района карты

Сообщение xyz » 15 авг 2009, 02:40

копипаста с другого форума: http://caves.ru/showthread.php?p=483101#post483101 может кому интересно будет. сам не пробовал.

а ещё понадобилось получить все wikimapia-метки с определенного района карты, чтоб можно было закачать в GPS PNA как waypoints. для этого SAS.Планетой вытащил все Wikimapia метки. простеньким скриптом собрал их воедино:

#!/bin/bash
tmp1=vjtmp1.txt
tmp2=vjtmp2.txt
tmp3=vjtmp3.xml
./find ../../ -name "*.kml" >$tmp1
./echo >$tmp2

while read REPLY
do
w2=`./grep Placemark $REPLY |./wc -l`
if [ $w2 -ne 0 ]
then
./cat $REPLY >>$tmp2
./echo $w2
fi
done<$tmp1

./echo '<?xml version="1.0" encoding="UTF-8"?>' >$tmp3
./echo '<kml xmlns="http://earth.google.com/kml/2.1">' >>$tmp3
./echo '<Document>' >>$tmp3
./grep -v "UTF" $tmp2 | ./grep -v google | ./grep -v 'href' |./grep -v 'Document' | ./grep -v '/kml'| ./grep -v 'w3' >>$tmp3
./echo '</Document>' >>$tmp3
./echo '</kml>' >>$tmp3
exit

и затем в excel можно открыть получившийся xml файл, повыкидывать лишнее, и сохранить в wpt, затем если уж очень надо то через gpsbabel в kml
xyz
Соображающий
 
Сообщения: 84
Зарегистрирован: 11 июл 2009, 05:56
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: получить все wikimapia-метки с определенного района карты

Сообщение xyz » 04 сен 2009, 16:05

продолжение:
на sasgis зарегистрироваться та и не смог, ошибку выдавало.

да, SAS.Планета выделить нужный район, выбрать закачать - слой Wikimapia.
потом скриптом надо собрать воедино из кэша SAS в один файл .xml
потом в Excel отобрать нужное
и выгрузить в WPT

задачка сама по себе несложная - итак надо закачать нужные метки wikimapia в PNA.
метка - это ее имя, 2 десятичные координаты и можно комментарий.
в kml метка описывается <Placemark></Placemark>, в SAS.Планете файлов kml очень много создается, но не все файлы имеют Placemark внутри.

смысл скрипта - натий в папке на два уровня выше все файлы *.kml, если в них содержится строчка Placemark - добавить содержимое файла в единый файл.
это можно сделать любым способом каким нравится, мне проще с помощью bash скрипта через cygwin в windows, ну или обычным bash в линукс.
сначала ./find находит все kml и записывает их имя+путь в файл tmp1
while...done берет этот tmp1 и все файлы которые там перечислены, если файл содержит Placemark то добавляет в tmp2

в получившемся файле tmp2 надо повыкидывать заголовки kml Файлов и их хвосты, вот эти строки:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://earth.google.com/kml/2.1">
<Document>
</Document>
</kml>
что и делается с помощью длинной строки ./grep

и потом добавить первые три строки в начало, последние две - в конец файла.

получившийся файл надо переименовать в *.xml и открыть в excel
вот тут уже простор для деятельности открывается, весь мусор автофильтром можно отсеять, простым фильтром выкинуть дубликаты. в результате должно получиться три столбца - name, lat, lon
кстати для фигур прямоугольников я просто середину фигуры арифметически вычислял и координаты точки-результата использовал.

теперь надо создать файлик формата WPT - его понимает PNA
формат простенький:

Код: Выделить всё
OziExplorer CE Waypoint File Version 1.2
WGS 84
SunStyle Aug-2009
Caves.ru Zapalit Vsё!
1,Place1,41.000001,45.000001,,0,1,3,0,16777215,,0, 0,0,1113,8,1,17
2,Raketa,54.429690,43.072607,,0,1,3,0,16777215,Bro shennaya Raketa,0,0,0,1113,8,1,17
3,s-84,51.234567,40.123456,,0,1,3,0,16777215,,0,0,0,11 13,8,1,17
4,Construction Site?-228,53.000199,50.110465,,0,1,3,0,16777215,,0,0,0,1 113,8,1,17 


первые 4 строки -заголовок, далее идут значения через запятую:
первое - номер waypoints по порядку
второе-имя waypoints
третье и четвертое координаты
поле после 16777215 - комментарий, необязательно

в принципе всё. чтобы проще создать файл WPT я просто создал в excel отдельныый листок в котором все много одинаковых строк, которые содержат поля WPT файла, строчки см. в пред. сообщении , и подставил в столбцы 2-4 (имя, lat,lon, комментарий) мои данные для меток.
потом "сохранить в формате CSV(разделитель-запятые)"
сделать замену в получившемся файле CSV запятую на точку, точки с запяттой на запятую - это требование формата Ozi.
выкинуть первую строку (если она была в исходном файле и содержала названия столбцов на этой странице, если не было то и не выкидывать)
и добавить четыре строки заголовка.
переименовать из .CSV в .WPT

всё. файл waypoints готов, Ozi и навител без проблем его принимают.

эта схема только кажется сложной, на деле работы на 15 мин, больше времени сортировать нужные и не нужные точки, ну тут автофильтр рулит/ схема общая и можно использоваться на файлах kmz/kml, которые SAS.планета понимать не хочет.

если из файла WPT надо сгенерировать файл kml (SAS.планета не знает wpt) надо воспользоваться утилитой gpsbabel.
xyz
Соображающий
 
Сообщения: 84
Зарегистрирован: 11 июл 2009, 05:56
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: получить все wikimapia-метки с определенного района карты

Сообщение xyz » 10 дек 2009, 12:14

К стати, скрипт работает без правки с любымии KML, а не только с викимапией.
я запускаю его через cygwin.
xyz
Соображающий
 
Сообщения: 84
Зарегистрирован: 11 июл 2009, 05:56
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.


Вернуться в Другие сервисы

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron