Я пытаюсь очистить некоторые геопространственные данные, которые у меня есть в базе данных PostGIS.Из-за некоторых неточностей в процессе геокодирования некоторые точки, которые должны находиться в границах определенной области, отображаются очень близко, но за пределами ограничительного полигона указанной области.
Мой первый подход состоял в том, чтобыиспользовать функцию ST_ClosestPoint в PostGIS, но безуспешно.Проблема в том, что эта функция возвращает ближайшую точку ON для геометрии A в геометрию B (https://postgis.net/docs/ST_ClosestPoint.html). Однако ON не означает IN, поскольку, если я запускаю следующий запрос, он спрашивает, находится ли ближайшая точка ON A (многоугольник).) к B (точка) содержится в A:
SELECT ST_Contains(
ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'),
ST_ClosestPoint(
ST_GeomFromText('POLYGON((175 150, 20 40, 50 60, 125 100, 175 150))'),
ST_Buffer(ST_GeomFromText('POINT(110 170)'), 20)
)
) As ptwkt;
Возвращает значение false, что означает, что ближайшая точка вообще не содержится в A. Я хочу указать точку внутри многоугольника (содержится вв этом многоугольнике), который находится ближе всего к другой точке. Я хочу этого, потому что остальная часть моего кода проверяет, находятся ли точки в их соответствующих областях. Если бы это можно было решить с помощью запроса PostGIS, это было бы идеально.