2016-06-09 10 views
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) 

것은 이제 내가 무엇을 할 고군분투하는 GeoAlchemy에서 ST_Union은을 적용하여 합병 polgyons을 특정 OsmAdminAgg에 속하는 OsmAdminUnits를 선택하고 받고 있습니다. 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로받을 수 있나요?

Btw, 나는 Flask 위에 SQLAlchemy, Flask-SQLAlchemy, Geoalchemy2를 사용하여 이것을 구현할 것이다.

답변

0

이 시도 :

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