Проверьте, есть ли точка (широта и долгота) на карте внутри многоугольника - PullRequest
0 голосов
/ 04 июня 2019

Ранее я использовал функцию, чтобы определить, находится ли точка на карте в радиусе.Но условия изменились, и мне нужно проверить точку входа в многоугольник.У меня есть как минимум четыре точки - северо-восток / юго-восток / юго-запад / северо-запад с широтой и долготой.Но похоже, что ST_GeogFromText ('POLYGON (())') предназначен для совершенно разных вещей, или я не могу понять, как их использовать.

Мой пример для расстояния:

create table "Locations"
(
  id serial not null constraint "Locations_pkey" primary key,
  name varchar(120),
  geopin geometry(Point, 4326)
);

select *
from "Locations"
where
  ST_DWithin(
    "Locations"."geopin",
    ST_MakePoint(90.00, 90.00)::geography,
    10000
  );

Что я не могу понять.

select *
from "Locations"
where
  SOME_FUNCTION_TO_SEARCH_IN_POLYGON(
  "Locations"."geopin",
    SOME_GEOGRAPHY_FROM_POLYGON(0 0,0 180,180 0,180 180)
  );

Еще лучше, если будет достаточно, чтобы предоставить только NE и SW широту и долготу.

1 Ответ

0 голосов
/ 04 июня 2019

Вы бы сделали пространственное пересечение.Поскольку вы больше не вычисляете расстояния, вы можете выполнить сравнение, используя геометрию непосредственно в 4326. Нет необходимости приводить к географии.

Чтобы построить многоугольник с его угловыми координатами, вы можете построить 2D-блок

WITH src AS (select St_GeomFromText('Point(25 25)',4326) as geopin),
    searchArea AS (select ST_SETSRID(
            ST_MakeBox2D(
                ST_MakePoint(-170, -75),
                ST_MakePoint(170, 45)),
        4326) as geom)
SELECT ST_Intersects(geopin,geom)
FROM src, searchArea;
...