Я ищу функцию, которая будет возвращать пересечение 2 или более полигонов (географический тип).
Я знаю ST_UNION, ST_COLLECT, но это работает только для геометрического типа.
Любой совет будет действительно оценен
Я ищу функцию, которая будет возвращать пересечение 2 или более полигонов (географический тип).
Я знаю ST_UNION, ST_COLLECT, но это работает только для геометрического типа.
Любой совет будет действительно оценен
Вы можете выполнить приведение к геометрии и выполнить операцию там. Вам просто нужно быть осторожным, чтобы ваши формы имели смысл при оценке на декартовой плоскости. Они оборачивают линию перемены дат или полюса?
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#PostGIS_GeographyFunctions
Рассматривали ли вы ST_Transform в виде геометрического типа, вложенного в ST_Union или ST_Collect? Документы PostGIS (по ссылке amercader) говорят, что они используют эту функцию внутри для некоторых географических операций.