【问题标题】:Getting longitude and latidude from postgis database with sqlalchemy使用 sqlalchemy 从 postgis 数据库中获取经度和纬度
【发布时间】:2017-11-16 12:09:18
【问题描述】:

我正在使用 sqlalchemy 包对我的 postgis 数据库进行查询,该数据库中填充了城市的 .osm 数据。我想从planet_osm_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() 函数。

【问题讨论】:

  • 更新了我的答案

标签: python function sqlalchemy postgis latitude-longitude


【解决方案1】:

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

在这里使用ST_AsEWKT 是有问题的,因为ST_Y/ST_X 返回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

【讨论】:

  • 嗯,但是根据postgis的参考,它确实被称为asewkt并且没有函数aswkt:ST_AsEWKTPostgis functions
  • ST_YST_X 分别将点的 y 和 x 坐标返回为浮点数。 ST_AsEWKT 需要一个几何作为参数。这似乎是一场糟糕的比赛。
  • 好的,我试过这种方式,但我仍然收到错误,即 ST_Y 的参数必须是一个点。
  • 或者,根本不使用任何东西,因为浮点值是坐标值。
  • 很高兴我们能提供帮助,如果您不介意,请将答案标记为正确 :)
猜你喜欢
  • 2019-11-05
  • 2019-08-04
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 2013-07-07
  • 2020-06-18
  • 2020-11-07
  • 1970-01-01
相关资源
最近更新 更多