2013-07-19 76 views
2

我與GeoDjango內置和PostGIS的工作,並在一個點做轉型,從4326到24877,當我檢查的結果,它是不一樣的不同的計算方法,包括presition

我的價值觀是:

Latitude -16.42238172128686 
Longitude -71.47541752550751 

Initial position

使用長緯度爲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) 

Position after calculus

上的Postgres

SELECT ST_AsText(ST_Transform(ST_SetSRID(ST_MakePoint(-71.47541752550751, -16.42238172128686), 4326),24877)) 

POINT(1520903.86571082 8160169.90886929) 

從PostGIS的以數據SQL結果

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) 

Image on sql results

正如你可以看到有GeoDjango內置和Postgres之間的差異,在至少300米,這意味着不同的地方

閱讀,並要求在一些論壇和聊天室後,我發現這與預測有關,我在網上問了更多,作爲這個主題的新手,這聽起來有些蹊蹺。

我要尋找的信息給我足夠的知識來繼續工作就可以了,例如:

  1. 正確的方式上做
  2. 在這個差異
  3. 多少米有原因系統之間的區別或者正確的計算方式
  4. 如何驗證這個職位
  5. 什麼是最好的工作方式這個信息
+0

正確的軸順序是經度/緯度,即:x =經度,y =緯度。而且,哪個SRID? '28477'還是'24877'?什麼'SELECT postgis_full_version()'返回? –

+0

感謝您的回答,這是一個類型寫入錯誤,我正在尋找的srid是24877 – Carlos

回答

3

如果你看看http://spatialreference.org/ref/epsg/24877/你可以看到,EPSG 24877是唯一有效的-84.0000 -71.475之間,-10.4000,-78.0000,0.0000,以及你想轉換點之外的(不在-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區域19S(EPSG:24879)可能會帶來更多運氣,但仍可能會出現電網轉換問題。

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) 

點存在(-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

+0

對不起,我雖然你沒有讀好我的問題,因爲你已經切換點,我的緯度/經度是-16.42238172128686,-71.47541752550751 ,srid = 4326,根據投影文檔,x是經度,y是緯度,那麼當你在工作中工作時,你使用Point(-71.47541752550751,-16.42238172128686,srid = 4326),並在django和postgis上做一個差異,一個小小的差異,但我正在尋找的原因,讀它,我發現原因是用於計算的軸,原因只是一個aproximation不是一個確切的點 – Carlos