GeoAlchemy2上的文档看起来并不完整(与以前的版本相比)。
我有一个模特:
class AddressCode(Base):
__tablename__ = 'address_codes'
id = Column(Integer, primary_key=True)
code = Column(Unicode(34))
geometry = Column(Geometry('POINT'))
我想存储lat / long数据,我试图在上面的模型中保存,例如
"51.42553,-0.666085"
这给了我错误:
"Parse error at position 9 within Geometry (the "," char")
任何人都可以了解我在哪里出错?
同样在这个主题上,我如何形成一个查询来说..
显示最近的20位用户:
class AddressCode(Base):
__tablename__ = 'address_codes'
id = Column(Integer, primary_key=True)
name = Column(Unicode(34))
geometry = Column(Geometry('POINT'))
喜欢什么?
geom_var = "51.42553,-0.666085"
Session.query(User).filter(func.ST_DWithin, 20, geom_var).all()
答案 0 :(得分:7)
在GeoAlchemy和GeoAlchemy2中,您需要使用名为WKT or Well-known text的众所周知的文本格式或众所周知的二进制格式指定几何。对于某一点,语法为'POINT(X Y)'
,因此'POINT(-0.666085 51.42553)'
会注意到经度先行,然后是纬度。
shapely模块包含用于处理关系数据库之外的几何的有用函数,以及Python几何类和WKT,WKB格式之间的简单转换。
答案 1 :(得分:0)
这是你如何做到的:
此区域表定义为:
regionTable =表('region',元数据, 列('region_id',整数,序列('region_region_id_seq'),primary_key = True), 列('type_cd',String(30)), 列('region_nm',String(255)), 专栏('geo_loc',地理位置) )
如何查询:
(给我距离我当前位置50英里范围内的所有地区..)
sqlstring = select([regionTable], func.ST_DWithin(regionTable.c.geo_loc,'POINT(-74.78886216922375 40.32829276931833)',1609 * 50))
result = connection.execute(sqlstring)
for row in result:
print "region name:", row['region_nm']