2

我正在使用 GeoDjango 和 Postgis,并在从 4326 到 24877 的点上进行转换,当我检查结果时,结果不一样

我的价值观是:

Latitude -16.42238172128686
Longitude -71.47541752550751

初始位置

使用 long lat 作为 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)

sql 结果上的图像

如您所见,geodjango 和 postgres 之间存在至少 300 米的差异,这意味着不同的地方

在一些论坛和聊天中阅读并询问后,我发现这与presition有关,我在互联网上询问了更多关于它的信息,作为这个话题的新手,这得到了一些听说。

我正在寻找能够为我提供足够知识以继续工作的信息,例如:

  1. 这样做的正确方法
  2. 这种差异的原因
  3. 系统之间的差异是多少米,或者计算的正确方法是多少米
  4. 如何验证这个职位
  5. 这些信息的最佳工作方式是什么
4

2 回答 2

3

如果您查看http://spatialreference.org/ref/epsg/24877/,您会发现 EPSG 24877 仅在 -84.0000、-10.4000、-78.0000、0.0000 之间有效,并且您尝试转换的点在外部(-71.475 不在 -84,-78 范围内,-16.422 不在 -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),但仍然可能存在网格偏移问题。

于 2013-07-22T17:55:22.927 回答
2

csotelo:你已经转换了纬度/经度,这一点似乎在 24877 中不存在

>>> p = Point(-16.42238172128686,-71.47541752550751, srid=4326)
>>> p.transform(24877)
>>> print p
POINT (2388367.8123248801566660 916017.4938517492264509)

# SELECT ST_AsText(ST_Transform(ST_SetSRID(ST_MakePoint(-16.42238172128686,-71.47541752550751), 4326),24877));
                st_astext                 
------------------------------------------
 POINT(2388367.81232488 916017.493851751)

Point(-71.47541752550751, -16.42238172128686, srid=4326) 在 24877 定义的区域之外,因此只能近似。你会发现那个点实际上就在南极洲附近。 https://maps.google.nl/maps?q=-71.47541752550751,+-16.42238172128686&hl=en&ll=-71.475417,-16.422382&spn=60.209188,270.527344&sll=53.157645,5.636521&sspn=1.462449,4.22699&t=m&z=3

于 2013-07-19T00:35:54.797 回答