3

GeoAlchemy2 上的文档似乎并不完整(与以前的版本相比)。

我有一个模型:

class AddressCode(Base):
    __tablename__ = 'address_codes'
    id = Column(Integer, primary_key=True)
    code = Column(Unicode(34))
    geometry = Column(Geometry('POINT'))

我想存储经纬度数据,我试图将其保存在上述模型中,例如

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

2 回答 2

8

在 GeoAlchemy 和 GeoAlchemy2 中,您需要以称为WKT 或 Well-known text或 Well-known 二进制格式的众所周知的文本格式指定几何图形。对于一个点,语法是'POINT(X Y)',因此'POINT(-0.666085 51.42553)'请注意先是经度,然后是纬度。

shapely模块包含用于处理关系数据库之外的几何图形的有用函数,以及 Python 几何类和 WKT、WKB 格式之间的轻松转换。

于 2013-11-11T16:19:52.920 回答
0

这是你如何做到的:

该区域表定义为:

regionTable = Table('region', metadata,
                Column('region_id', Integer, Sequence('region_region_id_seq'), primary_key=True),
                Column('type_cd', String(30)),
                Column('region_nm', String(255)),
                Column('geo_loc', Geography )
                )

如何查询:

(给我当前位置 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']
于 2014-01-28T21:03:29.077 回答