使用 Geoalchemy2 在 PostGis 中存储 WKBElement 会导致经度不正确
Storing a WKBElement in PostGis using Geoalchemy2 results in an incorrect longitude
我正在开发一个需要能够在 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
,如果我使用 this converter,我会得到 POINT(47.65641 -117.42733)
,这是正确的位置。
然而,当我在数据库中查找该行时,我发现 0101000020E610000039622D3E05D447403EB324404D494FC0
存储在位置列中,即 POINT(47.65641 -62.57267)
:一个非常不同的经度。
据我所知,我向 GeoAlchemy2 提供了正确的数据和格式,如果有人可以提示我在这里做错了什么,我将不胜感激。
在Postgis中,点坐标表示为Point(longitude, latitude)
,所以值-117
是纬度,在4326中是无效的。
尝试交换测试数据中的输入坐标。
我正在开发一个需要能够在 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
,如果我使用 this converter,我会得到 POINT(47.65641 -117.42733)
,这是正确的位置。
然而,当我在数据库中查找该行时,我发现 0101000020E610000039622D3E05D447403EB324404D494FC0
存储在位置列中,即 POINT(47.65641 -62.57267)
:一个非常不同的经度。
据我所知,我向 GeoAlchemy2 提供了正确的数据和格式,如果有人可以提示我在这里做错了什么,我将不胜感激。
在Postgis中,点坐标表示为Point(longitude, latitude)
,所以值-117
是纬度,在4326中是无效的。
尝试交换测试数据中的输入坐标。