我正在使用GeoDjango和Postgis,并对一个点从4326到24877进行转换,当我检查结果时,它不一样
我的值(value)观是:
Latitude -16.42238172128686
Longitude -71.47541752550751
使用长纬度作为 x、y 坐标
In [63]: pnt = Point(-71.47541752550751, -16.42238172128686, srid=4326)
In [64]: pnt.transform(CoordTransform(SpatialReference(4326), SpatialReference(24877)))
In [65]: pnt.x, pnt.y, pnt.srid
Out[65]: (1521142.247877425, 8160547.8770980425, 24877)
逆
In [66]: pnt = Point( 1521142.247877425,8160547.8770980425, srid=24877 )
In [67]: pnt.transform(CoordTransform(SpatialReference(24877), SpatialReference(4326)))
In [68]: pnt.x, pnt.y, pnt.srid
Out[68]: (-71.47541753138003, -16.42238165040434, 4326)
Postgres 上的 SQL
SELECT ST_AsText(ST_Transform(ST_SetSRID(ST_MakePoint(-71.47541752550751, -16.42238172128686), 4326),24877))
POINT(1520903.86571082 8160169.90886929)
从 postgis 结果中获取数据
In [69]: pgs = Point(1520903.86571082, 8160169.90886929, srid=24877)
In [70]: pgs.transform(CoordTransform(SpatialReference(24877), SpatialReference(4326)))
In [71]: pgs.x, pnt.y, pgs.srid
Out[71]: (-71.47745375612124, -16.42238165040434, 4326)
正如你所看到的,geodjango 和 postgres 之间至少有 300 米的差异,这意味着不同的地方
在阅读和询问一些论坛和聊天后,我发现这与 presition 有关,我在互联网上询问了更多有关它的信息,作为这个主题的新手,这已经得到了一些了解。
我正在寻找能够为我继续研究提供足够知识的信息,例如:
- 正确的做法
- 造成这种差异的原因
- 系统之间的差异是多少米,或者正确的计算方法
- 如何验证此职位
- 此信息的最佳工作方式是什么
最佳答案
如果你看http://spatialreference.org/ref/epsg/24877/您可以看到 EPSG 24877 仅在 -84.0000、-10.4000、-78.0000、0.0000 之间有效,而您尝试转换的点位于该范围之外(-71.475 不在 -84、-78 内,而 -16.422 不在内) t 在-10.4,0)以内
第二个问题可能是从 WGS84 转换为 PSAD56。这里涉及到网格转移。除非您有一些数据已经存在于 PSAD56 中,否则我建议使用 WGS 84/UTM zone 19S (EPSG:32719),其边界为 -72.0000、-80.0000、-66.0000、0.0000。
如果您绝对需要 PSAD56,您可能会更幸运地使用 PSAD56/UTM zone 19S (EPSG:24879),但仍然可能存在网格移位问题。
关于django - ST_Transform 和 CoordTransform 之间涉及 preset 的不同计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17736086/