代码之家  ›  专栏  ›  技术社区  ›  A l w a y s S u n n y

搜索存在于哪个多边形行上的点?

  •  0
  • A l w a y s S u n n y  · 技术社区  · 4 年前

    我在一个geometry列上插入了多个geojson值的位置行,并试图根据一个点值搜索它,我需要找到点是否存在于多边形上?我见过这个 https://stackoverflow.com/a/38941705/1138192

    我目前所做的努力:

    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)'));
    

    enter image description here

    0 回复  |  直到 4 年前
        1
  •  1
  •   JGH    4 年前

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

    ST_GeomFromText('POINT(-69.082031 43.452918)')

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

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