postgis st_contains似乎不对

时间:2016-04-25 22:23:39

标签: postgresql geolocation postgis

我是postgis的新手,我无法弄清楚为什么这会为我在点中尝试的任何值返回false(在ST_contains函数中)

{{1}}

我在谷歌地图中绘制了点以确认我的数据,但根据谷歌地图它应该是真的它会返回false

1 个答案:

答案 0 :(得分:2)

GeoJSON有几个错误,并且不符合specification,例如:

  1. 您需要将轴顺序翻转为(X Y)或(lng lat)。现在可能没关系,但是如果你想做其他事情的话,那就好了。
  2. Polygon的LinearRing真的坏了,需要由一系列闭合坐标组成。
  3. CRS属性是针对一个几何体而不是另一个几何体提供的,这通常会在混合SRID几何体上进行操作"来自PostGIS的错误。为两种几何形状或没有几何形状提供CRS。
  4. 试试这个:

    SELECT ST_AsText(geomA),
      ST_AsText(geomB),
      ST_Contains(geomA, geomB)
    FROM (
      SELECT
        ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[-100.27873,25.64214],[-100.37006,25.69505],[-100.27702,25.72599],[-100.25384240723,25.680978320466],[-100.27873,25.64214]]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}') AS geomA,
        ST_GeomFromGeoJSON('{"type":"Point","coordinates":[-100.311577,25.683096],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}') AS geomB
    ) AS p;
    -[ RECORD 1 ]----------------------------------------------------------------------------------------------------------------------------
    st_astext   | POLYGON((-100.27873 25.64214,-100.37006 25.69505,-100.27702 25.72599,-100.25384240723 25.680978320466,-100.27873 25.64214))
    st_astext   | POINT(-100.311577 25.683096)
    st_contains | t