Хранение WKBElement в PostGis с использованием Geoalchemy2 приводит к неправильной долготе - PullRequest
0 голосов
/ 05 апреля 2019

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

1 Ответ

0 голосов
/ 05 апреля 2019

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

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

...