У меня есть следующий слой, используя SRID 27700 в Postgis:
Это каждый административный регион в Великобритании, и (как вы можете видеть из цветовой группировки) у каждого из них есть текстовое поле, в котором указывается округ, в котором они находятся.
То, что я хотел бы сделать, это сделать большие полигоны округа из меньших в данном округе, поэтому EG на рисунке выше всех полигонов цвета чирка сформировал бы один большой полигон из одного внешнего кольца, которое содержит все полисы в этом цвет, как и все остальные, фиолетовый, коричневый, розовый, серый и т. д. должен образовывать один многоугольник.
Я уже пробовал следующее:
insert into parishesmerged (geometry)
select astext(multi(ST_Union(the_geom))) as the_geom from parishes
group by county_name
Но он продолжает генерировать нарушенные геометрии, которые у меня потом возникают большие проблемы при дальнейшей обработке.
Я пытаюсь сделать более простую карту уровня округа с основными областями вывода в.
Любые решения тоже не обязательно должны быть в Postgis, у меня установлен полный стек OS4Geo, последняя версия QGis и больше утилит, чем я могу потрясти.
Единственные вещи, которых у меня нет, - это большие парни вроде ArcGis (хотя у меня где-то где-то валяется Old Mapinfo)
Напомним, что набор данных, который я пытаюсь создать, должен сопровождать книгу ГИС, которую я пишу, для программистов .NET, желающих писать ГИС-приложения с использованием .NET
Попробовав приведенные ниже предложения, лучше всего подошел вариант «Пола Рамсея».
Теперь у меня есть хороший упрощенный файл для округов и районов, который достаточно прост для моей книги, но достаточно сложен, чтобы позволить мне продемонстрировать некоторые интересные геопространственные SQL.
Несмотря на то, что решение Пола, в конечном счете, было тем, что сработало для меня, я также использовал другие ответы на такие вещи, как упрощение карты полигонов и дальнейшее снижение сложности.
Однако, кое-что я заметил при этом, хотя ST_Collect действительно быстрее, чем ST_Union, запуск для запуска также был главным образом причиной неисправных геометрий. Я предполагаю, что увеличение скорости достигается за счет меньшей точности в основной функции.
astext(multi())
части? Я просто исхожу из того, что вижу в других примерах PostGIS.Ответы:
ST_Union будет работать, но ваша линейная работа почти наверняка не чистая. Так что границы твоих маленьких штучек не все так хорошо как бы. Вы можете аккуратно привязать их к сетке, чтобы попытаться увеличить шансы на то, что вершины выстраиваются, но я держу пари, что у вас все еще будет несколько случаев, которые не работают. Либо они будут за пределами допуска, либо, что более вероятно, будут места, где вершины не спарены, поэтому с одной стороны есть линия, а с другой - вершина.
Если у вас PostGIS 2.0, построение структуры топологии с допуском может дать вам ответ, который вы ищете, если вам повезет.
источник
Incorrect parameter count in the call to native function 'ST_Union'
и я не знаю, если это ограничение MySQL.Вы говорите, что нужно "... сформировать один большой многоугольник из одного внешнего кольца, которое содержит все полисы ...". ST_ExteriorRing делает это,
Вы можете использовать ST_Union (), как предложено, или протестировать с помощью ST_Collection ().
ЗАМЕЧАНИЯ: чтобы избежать маленьких петель или «сломанных геометрий», вы можете использовать st_convexhull и / или ST_Simplify для каждого geom,
и проверьте свою геометрию,
источник
Функция ST_Collect является «агрегатной» функцией в терминологии PostgreSQL
«
SELECT ST_Collect(GEOM) FROM GEOMTABLE GROUP BY ATTRCOLUMN
» вернет отдельную GEOMETRYCOLLECTION для каждого отдельного значения ATTRCOLUMhttp://postgis.net/docs/ST_Collect.html
Примечание: ST_Collect намного быстрее, чем ST_Union
источник
Исходя из вашего вопроса, я предполагаю, что вы используете продукт Boundary-Line от Ordnance Survey. Если это так, то он уже включает в себя набор данных уровня округа, поэтому нет необходимости пытаться генерировать его самостоятельно из приходских районов более низкого уровня.
Если вы не используете Boundary-Line, тогда я рекомендую вам сделать это, так как она бесплатна под лицензией OS OpenData и имеет уровень округа в виде файла формы, который вы можете загрузить непосредственно в PostGIS.
источник