首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用ST_Union计算GeoAlchemy2?

如何用ST_Union计算GeoAlchemy2?
EN

Stack Overflow用户
提问于 2016-06-09 13:03:19
回答 2查看 636关注 0票数 0

我有一个多到多的关系,OsmAdminUnit (多边形几何图形)的实例被分组为OsmAdminAgg实例。

示范定义实质上是:

代码语言:javascript
复制
class OsmAdminUnit(db.Model):
    __tablename__ = 'osm_admin'

    id          = db.Column(db.Integer, primary_key=True)
    geometry    = db.Column(Geometry(
                    geometry_type='GEOMETRY', 
                    srid=3857), nullable=False)
    agg_units   = db.relationship('OsmAdminAgg',
                    secondary=aggregations,
                    backref=db.backref('osm_admin', lazy='dynamic'))

class OsmAdminAgg(db.Model):
    __tablename__ = 'admin_agg'

    id   = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True, nullable=False)

现在我要做的是选择属于某个OsmAdminUnits的OsmAdminAgg,并通过应用GeoAlchemy中的ST_Union来实现polgyons的合并。

使用id=1工作时,选择所有属于admin agg的管理单元:

代码语言:javascript
复制
units = OsmAdminUnit.query.filter(OsmAdminUnit.agg_units.any(id=1)).all()

但我不知道如何将ST_Union应用于这个结果。到目前为止,我的做法是:

代码语言:javascript
复制
union = db.session.query(
        OsmAdminUnit.geometry.ST_Union().ST_AsGeoJSON().label('agg_union')
        ).filter(OsmAdminUnit.agg_units.any(id=1)).subquery()

那么,我如何得到这些几何学的结合,并得到它作为GeoJSON?

顺便说一句,我正在使用SQLAlchemy、、Geoalchemy2构建这个系统。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-22 12:50:40

试试这个:

代码语言:javascript
复制
from sqlalchemy.sql.functions import func

union = db.session.query(func.ST_AsGeoJSON(func.ST_Union(
    OsmAdminUnit.geometry)).label('agg_union')
    ).filter(OsmAdminUnit.agg_units.any(id=1)).subquery()
票数 1
EN

Stack Overflow用户

发布于 2021-02-26 02:06:08

您可以在GeoAlchemy 2文档中看到这方面的基本模板。本质上,您需要将func传递给查询,而不是模型,以选择联合本身。

在你的情况下,就像:

代码语言:javascript
复制
import sqlalchemy

union = db.session.query(
    sqlalchemy.func.ST_AsGeoJSON(
        sqlalchemy.func.ST_Union(OsmAdminUnit.geometry)
    ).label('agg_union')
).filter(
    OsmAdminUnit.agg_units.any(id=1)
).all()

这将获取匹配过滤器的geometry记录的OsmAdminUnit值的合并,并将其作为字符串化的GeoJSON返回。

接受的答案对我无效,我认为在我使用的sqlalchemy版本中,导入可能是不同的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37726802

复制
相关文章

相似问题

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