2017-11-16 13 views
1

Ich benutze das Sqlalchemy-Paket, um Abfragen an meine Postgis-Datenbank, die mit .osm Daten einer Stadt gefüllt ist. Ich möchte die Längen- und Breitengradwerte aus der Tabelle planet_osm_point abrufen. ich geben Sie die SQL-Abfrage, die wie folgt aussieht:Longitude und Latidude aus Postgis-Datenbank mit Sqlalchemy erhalten

 SELECT st_y(st_asewkt(st_transform(way, 4326))) as lat, 
      st_x(st_asewkt(st_transform(way, 4326))) as lon 
      "addr:housenumber" AS husenumber, 
      "addr:street" AS street, 
      "addr:postcode" AS postcode 
     FROM planet_osm_point 

sqlalchemy wirft mir diesen Fehler:

sqlalchemy.exc.InternalError: (psycopg2.InternalError) FEHLER: Argument to ST_Y() must be a point 

Das einzige Problem ist die ST_Y() und ST_X() Funktion.

+0

aktualisiert meine Antwort – alexisdevarennes

Antwort

2

ST_X/ST_Y Rücklaufschwimmer. Sie könnten entweder die Floats verwenden oder sie in Textform umwandeln.

ST_AsEWKT Verwendung ist hier problematisch, da sowohl ST_Y/ST_X Rückkehr floats und ST_AsEWKT ein geometry erwartet.

die Schwimmer Verwenden Sie erhalten:

SELECT st_y(st_transform(way, 4326)) AS lat, 
      st_x(st_transform(way, 4326)) AS lon 
      "addr:housenumber" AS husenumber, 
      "addr:street" AS street, 
      "addr:postcode" AS postcode 
     FROM planet_osm_point 

Oder Text werfen:

SELECT cast(st_y(st_transform(way, 4326)) as text) AS lat, 
      cast(st_x(st_transform(way, 4326)) as text) AS lon 
      "addr:housenumber" AS husenumber, 
      "addr:street" AS street, 
      "addr:postcode" AS postcode 
     FROM planet_osm_point 
+0

Hmm, sondern nach dem postgis auf sie verweisen in der Tat asewkt genannt wird, und es gibt keine Funktion aswkt: [ST_AsEWKT] (http://www.postgis.net/docs/ST_AsEWKT.html) [Postgis Funktionen] (http://www.postgis.net/docs/) – Phil

+0

Aktualisiert! Danke - Sollte jetzt funktionieren – alexisdevarennes

+1

['ST_Y'] (https://postgis.net/docs/ST_Y.html) und [' ST_X'] (https://postgis.net/docs/ST_X.html) gib das y zurück und x Koordinate eines Punktes als float. ['ST_AEEWKT'] (http://www.postgis.net/docs/ST_AsEWKT.html) erwartet eine Geometrie als Argument. Das würde wie ein schlechtes Spiel aussehen. –

Verwandte Themen