В документации PostGIS говорится, что ST_PointOnSurface
возвращается «ТОЧКА, гарантированно лежащая на поверхности». Кажется, что эта функция может быть тривиально реализована, чтобы дать результаты, которые удовлетворяют документации, но обеспечивают небольшую практическую полезность, хотя я уверен, что PostGIS предоставляет нетривиальную реализацию.
Это введение в PostGIS обеспечивает хорошее сравнение и контраст ST_Centroid
с ST_PointOnSurface
и говорит, что «[ST_PointOnSurface] существенно дороже в вычислительном отношении, чем операция с центроидом».
Есть ли более подробное объяснение того, как ST_PointOnSurface
рассчитывается? Я использовал ST_Centroid
, но столкнулся с некоторыми крайними случаями в моих данных, когда центроид находится вне геометрии. Я считаю, что ST_PointOnSurface
это правильная замена, но имя функции и документация оставляют место для неопределенности.
Кроме того, производятся ли вычислительные затраты ST_PointOnSurface
, даже если центроид уже находится в пределах геометрии?
Ответы:
Основываясь на нескольких экспериментах, я думаю, что
ST_PointOnSurface()
работает примерно так, если геометрия является многоугольником:Это может не иметь смысла, поэтому вот эскиз многоугольника с лучом, разделяющим его на северную и южную части:
Таким образом,
ST_PointOnSurface()
иST_Centroid()
обычно это разные точки даже на выпуклых многоугольниках.Я думаю, что единственная причина «поверхности» в названии заключается в том, что если геометрия имеет трехмерные линии, то результатом будет просто одна из вершин.
Я согласен с тем, что было бы полезно больше объяснений (и лучше назвать), и надеюсь, что программист GEOS сможет пролить немного света на этот вопрос.
источник