gps2shp folders [points2points\line]
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
gps2shp folders [points2points\line]
Привет!
Прошу помощи с такой задачей. Есть структура папок, в подкаталогах (на 2 уровня вниз) лежат gps-треки. Нужно их массово конвертнуть в шейпы (выход в родные папочки). Arc10 или OpenSoft.
Спасибо.
UPD: добавил в название темы "[points2points\line]"
Прошу помощи с такой задачей. Есть структура папок, в подкаталогах (на 2 уровня вниз) лежат gps-треки. Нужно их массово конвертнуть в шейпы (выход в родные папочки). Arc10 или OpenSoft.
Спасибо.
UPD: добавил в название темы "[points2points\line]"
Последний раз редактировалось oleg 11 авг 2011, 09:36, всего редактировалось 1 раз.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: gps2shp folders
Попробуйте один из вариантов:
1) gpx2shp + bat-файл (или Python или ??)
2) ogr2ogr + bat-файл (или Python или ??)
3) GPSBabel + bat-файл (или Python или ??)
Поищите в сети, может есть готовые скрипты.
1) gpx2shp + bat-файл (или Python или ??)
2) ogr2ogr + bat-файл (или Python или ??)
3) GPSBabel + bat-файл (или Python или ??)
Поищите в сети, может есть готовые скрипты.
Редактор материалов, модератор форума
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: gps2shp folders
Код: Выделить всё
import os,fnmatch
def main():
rootPath = 'c:/personal/gpx'
for root, dirs, files in os.walk(rootPath):
gpxfiles = fnmatch.filter(files, '*.gpx')
if (len(gpxfiles) != 0):
for filename in gpxfiles:
os.system('ogr2ogr '+os.path.join(root,filename)+'.shp '+os.path.join(root,filename)+' tracks')
return 0
if __name__ == '__main__':
main()
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
Re: gps2shp folders
Спасибо! Вижу, что нужно установить gdal. По синтаксису вижу, что питон. Подскажите, пожалуйста, последовательность действий успешного использования этото скрипта или где смотреть.
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: gps2shp folders
Ставим gdal c привязками к Python и сам Python. Для Windows проще всего сделать это через уставновщик OSGeo4W: пакеты gdal и gdal-python (остальное подтянется по зависимостям).
Код копируем и вставляем в новый текстовый документ, например, при помощи Блокнота. В строке
исправляем путь на свой. Сохраняем как gpx2shp.py или под другим именем. Открываем командную строку OSGeo4W, переходим в каталог с сохраненным скриптом и выполняем
Код копируем и вставляем в новый текстовый документ, например, при помощи Блокнота. В строке
Код: Выделить всё
rootPath = 'c:/personal/gpx'
Код: Выделить всё
python gpx2shp.py
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
Re: gps2shp folders
Спасибо за помощь! Делюсь успехами.
Попробовал – шейпы создались, но пустые (см.скрин ниже).
Есть подозрения, что из-за проблем с типом/структурой данных.
Выяснил дополнительные условия – текущий *.gpx был получен путём конвертации из *.gps.
Образец строки *.gps ниже
50.85953,28.98493,181.0,0.8,1,11,185.8,-6.1,092007.000,180411
Приаттачил к сообщению zip-пример *.gps, *.gpx, структуры папок, скрипта.
Посмотрите, пожалуйста, если будет время.
- Как Вы думаете, проблемы могут быть из-за неверной структуры *.gpx?
- Возможно ли конвертировать в шейп сразу из подобных *.gps?
- Возможно проблема в типе точка/линия?
Спасибо.
Попробовал – шейпы создались, но пустые (см.скрин ниже).
Есть подозрения, что из-за проблем с типом/структурой данных.
Выяснил дополнительные условия – текущий *.gpx был получен путём конвертации из *.gps.
Образец строки *.gps ниже
50.85953,28.98493,181.0,0.8,1,11,185.8,-6.1,092007.000,180411
Приаттачил к сообщению zip-пример *.gps, *.gpx, структуры папок, скрипта.
Посмотрите, пожалуйста, если будет время.
- Как Вы думаете, проблемы могут быть из-за неверной структуры *.gpx?
- Возможно ли конвертировать в шейп сразу из подобных *.gps?
- Возможно проблема в типе точка/линия?
Спасибо.
- Вложения
-
test.zip
- (115.92 КБ) 554 скачивания
-
- gps2shp.png (15.79 КБ) 24387 просмотров
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: gps2shp folders
В файле 2011418.gpx содержится 3350 точек ("waypoints") и нет "track" или "route"-точек.
Такой командой нормально конвертируется в точечный шейп:
Такой командой нормально конвертируется в точечный шейп:
Код: Выделить всё
ogr2ogr -f "ESRI Shapefile" -lco SHPT="POINTZ" 2011418.shp 2011418.gpx
Редактор материалов, модератор форума
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
Re: gps2shp folders
Да, спасибо! Так конвертирует. Помогите, пожалуйста, автоматизировать (модернизировать скрипт выше). Если есть вариант сразу либо в несколько этапов конвертировать в *.shp из *.gps (исходные данные) - буду благодарен за варианты решения.
UPD: [del]*.gpx[/del] *.gps
UPD: [del]*.gpx[/del] *.gps
Последний раз редактировалось oleg 13 июл 2011, 19:11, всего редактировалось 1 раз.
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: gps2shp folders
Не понял, вы же сами написали, что всё работает и из *.gpx в *.shp конвертирует.oleg писал(а):Помогите, пожалуйста, автоматизировать (модернизировать скрипт выше). Если есть вариант сразу либо в несколько этапов конвертировать в *.shp из *.gpx (исходные данные) - буду благодарен за варианты решения.
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: gps2shp folders
В каждом GPX несколько слоев, все они имеют разную геометрию, некоторые пустые:
Нужно, чтобы скрипт проверял наличие "ненулевых" слоев и записывал только их в шейпы с соответствующей геометрией.
Если убрать из 9 строки предыдущего скрипта "' +tracks", то будут писаться все слои, и "нулевые" тоже.
(заменить 'нужная_папка' на нужную папку
)
В общем, задача: отсеять "нулевые" слои, "ненулевые" слои выбрать с помощью ogr2ogr -select
Код: Выделить всё
Layer name: waypoints
Geometry: Point
Feature Count: 3350
--
Layer name: routes
Geometry: Line String
Feature Count: 0
--
Layer name: tracks
Geometry: Multi Line String
Feature Count: 0
--
Layer name: route_points
Geometry: Point
Feature Count: 0
--
Layer name: track_points
Geometry: Point
Feature Count: 0
Нужно, чтобы скрипт проверял наличие "ненулевых" слоев и записывал только их в шейпы с соответствующей геометрией.
Если убрать из 9 строки предыдущего скрипта "' +tracks", то будут писаться все слои, и "нулевые" тоже.
Код: Выделить всё
import os,fnmatch
def main():
rootPath = 'нужная_папка'
for root, dirs, files in os.walk(rootPath):
gpxfiles = fnmatch.filter(files, '*.gpx')
if (len(gpxfiles) != 0):
for filename in gpxfiles:
os.system('ogr2ogr '+os.path.join(root,filename)+'.shp '+os.path.join(root,filename))
return 0
if __name__ == '__main__':
main()
(заменить 'нужная_папка' на нужную папку

В общем, задача: отсеять "нулевые" слои, "ненулевые" слои выбрать с помощью ogr2ogr -select
Редактор материалов, модератор форума
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
Re: gps2shp folders
Прошу прощения, - из *.gps в *.shp_DR_ писал(а):Не понял, вы же сами написали, что всё работает и из *.gpx в *.shp конвертирует.oleg писал(а):Помогите, пожалуйста, автоматизировать (модернизировать скрипт выше). Если есть вариант сразу либо в несколько этапов конвертировать в *.shp из *.gpx (исходные данные) - буду благодарен за варианты решения.
Образец *.gps (X,Y, ...)
50.5049667,29.510525,348.0,1.3,1,9,278.1,-4.9,114245.000,180411
50.5048217,29.510935,349.0,1.3,1,9,278.4,-4.9,114247.000,180411
50.504545,29.512105,354.0,1.3,1,9,277.7,-4.9,114253.000,180411
- Denis Rykov
- Гуру
- Сообщения: 3376
- Зарегистрирован: 11 апр 2008, 21:09
- Репутация: 529
- Ваше звание: Author
- Контактная информация:
Re: gps2shp folders
Судя по формату *.gps файлов, в *.gpx присутствуют только waypoint-ы, поэтому используем следующую модификацию скрипта и получаем на выходе ненулевые шейпы:
А вот так можно пакетно сконвертировать *.gps в шейпы:
Код: Выделить всё
import os,fnmatch
def main():
rootPath = 'c:/personal/tmp/test/dir0/'
for root, dirs, files in os.walk(rootPath):
gpxfiles = fnmatch.filter(files, '*.gpx')
if (len(gpxfiles) != 0):
for filename in gpxfiles:
os.system('ogr2ogr '+os.path.join(root,filename)[:-4]+'.shp '+os.path.join(root,filename)+' waypoints')
return 0
if __name__ == '__main__':
main()
А вот так можно пакетно сконвертировать *.gps в шейпы:
Код: Выделить всё
from __future__ import with_statement
import os,fnmatch
def main():
rootPath = 'c:/personal/tmp/test/dir0/'
for root, dirs, files in os.walk(rootPath):
gpsfiles = fnmatch.filter(files, '*.gps')
if (len(gpsfiles) != 0):
for filename in gpsfiles:
with file(os.path.join(root,filename)[:-4]+'.csv', "wb") as out:
out.write('x,y,n3,n4,n5,n6,n7,n8,n9,n10\n')
for line in (x.strip() for x in file(os.path.join(root,filename)).readlines()):
out.write(line+'\n')
shp = os.path.join(os.path.join(root,filename))[:-4] + ".shp"
fvrt = open('work.vrt', 'wt')
fvrt.write('<OGRVRTDataSource>\n'
'<OGRVRTLayer name="' + filename[:-4] + '">\n'
'<SrcDataSource>' + os.path.join(root,filename)[:-4]+'.csv' + '</SrcDataSource>\n'
'<GeometryType>wkbPoint</GeometryType>\n'
'<LayerSRS>WGS84</LayerSRS>\n'
'<GeometryField encoding="PointFromColumns" x="y" y="x"/>\n'
'</OGRVRTLayer>\n'
'</OGRVRTDataSource>\n')
fvrt.close()
cmd = 'ogr2ogr -overwrite ' + shp + ' work.vrt'
print "converting from ......" + filename
os.system(cmd)
os.remove("work.vrt")
os.remove(os.path.join(root,filename)[:-4]+'.csv')
return 0
if __name__ == '__main__':
main()
Spatial is now, more than ever, just another column- The Geometry Column.
-
- Гуру
- Сообщения: 5173
- Зарегистрирован: 26 сен 2009, 16:26
- Репутация: 792
- Ваше звание: званий не имею
- Откуда: Москва
Re: gps2shp folders
Написал shell-скрипт в тему.
http://blogs.gis-lab.info/amuriy/2011/0 ... ch_script/
http://blogs.gis-lab.info/amuriy/2011/0 ... ch_script/
Редактор материалов, модератор форума
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
Re: gps2shp folders
Хм, а просто gpsbabel с драйвером xcsv (чтобы превратить .gps в .gpx) и ogr не хватит для этого?
-
- Завсегдатай
- Сообщения: 460
- Зарегистрирован: 03 фев 2005, 11:46
- Репутация: 15
- Контактная информация:
Re: gps2shp folders
В gpsbabel пробовал поштучно - всё хорошо. Подскажите, пожалуйста, путь автоматизации, если он есть.ericsson писал(а):Хм, а просто gpsbabel с драйвером xcsv (чтобы превратить .gps в .gpx) и ogr не хватит для этого?
Спасибо большое, всё работает!_DR_ писал(а):А вот так можно пакетно сконвертировать *.gps в шейпы:
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей