Как лучше автоматизировать процесс обработки shp файлов

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 29 сен 2012, 19:25

Ситуация следующая:

Имею систему с установленной Windows 7, QGIS.
Занимаюсь подготовкой ОСМ данных для преобразования в сценарий для симулятора FlightGear.

Процесс выглядит примерно так:
Выкачиваю интересующие области (к примеру Петербург и Ленобласть).
В QGIS объединяю по отдельности файлы разных категорий (water-line, highway, landuse и т.д.).
Далее отдельно каждый объединенный файл делю по какому-либо ОСМ-признаку (к примеру дороги по тегу highway, предварительно отделив все тоннели). А полученные shp файлы уже помещаю каждый в свою отдельную папку (требуется для конструктора сценария для ФГ).

При скачивани обновленной выгрузки весь процесс приходится делать заново вручную. Хотелось бы автоматизировать данные преобразования, желательно через командную строку в *.bat файле.

Возможно ли это? Достаточно ли для этого QGIS, или нужен какой-либо другой ГИС-пакет?

Спасибо!

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Александр Мурый » 29 сен 2012, 19:51

Вас спасёт ogr2ogr и немного скриптинга. Почитайте здешнюю статью, будут вопросы — задавайте.
Редактор материалов, модератор форума

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение ericsson » 29 сен 2012, 20:54

Положить данные в PostgreSQL-базу через osm2pgsql и выдергивать данные через ogr2ogr разными sql-запросами в batch-файле?

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 29 сен 2012, 22:04

Спасибо за наводку!

Появился вопрос. Выполняю такую команду:

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

ogr2ogr -where "HIGHWAY=motorway" d:\fg_edit\gis\osm_motorway\osm_motorway.shp d:\fg_edit\gis\RU-LEN\highway-line.shp
В ответ вылетает сообщение об ошибке:
ERROR 1: 'motorway' not recognised as an available field.
FAILURE: SetAttributeFilter<HIGHWAY=motorway> failed.
Для проверки открываю в QGIS искомый файл, кликаю в нужную дорогу для получения информации о ней, и там есть поле HIGHWAY=motorway.
В чем моя ошибка?

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Александр Мурый » 29 сен 2012, 23:02

Попробуйте так:

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

ogr2ogr -where "HIGHWAY='motorway'" d:\fg_edit\gis\osm_motorway\osm_motorway.shp d:\fg_edit\gis\RU-LEN\highway-line.shp
Редактор материалов, модератор форума

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 29 сен 2012, 23:11

Ура! Заработала!!! Спасибо!!!

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 19 окт 2012, 21:29

Словил странный глюк ogr2ogr:
скачал 3 региона - Санкт-Петербург, Ленинградскую область и Карелию.
Далее:

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

ogr2ogr -update -append ./RU-LEN/water-polygon.shp ./RU-KR/water-polygon.shp
ogr2ogr -update -append ./RU-LEN/water-polygon.shp ./RU-SPE/water-polygon.shp
В итоге в /RU-LEN/water-polygon.shp содержится склейка всех 3-х регионов. Далее:

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

ogr2ogr -clipsrc 30 60 31 61 ./RU-LEN/water-polygon-cut.shp ./RU-LEN/water-polygon.shp
И вот water-polygon-cut.shp почему-то пустой, хотя и занимает 1 мб. Попутно обрабатываются таким же способом еще 7 shp файлов, они обрезаются нормально.

Что это может быть? Система теперь Ubuntu 12.04. ogr2ogr поставился вместе с qgis.

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Александр Мурый » 19 окт 2012, 22:29

Soitanen писал(а): И вот water-polygon-cut.shp почему-то пустой, хотя и занимает 1 мб.
Вы точно уверены, что shp-файл "пустой"? Приведите вывод команды

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

ogrinfo -al -so water-polygon-cut.shp
Редактор материалов, модератор форума

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 19 окт 2012, 23:06

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

$ ogrinfo -al -so water-polygon-cut.shp
INFO: Open of `water-polygon-cut.shp'
      using driver `ESRI Shapefile' successful.

