【发布时间】:2021-05-20 05:18:43
【问题描述】:
我正在运行一个 django 应用程序,并且我正在为我的数据库使用 PostGis 扩展。我试图更好地理解当我发送坐标时会发生什么,特别是因为我正在使用不同的坐标系,这些坐标系转换为不同的 SRID。我的问题有三个:
- 在数据库中创建点或多边形时,django/postgis 是否处理转换。
- 我可以使用不同的 SRID 查询吗
- 是否建议使用默认的 SRID=4326
假设我有一个这样的模型(注意我设置的是标准 SRID=4326):
class MyModel(models.Model):
name = models.CharField(
max_length=120,
)
point = models.PointField(
srid=4326,
)
polygon = models.PolygonField(
srid=4326,
)
- 现在我正在发送具有不同 SRIDS 的不同坐标和多边形。
我在这里阅读 django 文档:
此外,如果 GEOSGeometry 位于与字段不同的坐标系中(具有不同的 SRID 值),则使用空间数据库的转换程序将其隐式转换为模型字段的 SRID
所以如果我理解正确,这意味着当我发送这样的 API 请求时:
data = {
"name": "name"
"point": "SRID=2345;POLYGON ((12.223242267 280.123144553))"
"polygon": "SRID=5432;POLYGON ((133.2345662 214.1429138285, 123.324244572 173.755820912250072))"
}
response = requests.request("post", url=url, data=data)
多边形和点都将正确转换为 SRID=4326??
编辑:
当我用SRID=25832;POINT (11.061859 49.460983) 发送一个点时,我会从数据库中得到'SRID=4326;POINT (11.061859 49.460983)'。当我发送带有'SRID=25832;POLYGON ((123.2796155732267 284.1831980485285, ' '127.9249715130572 273.7782091450072, 142.2351651215613 ' '280.3825718937042, 137.558146278483 290.279508688337, ' '123.2796155732267 284.1831980485285))' 的多边形时,我会从数据库中得到一个多边形'SRID=4326;POLYGON ((4.512360573651161 0.002563158966576373, ' '4.512402191765552 0.002469312460126783, 4.512530396754145 ' '0.002528880231016955, 4.512488494972807 0.00261814442892858, ' '4.512360573651161 0.002563158966576373))'
- 我可以使用不同的 SRID 查询吗
不幸的是,我还没有找到将相同点查询回其原始 SRID 的方法。这甚至可能吗?
- 最后,我主要处理欧洲的坐标,但我也可能不得不包含来自世界各地的零星坐标。
SRID=4326是一个很好的标准吗?
非常感谢您提前提供的所有帮助。真的很感激。
【问题讨论】:
-
您好!由于我对 djang 一无所知,我将从 GIS 的角度发表评论:对于您的问题:“多边形和点都将正确转换为 SRID=4326??”您是否尝试过脚本并在 PostgreSQL 中检查了坐标存储在哪个 SRS 中?尝试使用 ST_AsEWKT。并且“我可以使用不同的 SRID 查询它吗”:是的,您可以使用 ST_Transform 来解决这个问题。 “是否建议使用默认的 SRID=4326” WGS84 是最常用的 SRS,所以我倾向于说是的,但这完全取决于您的用例。也许您所覆盖的区域需要不同的 SRS
-
谢谢@JimJones。是的,我已经检查过了,它使用
SRID4326保存。但我不知道它是否也能正确转换。例如,如果我发送一个点 POINT (11.061859 49.460983),我会从具有不同 SRID 的数据库中获得相同的值。当我发送一个多边形时,我得到不同 SRID 的不同值(我编辑了我的问题) -
在转换后,两个参考系统不太可能在同一个地方得到相同的坐标,所以我相信你的怀疑可能是有道理的:SRS 只是被改变了,但没有转换正在执行。您是否尝试过将它们绘制到地图上以查看它们是否仍然对应于同一个地方,例如使用 pgAdmin IV 的几何查看器?
-
ahhhh 但是等等,抱歉...该点没有正确写入数据库...。现在它确实给了我一个不同的值。现在我很确定它实际上正在正确转换(如果你想在你的答案中包含它)
标签: django postgresql django-rest-framework postgis srid