Сохранение элемента WK в PostGIS с использованием Geoalchemy2 приводит к неправильной долготе

#python #postgis #geoalchemy2

#python #postgis #geoalchemy2

Вопрос:

Я работаю над приложением, которое должно иметь возможность сохранять точку в базе данных 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])
  

Модель, которую я использую

 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 она хранится в столбце location, который является POINT(47.65641 -62.57267) : совсем другая долгота.

Насколько я знаю, я предоставляю правильные данные и формат в GeoAlchemy2, и я был бы очень признателен, если бы кто-нибудь мог намекнуть на то, что я здесь делаю неправильно.

Ответ №1:

В Postgis координаты точек выражаются как Point(longitude, latitude) , поэтому значением -117 является широта, которая недопустима в 4326.

Попробуйте поменять местами входные координаты в тестовых данных.

Комментарии:

1. Я не могу поверить, что пропустил это. Полезно знать, что порядок расположения осей не стандартизирован во всех программах для ГИС. Я буду следить за этим в следующий раз.