Объединения полигонов (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. Здесь вы можете проверить их все и посмотреть, подходит ли вам какой-либо из них:
Рассматривали ли вы ST_Transform в геометрический тип, вложенный в ST_Union или ST_Collect? Документы PostGIS (по ссылке amercader) говорят, что они используют эту функцию внутри для некоторых географических операций.