Как растворить полигоны из шейп-файла с помощью инструментов с открытым исходным кодом?


10

В моем текущем проекте я визуализирую данные на карте, представляющие некоторые значения для каждой административной области страны. Мне дан шейп-файл этой страны, который я конвертирую в GeoJSON для использования с PolyMaps. Теперь у меня есть требование сгруппировать несколько областей в более крупные, поскольку нет данных для некоторых более мелких частей, но можно получить агрегированные данные для больших областей. Эти кластеры предопределены (например, A + B + C = D), поэтому я подумал, что будет проще создать кластерный шейп-файл и впоследствии преобразовать его в GeoJSON.

Но как мне создать такой кластер, желательно автоматизированный и с инструментами с открытым исходным кодом? Любой другой разумный способ, конечно, тоже приветствуется.

Ответы:


5

Вы всегда можете использовать инструмент с открытым исходным кодом, такой как QGIS, чтобы открыть свой шейп-файл и объединить объекты, используя встроенный инструмент «объединить выбранные объекты» (просто выберите объекты, нажмите кнопку слияния, выберите атрибуты для наследования новой объединенной функции, готово).

Это, конечно, не имеет большого смысла, если мы говорим о сотнях или тысячах слияний. Я сам на днях задумался, возможно ли объединить функции "по атрибуту" в QGIS?

РЕДАКТИРОВАТЬ: Хорошо, я глуп, если у вас есть общий атрибут для всех объектов, которые вы собираетесь «кластеризовать» (например, название провинции или округа), это будет подходить для инструмента растворения. Откройте свой шейп-файл, выберите растворение (в QGIS оно находится в Vector> Инструменты геообработки> Растворение), выберите столбец с упомянутым выше общим именем и запустите процесс. Надеюсь, это должно (если я вас не правильно понял) привести к тому, что вы искали.


В общем, хороший совет, и если все сводится к ручной работе, я найду человека, который создаст для меня эти шейп-файлы с помощью QGIS, как вы описали. Однако я хотел бы иметь возможность определить эти кластеры (например, с помощью кодов NUTS: объединить FR413 и FR411 в нечто, называемое _FRX1), а затем запустить скрипт, который будет генерировать эти кластерные шейп-файлы. Я хочу иметь возможность исправлять ошибки или приспосабливаться к быстро отслеживаемым изменениям без использования инструмента с графическим интерфейсом. Вполне возможно, что когда-нибудь эти кластеры будут определены конечными пользователями, поэтому мне нужно немного гибкости.
Николай Прокощенко

Я никогда не использую его, но я думаю, что вы можете использовать консоль, чтобы делать все в QGIS, поэтому нет необходимости в GUI. Вам также всегда нужно будет определять эти кластеры в какой-то таблице, даже если вы полностью полагаетесь на решение на основе сценариев. Таким образом, вы можете избежать создания шейп-файла, присоединившись к этой таблице и выполнив тогда роспуск. Я полагаю, это тоже будет в сценарии?
Сандерка

вполне возможно, я совершенно новичок во всех вещах ГИС. Я посмотрю в сценарии QGIS, спасибо.
Николай Прокощенко

2

Для менее ручной работы, вы можете взглянуть на SpatiaLite. Вы можете легко импортировать шейп-файлы, используя, например,

spatialite> .loadshp ~/maps/areas areas iso-8859-15
spatialite> UPDATE areas SET Geometry = SetSrid(Geometry,4326);
spatialite> SELECT RecoverGeometryColumn('areas','Geometry',4326,'POLYGON',2);

Тогда для растворяющей части:

Я хотел бы иметь возможность определить эти кластеры (например, с помощью кодов NUTS: объединить FR413 и FR411 в то, что называется _FRX1)

Здесь вам нужна функция GUnion (). Возможно, вы захотите определить ваши «кластеры» во второй таблице. Затем вы можете объединить кластер и таблицу областей и использовать GUnion () с GROUP BY для создания окончательного union_table.

Затем вы можете экспортировать в шейп-файл, используя .dumpshp

spatialite> .dumpshp union_table Geometry new_shapefile iso-8859-15 POLYGON

Если вам нужен GeoJSON, вы можете конвертировать файл сейчас.

Вы можете написать короткий скрипт, например, на Python, который обрабатывает все эти загрузки, соединения и дампы.


Выглядит очень многообещающе, я поэкспериментирую с этим! Спасибо! Не могли бы вы объяснить , что UPDATEи SELECTлинии делать?
Николай Прокощенко
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.