2016-10-05 1 views
0

Ich benutze Postgres mit postig Erweiterung. Ich habe Koordinaten, die ich in folgenden postgis Funktion gesetzt:Die Verwendung der inversen Funktion mit der Umwandlung von Geometrie in Koordinaten führt zu gemischten SRID-Fehler

select ST_SetSRID(ST_point(18.533935546875, 48.23199134320962),4674) 

Als Ergebnis I Geometrietyp erhalten: 01010000204212000000000000B08832402D0570E4B11D4840

Wenn ich

inverse Aktion machen will
select st_x(st_transform(way,4326)), st_y(st_transform(way,4326)) from planet_osm_point where way ='01010000204212000000000000B08832402D0570E4B11D4840' 

ich Fehler:

ERROR: Operation on mixed SRID geometries 
********** Error ********** 
ERROR: Operation on mixed SRID geometries 
SQL state: XX000 

Was kann das Problem sein?

Antwort

1

Das Problem etwas in der Fehlermeldung beschrieben wird: Sie gleich Geometrien in planet_osm_point.way versuchen zu finden, aber sie haben einen anderen SRID als 4674. Es ist effektiv dies:

SELECT ST_SetSRID(ST_Point(0, 0), 4674) = ST_SetSRID(ST_Point(0, 0), 4326); 

So müssen Sie Pick eine gemeinsame SRID und verwandeln einen zum anderen, dh

SELECT ST_SetSRID(ST_Point(0, 0), 4674) = 
         ST_Transform(ST_SetSRID(ST_Point(0, 0), 4326), 4674); 

außer ich nicht empfehlen den =(geometry, geometry) Operator, da sie identische Geometrien erfordert, die mit Fließkommafehler nach tran nicht sehr verbreitet sind formen.

Ein besserer Ansatz ist es, alle way Geometrien innerhalb eines kleinen Fehlermarge Abstand ST_DWithin mit zu finden:

select st_x(st_transform(way,4326)), st_y(st_transform(way,4326)) 
from planet_osm_point 
where ST_DWithin(
     way, 
     ST_Transform(
      ST_SetSRID(ST_Point(18.533935546875, 48.23199134320962), 4674), 
      <way_SRID>), 
     1e-6); 

Hier verwandelt den Punkt in die SRID von way (Sie nie angegeben, so aktualisieren <way_SRID>), dann finden Sie alles in 1e-6 Grad Entfernung (ca. 10 cm). Erhöhe es, wenn du weitere Punkte in der Nähe sammeln möchtest. way Punkte.

Verwandte Themen