Я работаю над приложением, которое должно сохранять точку в базе данных PostGis.Я использую GeoAlchemy, и он, похоже, хранит неправильную долготу.
У меня есть этот код для обработки запроса на добавление события с данными местоположения точки.
json_data = request.get_json(force=True)
if "location" in json_data:
json_location = json_data["location"]
geojson_geom = geojson.loads(json.dumps(json_location))
geom = from_shape(asShape(geojson_geom), srid=4326)
json_data["location"] = geom
event = Event(**json_data)
try:
session = Session()
session.add(event)
session.commit()
session.refresh(event)
except IntegrityError as e:
abort(409, error=e.args[0])
Модель Iиспользуйте
class Event(Base):
__tablename__ = 'events'
id = Column(Integer, primary_key=True)
name = Column(String, nullable=False)
location = Column(Geography(geometry_type='POINT', srid=4326), nullable=False)
Когда я использую данные этого теста:
{
"name": "Test",
"location": {
"coordinates": [
47.65641,
-117.42733
],
"type": "Point"
}
}
Тогда str(geom)
будет равен 010100000039622d3e05d4474061a6ed5f595b5dc0
, и если я использую , этот преобразователь получуPOINT(47.65641 -117.42733)
, который является правильным местоположением.
Однако, когда я просматриваю строку в базе данных, я вижу, что 0101000020E610000039622D3E05D447403EB324404D494FC0
хранится в столбце местоположения, который является POINT(47.65641 -62.57267)
: совсем другая долгота.
Насколько я знаю, я предоставляю правильные данные и формат для GeoAlchemy2, и я был бы очень признателен, если бы кто-то мог намекнуть на то, что я делаю здесь неправильно.