2

我正在开发一个需要能够在 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存储在位置列中,即POINT(47.65641 -62.57267):一个非常不同的经度。

据我所知,我向 GeoAlchemy2 提供了正确的数据和格式,如果有人能暗示我在这里做错了什么,我将不胜感激。

4

1 回答 1

1

在 Postgis 中,点坐标表示为Point(longitude, latitude),所以取值-117为纬度,在 4326 中无效。

尝试交换测试数据中的输入坐标。

于 2019-04-05T11:18:35.793 回答