Postgis如何处理使用不同SRID发送的坐标 [英] How is postgis treating coordinates sent with different SRID

查看:16
本文介绍了Postgis如何处理使用不同SRID发送的坐标的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在运行一个Django应用程序,并且我的数据库使用的是PostGis扩展。我试图更好地理解当我发送坐标时幕后会发生什么,特别是因为我使用的是不同的坐标系,这些坐标系转换为不同的SRID。我的问题有三点:

  1. Django/postgis在数据库中创建点或面时是否处理转换。
  2. 是否可以使用不同的SRID重新查询
  3. 是否建议使用默认SRID=4326

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

class MyModel(models.Model):

    name = models.CharField(
        max_length=120,
    )
    point = models.PointField(
        srid=4326,
    )
    polygon = models.PolygonField(
        srid=4326,
    )
  1. 现在我正在发送具有不同SRID的不同坐标和多边形。

我在Django文档中看到:

此外,如果GEOS几何与字段的坐标系不同(具有不同的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)发送一个点时,我从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))'发送一个多边形时,我从数据库'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是可以使用的好标准吗?

非常感谢大家提前给予的帮助。非常感谢。

推荐答案

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

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

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几何图形并直接检查数据库中的SR。如果您仅使用Django进行检查,则可能是它再次将请求中的坐标转换回来,这可能解释了您看不到任何差异。

回答您的问题:

SRID=4326是可以使用的标准吗?

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

进一步阅读:ST_AsEWKTWGS84

这篇关于Postgis如何处理使用不同SRID发送的坐标的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