2016-04-25 3 views
0

Ich bin neu in postgis und ich kann nicht herausfinden, warum dies falsch zurückgibt (in der ST_Contains-Funktion) für jeden Wert ich in dem Punkt versuchenpostgis ST_Contains scheint nicht

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 

ich die Punkte in Google Maps zu Ende ging meine Daten angeblich bestätigen, aber es gibt false zurück, wenn nach google Maps sollte

Antwort

2

die GeoJSON hat mehrere Fehler, und entspricht nicht dem specification, wie wahr sein:

  1. Sie müssen kippen Sie die Achsenreihenfolge zu (X Y) oder (Lng Lat). Es ist vielleicht jetzt egal, aber es wird, wenn Sie versuchen, etwas anderes zu tun.
  2. Der LinearRing für das Polygon ist wirklich gebrochen und muss aus einer einzigen Folge geschlossener Koordinaten bestehen.
  3. Die CRS-Eigenschaft wird für eine Geometrie bereitgestellt, aber nicht für die andere, was normalerweise einen Fehler "Operation bei gemischten SRID-Geometrien" von PostGIS zur Folge hat. Stellen Sie das CRS für beide oder keine der Geometrien bereit.

Versuchen Sie folgendes:

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