0
我有一个多对多的关系,并将OsmAdminUnit(多边形几何图形)的实例分组到OsmAdminAgg实例中。如何用GeoAlchemy2计算ST_Union?
模型的定义主要有:
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)
现在我很努力做的是选择属于某个OsmAdminAgg OsmAdminUnits和获得由GeoAlchemy应用ST_Union合并的polgyons。
选择属于具有ID = 1个工程管理AGG的所有管理单位:
units = OsmAdminUnit.query.filter(OsmAdminUnit.agg_units.any(id=1)).all()
但我不明白我怎么能对结果应用ST_Union。 我的方法,到目前为止是:
union = db.session.query(
OsmAdminUnit.geometry.ST_Union().ST_AsGeoJSON().label('agg_union')
).filter(OsmAdminUnit.agg_units.any(id=1)).subquery()
那么,如何让这些几何形状的结合,并把它作为GeoJSON的?
顺便说一句,我正在使用SQLAlchemy,Flask-SQLAlchemy,Geoalchemy2在Flask上建立它。