使用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 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
我正在使用 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 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