Учитывая ваши полигоны и запрос, как вы описали, он должен работать без проблем. Рассмотрим следующие геометрии ..
.. вы видите, что точка лежит только внутри внутреннего многоугольника. Если вы выполняете запрос с ST_Within
, дающим координаты точки, вы должны получить только внутренний многоугольник:
WITH j (geom) AS (VALUES
('POLYGON((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))'),
('POLYGON((26.88 31.08,30.57 31.08,30.57 28.49,26.88 28.49,26.88 31.08))'))
SELECT * FROM j
WHERE ST_Within('POINT(28.46 28.64)',j.geom)
Однако, если ваш запрос каким-либо образом использует BBOX полигонов вместо их области, вы действительно получите и внешние полигоны, например:
WITH j (geom) AS (VALUES
('POLYGON((35 10, 45 45, 15 40, 10 20, 35 10),(20 30, 35 35, 30 20, 20 30))'),
('POLYGON((26.88 31.08,30.57 31.08,30.57 28.49,26.88 28.49,26.88 31.08))'))
SELECT * FROM j
WHERE ST_Within('POINT(28.46 28.64)',j.geom::GEOMETRY::BOX2D)
Попробуйте добавить образец данных и запрос к вашему вопросу. Надеюсь, это поможет вам отладить ваш код.