使用sqlalchemy从postgis数据库获取经度和纬度

Getting longitude and latidude from postgis database with sqlalchemy

我正在使用 sqlalchemy 包来查询我的 postgis 数据库,该数据库充满了一个城市的 .osm 数据。我想从 planet_osm_point table 中检索经度和纬度值。 我声明 sql 查询,如下所示:

      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_Y()ST_X() 函数。

ST_X/ST_Y Return 浮动。您可以使用浮点数或将它们转换为文本。

这里使用 ST_AsEWKT 是有问题的,因为 ST_Y/ST_X return floatsST_AsEWKT 都需要 geometry.

使用你得到的花车:

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

或转换为文本:

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