首页 > 解决方案 > 搜索一个点存在于哪个多边形行上?

问题描述

我在几何列上插入了多个带有 geojson 值的位置行,并尝试根据点值搜索它,我需要找到该点是否存在于多边形上?我看过这个https://stackoverflow.com/a/38941705/1138192但我有 geojson 值可以按点插入和搜索。

到目前为止我所尝试的:

CREATE TABLE areas (
    id SERIAL PRIMARY KEY,
    name VARCHAR(64),
    the_geom GEOMETRY
);

CREATE INDEX areas_the_geom_idx ON areas USING GIST (the_geom);

INSERT INTO areas (name, the_geom)
    VALUES ('Corrected_Shape', 
    ST_TRANSFORM(ST_GeomFromGeoJSON('{
    "type":"Polygon",
    "coordinates":[[
        [-91.23046875,45.460130637921],
        [-79.8046875,49.837982453085],
        [-69.08203125,43.452918893555],
        [-88.2421875,32.694865977875],
        [-91.23046875,45.460130637921]
    ]],
    "crs":{"type":"name","properties":{"name":"EPSG:4326"}}
}'),3857));

SELECT name FROM areas WHERE ST_Contains(the_geom, ST_GeomFromText('POINT(43.452918 -69.082031)'));

在此处输入图像描述

标签: postgresqlpostgisgeojson

解决方案


首先,您似乎在创建点时交换了经度和纬度(应该是经度)

-->ST_GeomFromText('POINT(-69.082031 43.452918)')

然后,您将多边形几何投影到 3857 但不是点。您必须对两个几何图形使用相同的 CRS。

-->ST_TRANSFORM(ST_GeomFromText('POINT(-69.082031 43.452918)'),3857)


推荐阅读