Flask 更正json格式以保存到geoalchemy2几何体字段中

Flask 更正json格式以保存到geoalchemy2几何体字段中,flask,geoalchemy2,Flask,Geoalchemy2,我有一个这种格式的json: { "type":"Feature", "properties":{}, "geometry":{ "type":"Point", "coordinates":[6.74285888671875,-3.6778915094650726] } } 一个烧瓶-地球炼金术2定义的区域如下:- from app import db from app.mixins import Timesta

我有一个这种格式的json:

{

     "type":"Feature",
     "properties":{},
     "geometry":{
          "type":"Point",
          "coordinates":[6.74285888671875,-3.6778915094650726]
     }
}
一个烧瓶-地球炼金术2定义的区域如下:-

from app import db
from app.mixins import TimestampMixin
from geoalchemy2 import Geometry

class Event(db.Model, TimestampMixin):
    __tablename__ = 'events'

    id = db.Column(db.BigInteger, primary_key=True)
    title = db.Column(db.Unicode(255))
    start = db.Column(db.DateTime(timezone=True))
    location = db.Column(Geometry(geometry_type='POINT', srid=4326))
    is_active = db.Column(db.Boolean(), default=False)

    def __repr__(self):
        return '<Event %r %r>' % (self.id, self.title)
事件位置的正确格式是什么

db.session.add(event)
db.session.commit() 

要正确工作?

这是我处理geojson的一个错误。我需要显式地声明geojson必须符合的srid

这就是解决方案:-

def process_formdata(self, valuelist):
    """ Convert GeoJSON to DB object """
    if valuelist:
        geo_ob = geojson.loads(valuelist[0])
        # Convert the Feature into a Shapely geometry and then to GeoAlchemy2 object
        # We could do something with the properties of the Feature here...
        self.data = from_shape(asShape(geo_ob.geometry), srid=4326)
    else:
        self.data = None

最后我使用了以下代码段:一种在加载/保存数据时与GeoJSON值一起工作的列类型:

类几何测量学几何测量学: 几何体,如JSON 原始几何体类使用字符串,并使用PostGIS函数对其进行变换: ST_Geomefromewkt'SRID=4269;点-71.064544 42.28787'; 此类使用漂亮的GeoJSON对象替换函数: {类型:点,坐标:[1,1]} from_text='ST_GeomFromGeoJSON' as_binary='ST_AsGeoJSON' ElementType=dict def result_processor self,方言,coltype: 由于“ST_AsGeoJSON”,Postgres将为我们提供JSON。我们只是把它退了。 def processvalue: 返回值 返回过程 def bind_表达式本身,bindvalue: 返回func.ST_setridsuper.bind_表达式bindValue,self.srid def bind_处理器自身,方言: 将传入值转储为JSON def processbindvalue: 如果bindvalue为无: 一无所获 其他: 返回json.dumpsbindvalue 返回过程 @财产 def python_typeself: 返回指令
def process_formdata(self, valuelist):
    """ Convert GeoJSON to DB object """
    if valuelist:
        geo_ob = geojson.loads(valuelist[0])
        # Convert the Feature into a Shapely geometry and then to GeoAlchemy2 object
        # We could do something with the properties of the Feature here...
        self.data = from_shape(asShape(geo_ob.geometry), srid=4326)
    else:
        self.data = None