我有一个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)试图保存带有上面json值分配的event对象的event.location时,如果出现此错误,则失败
DataError: (DataError) Geometry SRID (0) does not match column SRID (4326)event.location的正确格式是什么?
db.session.add(event)
db.session.commit() 才能正常工作?
发布于 2014-06-16 07:16:40
这是我处理地理信息时的一个错误。我需要显式地声明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发布于 2020-09-13 22:12:54
我最后使用了以下代码段:在加载/保存数据时使用GeoJSON值的列类型:
class GeometryJSON(Geometry):
""" Geometry, as JSON
The original Geometry class uses strings and transforms them using PostGIS functions:
ST_GeomFromEWKT('SRID=4269;POINT(-71.064544 42.28787)');
This class replaces the function with nice GeoJSON objects:
{"type": "Point", "coordinates": [1, 1]}
"""
from_text = 'ST_GeomFromGeoJSON'
as_binary = 'ST_AsGeoJSON'
ElementType = dict
def result_processor(self, dialect, coltype):
# Postgres will give us JSON, thanks to `ST_AsGeoJSON()`. We just return it.
def process(value):
return value
return process
def bind_expression(self, bindvalue):
return func.ST_SetSRID(super().bind_expression(bindvalue), self.srid)
def bind_processor(self, dialect):
# Dump incoming values as JSON
def process(bindvalue):
if bindvalue is None:
return None
else:
return json.dumps(bindvalue)
return process
@property
def python_type(self):
return dicthttps://stackoverflow.com/questions/24034007
复制相似问题