检查多边形内的地图上的点(纬度和经度)

时间:2019-06-04 07:57:41

标签: sql postgresql postgis

之前,我使用函数来查找地图上的点是否在半径内。但是条件已经改变,我需要检查多边形中的入口点。我至少有四个要点-东北/东南/西南/西北,经度和纬度。但是看起来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 :(得分:0)

您将进行空间相交。由于不再计算距离,因此可以直接使用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;