2016-04-25 21 views
0

私はPostGISのに新しいですし、これは私が私がGoogleマップでポイントを描いたたPostGIS st_containsない

select st_astext(geoma), 
st_astext(geomb), 
st_contains(geoma,geomb) 
from (
    select 
    ST_GeomFromGeoJSON('{"type":"Polygon","coordinates":[[[25.64214,-100.27873]],[[25.69505,-100.37006]],[[25.72599,-100.27702]],[[25.680978320466,-100.25384240723]]],"crs":{"type":"name","properties":{"name":"EPSG:4326"}}}') as geomA, 
    ST_GeomFromGeoJSON('{"type":"Point","coordinates":[25.683096, -100.311577]}') as geomB 
) as p 

ポイントにしてみてください任意の値のために(ST_contains機能で)falseを返し、なぜ私が把握傾けるようですおそらく私のデータを確認するが、Googleはそれが真でなければマップによれば、それはfalseを返し

答えて

2

にGeoJSONは、いくつかのエラーがあり、そのように、specificationに準拠していません。

  1. あなたがする必要があります軸の順序を(X Y)または(LNG lat)に反転します。今は問題ではないかもしれませんが、何か他のことをやろうとするとそうなります。
  2. ポリゴンのLinearRingは本当に壊れており、閉じた座標の単一のシーケンスで構成する必要があります。
  3. CRSプロパティは1つのジオメトリに提供されますが、他のジオメトリには提供されません。これは、通常、PostgISから「複合SRIDジオメトリの操作」エラーが発生します。両方のジオメトリにCRSを指定します。

これを試してみてください:

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 
関連する問題