GeoAlchemy2存储点和查询结果

时间:2013-11-10 20:21:38

标签: sqlalchemy postgis geoalchemy

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()

2 个答案:

答案 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']