代码之家  ›  专栏  ›  技术社区  ›  Phil

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

  •  2
  • Phil  · 技术社区  · 7 年前

    我正在使用sqlalchemy包来声明对我的postgis数据库的查询,该数据库充满了。城市的osm数据。我想从planet\u osm\u point表中检索经度和纬度值。 我声明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() 作用

    1 回复  |  直到 7 年前
        1
  •  2
  •   alexisdevarennes    7 年前

    ST_X/ST_Y 返回浮动。您可以使用浮动或将其转换为文本。

    使用 ST_AsEWKT 这是有问题的,因为两者 ST_Y/ST_X 回来 floats ST_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