首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python (geoalchemy)中设置空间SQL查询范围

如何在python (geoalchemy)中设置空间SQL查询范围
EN

Stack Overflow用户
提问于 2015-07-17 12:00:50
回答 1查看 472关注 0票数 5

从几天以来,我一直在努力弄清楚如何使用支持空间数据库操作的python的sqlalchemy扩展geoalchemy2正确地从geoalchemy2数据库中查询数据。

我正在处理python3.4和Openstreetmaps数据,这些数据来自勃兰登堡(德国的行政区域),我将这些数据输入到本地Postgres中。数据以lat/long为单位。我一直在学习如何使用geoalchemy (tutorial.html)的ORM部分设置内容的教程。一开始,一切都很好

  1. 定义映射 Base = declarative_base() class QuerySchema(Base):__tablename__ = "brandenburg_polygon“osm_id = Column(Integer,primary_key=True) name = Column(String)闭合性=列(String) way =列(几何学(‘多边形’))
  2. 定义DB设置 engine = create_engine( create_engine pwd=keyring.get_password('osm',‘andi_postgres’))会话=会话制造者(bind=engine) Session = Session()
  3. 做我的查询 建筑物= session.query(QuerySchema)

现在,一切都很好,直到我试图缩小范围-因为我不想让所有的建筑物存储在我的DB,但可能只有那些在一个给定的边界或边界多边形。

  1. 通过定义边界框(WKT-格式)来缩小范围 bbox =‘多边形( 13.01881424267171 52.50091209200498,13.01881424267171 52.57800809377812,12.87181701302189 52.57800809377812,12.87181701302189 52.50091209200498,13.01881424267171 52.50091209200498)

我尝试在各种选项中使用.filter(),但没有成功。据我所知,那个filter()需要某种bool输入,因此必须根据它定义一个语句。那么这样的陈述有什么不对呢?

代码语言:javascript
复制
    session.query(QuerySchema).filter(func.ST_Contains(bbox, QuerySchema.way))

检查func.ST_Contains(bbox, QuerySchema.way)的结果会带来<geoalchemy2.functions.ST_Contains at 0x10a12a400; ST_Contains>,因此显然filter()不能正常工作。

问:如何执行操作才能正常工作,即只给给定边界内的DB条目?

EN

回答 1

Stack Overflow用户

发布于 2015-07-20 23:26:31

请尝试以下查询:

代码语言:javascript
复制
session.query(QuerySchema).filter(QuerySchema.way.ST_Within(bbox))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31475396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档