Luc*_*uca 6 python postgresql postgis sqlalchemy geoalchemy2
我正在使用PostgreSQL,SQLAlchemy和GeoAlchemy2库在数据库中存储一些地理空间坐标。
我使用 Python 在数据库中定义数据库列,如下所示:
import sqlalchemy as sa
import geoalchemy2 as ga
geo = sa.Column(ga.Geography('POINT', srid=4326)) # 4326 = WGS84 Lat Long
Run Code Online (Sandbox Code Playgroud)
我可以通过如下转换来添加地理坐标:
self.geo = 'POINT({} {})'.format(latitude, longitude)
Run Code Online (Sandbox Code Playgroud)
这将其编码为字符串,如下所示:0100002076ED....
我的问题是:如何从 python 中将此字符串转换回纬度和经度?
选择时,将其转换为选择表达式的一部分,例如:
select ST_X(some_loc_col::geometry), ST_Y(some_loc_col::geometry) from mytable
Run Code Online (Sandbox Code Playgroud)
使用 SQLAlchemy,您可以直接执行这样的语句,从文本中准备它(参见sqlalchemy.sql.text()),或者使用 SQLAlchemy 和 GeoAlchemy2 中的函数构建表达式。
表达式示例:
import sqlalchemy
from sqlalchemy.sql.expression import cast
import geoalchemy2
import geoalchemy2.functions as fns
db_url = '...'
echo = True
sqlalchemy.create_engine(db_url, echo=echo)
meta = sqlalchemy.MetaData()
my_table = sqlalchemy.Table('mytable', meta, autoload=True, autoload_with=engine)
stmt = my_table.select().with_only_columns(
[ fns.ST_X(cast(my_table.c.some_loc_col, geoalchemy2.types.Geometry)),
fns.ST_Y(cast(my_table.c.some_loc_col, geoalchemy2.types.Geometry)) ])
Run Code Online (Sandbox Code Playgroud)
另请参阅:https://geoalchemy-2.readthedocs.io/en/0.11.1/spatial_functions.html
| 归档时间: |
|
| 查看次数: |
1915 次 |
| 最近记录: |