首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何处理用不同SRID发送的坐标

如何处理用不同SRID发送的坐标
EN

Stack Overflow用户
提问于 2021-02-17 10:17:55
回答 2查看 539关注 0票数 2

我正在运行一个django应用程序,我正在为我的db使用PostGis扩展。当我发送坐标时,我试图更好地理解引擎盖下发生了什么,特别是因为我使用的是不同的坐标系统,它们会转换成不同的SRID。我的问题有三个:

  1. 是django/postgis在DB中创建点或多边形时处理转换。

假设我有这样一个模型(请注意,我正在设置标准SRID=4326):

代码语言:javascript
复制
class MyModel(models.Model):

    name = models.CharField(
        max_length=120,
    )
    point = models.PointField(
        srid=4326,
    )
    polygon = models.PolygonField(
        srid=4326,
    )

  1. 现在我用不同的SRIDS发送不同的坐标和多边形。

我在这里读到django的文档:

此外,如果

位于与字段不同的坐标系统(具有不同的GEOSGeometry值),则将使用空间数据库的转换过程将其隐式转换为模型字段的SRID

因此,如果我正确地理解了这一点,这意味着当我发送这样的API请求时:

代码语言:javascript
复制
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)发送点时,我从DB获得'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))'发送多边形时,我从DB中得到一个多边形'SRID=4326;POLYGON ((4.512360573651161 0.002563158966576373, ' '4.512402191765552 0.002469312460126783, 4.512530396754145 ' '0.002528880231016955, 4.512488494972807 0.00261814442892858, ' '4.512360573651161 0.002563158966576373))'

  1. 可以使用不同的SRID

查询它吗?

不幸的是,我还没有找到一种方法来将相同的点查询回原来的SRID。这有可能吗?

  1. ,最后,我主要是在欧洲使用坐标,但我也可能需要包括来自世界各地的零星坐标。SRID=4326是一个很好的标准吗?

谢谢你提前给我的帮助。真的很感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-02-17 12:28:00

转换几何的SRS不仅仅是改变它们的SRID。因此,如果由于某种原因,在转换后坐标返回的值完全相同,很可能根本就没有转换。

此示例使用ST_Transform将几何从25832转换为4326。你自己看看结果:

代码语言:javascript
复制
WITH j (geom) AS (
 VALUES('SRID=25832;POINT (11.061 49.463)'::geometry))
SELECT ST_AsEWKT(geom),ST_AsEWKT(ST_Transform(geom,4326)) FROM j;

 

       st_asewkt            |                      st_asewkt                       
---------------------------------+------------------------------------------------------
 SRID=25832;POINT(11.061 49.463) | SRID=4326;POINT(4.511355210946569 0.000446125446657)
(1 Zeile)

  • 你问题中的多边形变换是正确的。

确保django确实在存储您提到的值。发送一个25832几何并直接检查数据库中的SRS。如果您只使用django进行检查,那么可能是因为它再次在请求中转换坐标,这可能解释您看不到任何不同之处。

关于你的问题:

是一个很好的SRID=4326标准吗?

WGS84是全世界使用最多的SRS,所以我倾向于说是,但这取决于您的用例。如果您不确定要使用哪个SRS,它可能表明您的用例没有对它施加任何限制。所以,坚持使用WGS84,但是要记住,在应用程序中不需要混合不同的SRS。顺便说一句:如果您试图将几何图形存储在同一个表中的多个SRS中,PostgreSQL将引发异常;)

进一步阅读:ST_AsEWKTWGS84

票数 4
EN

Stack Overflow用户

发布于 2021-02-17 11:48:35

首先,我不是地理信息系统的专家(我在Django和GIS中创造了一些小东西),但是.在这篇关于GeoDjango:https://docs.djangoproject.com/en/3.1/ref/contrib/gis/tutorial/#automatic-spatial-transformations的文档中。根据该计划:

在进行空间查询时,GeoDjango会自动转换位于不同坐标系中的几何图形。..。

在控制台(./manage.py shell)中尝试:

代码语言:javascript
复制
from <yourapp>.models import MyModel
obj1 = MyModel.objects.all().first()
print(obj1)
print(obj1.point)
print(dir(obj1.point))
print(obj1.point.srid)

-编辑--您可以手动测试与此页面类似的SRID之间的转换:https://gis.stackexchange.com/questions/94640/geodjango-transform-not-working

代码语言:javascript
复制
obj1.point.transform(<new-srid>)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66239905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档