【发布时间】:2020-06-30 20:39:32
【问题描述】:
几天以来,我一直在想如何让我的 Flask 应用返回有效的 GeoJSON,以下是我目前得到的结果:
models.py
class Building(base):
__tablename__ = 'buildings'
id = Column(Integer, primary_key=True)
district = Column(Unicode)
address = Column(Unicode)
name = Column(Unicode)
building_type = Column(Unicode)
mpoly = Column(Geometry('MULTIPOLYGON'))
building = relationship("User")
# this part is done as answered here: https://stackoverflow.com/questions/41684512/cant-transform-geometry-to-geojson
def building_to_dict(self):
return mapping(shapely.wkb.loads(str(self.mpoly), True))
def __str__(self):
d = dict()
d["id"] = self.id
d["district"] = self.district
d["address"] = self.address
d["name"] = self.name
d["building_type"] = self.building_type
d["mpoly"] = self.building_to_dict()
return shapely.dumps(d)
现在在主文件中我有以下路由:
app.py
@app.route('/geojson')
def get_json():
features = session.query(Building.mpoly.ST_AsGeoJSON()).all()
return jsonify(features)
这是我的两个问题:
1)
返回类似于 JSON 的响应,如下所示:
"{\"type\":\"MultiPolygon\",\"coordinates\":[[[[16.8933137,52.471446],...,]]]}"
不是正确的 GeoJSON。
jsonify 之前的特征变量看起来是这样的:
[('{"type":"MultiPolygon","coordinates":[[[[16.914159616,52.473822807],...,]]]}',)]
2) 我的 GeoAlchemy 查询应该是什么样子,不仅返回几何字段,还返回其他字段?
任何形式的提示或帮助都非常感谢,在此先感谢!
【问题讨论】:
-
所以我不知道确切的解决方案,但我认为您的问题与以下链接有关。 (1)stackoverflow.com/questions/7907596/json-dumps-vs-flask-jsonify。 (2)stackoverflow.com/questions/7102754/…。根据 1 flask jsonify 中的评论“......不会将 SQLAlchemy 对象和列表转换为 JSON。”所以我相信你可能需要做的是编写一个序列化数据库对象(特征)的函数或类,然后将它传递给返回 jsonify(特征)。
-
[('{"type":"MultiPolygon","coordinates":[[[[16.914159616,52.473822807],...,]]]}',)]
标签: json python-3.x flask flask-sqlalchemy geoalchemy2