Layer name: water-polygon-cut
Geometry: Polygon
Feature Count: 0
Extent: (0.000000, 0.000000) - (0.000000, 0.000000)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_84",6378137,298.257223563]],
    PRIMEM["Greenwich",0],
    UNIT["Degree",0.017453292519943295]]
OSM_ID: Real (11.0)
NAME: String (64.0)
NATURAL: String (7.0)
WATERWAY: String (9.0)
WETLAND: String (11.0)

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Александр Мурый » 19 окт 2012, 23:29

Выложите заархивированный шейп water-polygon.shp (с *.shx и *.dbf), надо посмотреть, в чём может быть дело.
Редактор материалов, модератор форума

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 19 окт 2012, 23:35

Выкладываю: http://yadi.sk/d/DZEzJfdh0Hwgv (сюда не пролез).

Александр Мурый
Гуру
Сообщения: 5173
Зарегистрирован: 26 сен 2009, 16:26
Репутация: 792
Ваше звание: званий не имею
Откуда: Москва

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Александр Мурый » 20 окт 2012, 01:52

При запуске ogr2ogr пропущен флаг "-skipfailures", об этом говорится в ошибке:

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

$ ogr2ogr -clipsrc 30 60 31 61  water-polygon-cut.shp water-polygon.shp
Warning 1: One or several characters couldn't be converted correctly from UTF-8 to ISO-8859-1.
This warning will not be emitted anymore
ERROR 1: Attempt to write non-polygon (POINT) geometry to POLYGON type shapefile.
ERROR 1: Terminating translation prematurely after failed
translation of layer water-polygon (use -skipfailures to skip errors)
Если исп-ть этот флаг, получается что надо:

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

$ ogrinfo -al -so water-polygon-cut.shp
INFO: Open of `water-polygon-cut.shp'
      using driver `ESRI Shapefile' successful.

Layer name: water-polygon-cut
Geometry: Polygon
Feature Count: 1533
Extent: (30.000000, 60.000000) - (31.000000, 61.000000)
Layer SRS WKT:
GEOGCS["GCS_WGS_1984",
    DATUM["WGS_1984",
        SPHEROID["WGS_84",6378137,298.257223563]],
    PRIMEM["Greenwich",0],
    UNIT["Degree",0.017453292519943295]]
OSM_ID: Real (11.0)
NAME: String (64.0)
NATURAL: String (7.0)
WATERWAY: String (9.0)
WETLAND: String (11.0)
Редактор материалов, модератор форума

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 20 окт 2012, 09:28

Огромное спасибо!
У меня сообщение об ошибке про UTF-8 занимало более 1000 строк и он других сообщений об ошибках не выдавал. Потому и не знал про -skipfailures.

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 30 янв 2013, 21:59

Новый вопрос возник.
Утилита, которая потом обрабатывает shp файлы очень плохо переваривает геометрию типа MULTILINESRTING (так мне объяснили сами ее создатели). И действительно, она часто вылетала с моими исходными данными.
Я пробовал ставить в вызов ogr2ogr -nlt LINESTRING, но это не помогло. Для чистоты эксперимента переделал MULTILINESTRING в LINESTRING вручную в QGIS (Vector->Geometry tools->Multipart to single parts). Как можно автоматизировать данный процесс в скрипте на баше?

Soitanen
Интересующийся
Сообщения: 42
Зарегистрирован: 21 авг 2012, 18:18
Репутация: 0

Re: Как лучше автоматизировать процесс обработки shp файлов

Сообщение Soitanen » 31 янв 2013, 12:38

Нашел, что можно использовать QGIS API без запуска самого QGIS, написав скрипт на Питоне.
Начало у меня такое:

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

from qgis.core import *
QgsApplication.setPrefixPath("/usr", True)
QgsApplication.initQgis()

vlayer = QgsVectorLayer("m.shp", "motorway", "ogr")
if not vlayer.isValid():
  print "Layer failed to load!"

QgsApplication.exitQgis()
А вот что делать дальше - никак не пойму. Пытаюсь врубиться в http://qgis.org/api/classQgsGeometry.html, но тоже ничего в голову не лезет.
Может как-то можно посмотреть, какие команды отдаются в QGIS API, когда я работаю с графическим интерфейсом, чтобы на их основе потом написать свой скрипт?

Ответить

Вернуться в «Общий - ПО»

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

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