Растворить / агрегировать полигоны с помощью ogr2ogr или gpc?


16

У меня есть большое количество полигонов, представляющих границы округов США, которые мне нужно объединить в как можно меньше полигонов.

Возможно ли это сделать с помощью некоммерческого программного обеспечения или программного обеспечения по разумной цене?

PostGIS не доступен, как и Java, но C есть.


OpenSourceSoftware может делать много вещей, что вам нужно ... инструмент, библиотека и компилятор C, с которым тоже работает, в какой среде / операционной системе?
августа

скачать qgis с www.qgis.org
Антонио Локандро

@huckfinn: Я нахожусь на CentOS, и инструмент командной строки или библиотека Perl-XS или C были бы идеальными, спасибо за вопрос. Мои исходные данные находятся в шейп-файлах ESRI, хотя у меня есть копии полигонов в MySQL. У меня есть ogr2ogr, но не диалект MySQL.
LeeGee

Я предполагаю, что gpcупомянутое в названии GPC - библиотека General Polygon Clipper из Университета Манчестера
Matt Wilkie

Ответы:


31

С ogr2ogr(GDAL> = 1.10 с поддержкой SpatiaLite):

ogr2ogr output.shp input.shp -dialect sqlite -sql "SELECT ST_Union(geometry), dissolve_field FROM input GROUP BY dissolve_field"

1
Есть ли в сборках Gdal / Ogr для Windows поддержка Spatialite, MS4W, OSGeo4w, gisinternals, geoinformatica?
Klewis

AFAIK OSGeo4W и пакеты, поддерживаемые Tamas Szekeres ( vbkto.dyndns.org/sdk ) наверняка.
Антонио Фальчано

1
Какую версию GDAL вы используете ( gdalinfo --version)? В качестве обходного пути вы можете сначала попытаться создать шейп-файл, а затем преобразовать его в KML, поскольку у драйвера KML есть некоторые ограничения.
Антонио Фальчано

3
У меня был дьявол времени, определяющий, что использовать для «геометрии», я получал ошибку без такой колонки: геометрия . Все аналогичные примеры здесь, в стеке и в справочных документах, также используют неработающие варианты, такие как geo или the_geom . Наконец, я обнаружил, что переключение -so сводки ogrinfo : ogrinfo -so somedata.gdb my_layer_nameи фильтр для "Geometry Column ="
matt wilkie

3
также, если вы просто хотите растворить все многоугольники в шейп-файле в один большой многоугольник, вы можете сделать это: ogr2ogr output_dissolved.shp input.shp -dialect sqlite -sql "SELECT ST_Union (geometry) AS geometry FROM input" запомните, если вы собираете GDAL Вы сами должны установить sqlite и включить в конфигурацию, по крайней мере, sqlite иatialite, то есть флаги --with-sqlite --with -atialite = yes или аналогичные.
cm1

3

Если вам нужен чистый легкий доступ к C, вы можете использовать комбинацию shapelib от Frank Warmerdam и gpc от Alan Murta. Я считаю, что обработка DBF в shapelib немного сложна, но читать что-то нормально. Для Perl вы можете найти их в репозитории CPAN в записях Geo :: Shapelib и Math :: Geometry :: GPC . В дополнение к Geo :: Proj4 для преобразования координат вы можете иметь минималистичный доступ к ГИС-операциям. Мне это нравится.


Спасибо - я попробовал, но это показалось очень и очень медленным: более часа, чтобы собрать 2000 округов на MacBookPro 4gig. Возможно, это мое кодирование :)
LeeGee

Используете ли вы какой-либо вид индексации, например, перекрывающиеся bbox?
huckfinn

Нет - я спотыкаюсь в темноте, мне трудно найти рефери, которые не предполагают, что я делал это годами, или использую PostGIS.
LeeGee

Но вы также можете использовать Postgresql / PostGIS со всеми дополнительными операциями индексации, отношений .... Импорт данных для формы очень прост с помощью инструмента shp2pg. И синтаксис SQL не так сложно выучить ...
huckfinn

PostGIS потребовалось несколько секунд, чтобы разобраться - красиво просто, особенно с ogr2ogr. Но я бы предпочел использовать GPC: я собирал полигоны из файлов, каждый раз создавая UNION, и потребовались часы, чтобы сделать то, что PostGIS сделал буквально за секунды, поэтому я и говорю, что это, должно быть, мое неправильное прочтение документов ,
LeeGee
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.