Объединения полигонов (ST_UNION для типа География)

Я ищу функцию, которая будет возвращать пересечение 2 или более полигонов (тип географии).

Я знаю о ST_UNION, ST_COLLECT, но он работает только для типа геометрии.

Любой совет будет по достоинству оценен

3 ответа

Вы можете привести к геометрии и выполнить там операцию. Вам просто нужно быть осторожным, чтобы ваши фигуры имели смысл при оценке на декартовой плоскости. Они обертывают линию даты или полюса?

select geography(st_union(a::geometry, b::geometry))

Если фигуры имеют очень длинные ребра, тогда вступает в игру разница в интерполяции ребер между интерполяцией больших кругов, которую вы хотите на сфере, и линейной интерполяцией, которую вы получаете на плоскости, и вам нужно научиться сохранять формы ребер как можно лучше. Вы можете работать в соответствующей картографической проекции (автоматически выбирается с помощью функции bestsrid).

select geography(
         st_transform(
           st_union(
             st_transform(a::geometry, _st_bestsrid(a,b)),
             st_transform(b::geometry, _st_bestsrid(a,b))
           ),
           4326
       ))

Наслаждайтесь!

Тип Geography поддерживает только небольшое подмножество функций PostGIS. Здесь вы можете проверить их все и посмотреть, подходит ли вам какой-либо из них:

http://postgis.refractions.net/docs/ch08.html

Рассматривали ли вы ST_Transform в геометрический тип, вложенный в ST_Union или ST_Collect? Документы PostGIS (по ссылке amercader) говорят, что они используют эту функцию внутри для некоторых географических операций.

Другие вопросы по тегам