2017-11-16 4 views
1

sqlalchemy 패키지를 사용하여 도시의 .osm 데이터로 채워지는 postgis 데이터베이스에 대한 쿼리를 기술하고 있습니다. 위도와 경도 값을 가져 와서 planet_osm_point 테이블을 말하고 싶습니다.sqlalchemy를 사용하여 postgis 데이터베이스에서 경도 및 latidude 가져 오기

 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의 날이 오류가 발생합니다 :

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

유일한 문제는 ST_X() 함수 ST_Y()입니다 나는이처럼 보이는 SQL 쿼리를 명시.

+0

업데이트 내 대답 – alexisdevarennes

답변

2

ST_X/ST_Y 반환 수레. 수레를 사용하거나 텍스트에 캐스팅 할 수 있습니다. ST_AsEWKT를 사용

floatsST_AsEWKTgeometry 기대 모두 ST_Y/ST_X 반환하기 때문에 여기에 문제가있다.

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 

을 또는 텍스트 캐스트 :

당신이 얻을 수레를 사용하여 실제로 asewkt이라고

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

흠,하지만 PostGIS와 따라하기를 참조하고 어떤 기능이 없다 aswkt : [ST_AsEWKT] [Postgis 함수] (http://www.postgis.net/docs/) – Phil

+0

업데이트되었습니다. 감사합니다 - 지금 작동해야합니다 – alexisdevarennes

+1

['ST_Y'] (https://postgis.net/docs/ST_Y.html) 및 ['ST_X'] (https://postgis.net/docs/ST_X.html)는 y를 반환합니다. 점의 x 좌표를 부동 소수점으로 나타냅니다. ['ST_AsEWKT'] (http://www.postgis.net/docs/ST_AsEWKT.html)는 기하학을 인수로 기대합니다. 나쁜 일치처럼 보일거야. –

관련 문제