2012-07-28 82 views
0

由於一些計算,我必須將GeoPoint轉換爲屏幕座標,請對它們進行一些操作,然後將它們轉換回GeoPoint。Android:MapView投影不準確

不幸的是,經過這些轉換之後,新GeoPoint從我想要的位置離開(在屏幕上)0-2毫米處。

令人驚訝的是,下面的代碼行已經改變了一點GeoPoint。

Projection projection = map.getProjection(); 
Log.d("bevore", geoPoint.getLatitudeE6() +" "+geoPoint.getLongitudeE6()); 
Point pt = new Point(); 

projection.toPixels(geoPoint, pt); 

geoPoint = projection.fromPixels(pt.x, pt.y); 
Log.d("after", geoPoint.getLatitudeE6() +" | "+geoPoint.getLongitudeE6()); 

,輸出是:

D/bevore(31252): 53106803 | 8852244 
D/after(31252): 53106802 | 8852240 

有沒有辦法來improove這種不準確性。

+1

這可能是一個解決問題? (即覆蓋許多地點的一個像素)。要測試,請採用'after'地點,並通過相同的流程運行。如果這是一個解決問題,它應該沒有變化。如果它在投影中出現錯誤,那麼它應該以相同的邊距出現。 – 2012-09-23 13:44:39

+0

你說得對。它保持不變。這是否意味着沒有辦法改進它? – anonymous 2012-09-23 15:13:52

+0

您應該可以提高地圖的分辨率(可能通過放大)。您只需要充分展開,每個經緯度地理座標就可以單獨解析爲不同的像素。 – 2012-09-23 21:12:54

回答

0

您可以計算轉換前後GeoPoint之間的差異,並在需要時將其添加到fromPixels的結果中。

Projection projection = map.getProjection(); 
projection.toPixels(geoPointBefore, pt); 
geoPointAfter = projection.fromPixels(pt.x, pt.y); 

int diffLatitude = geoPointBefore.getLatitudeE6() - geoPointAfter.getLatitudeE6(); 
int diffLongitude = geoPointBefore.getLongitudeE6() - geoPointAfter.getLongitudeE6(); 
... 
... 
... 
// Add the difference to GeoPoint objects after conversion `fromPixels` 
0

我沒有嘗試這樣做,但你轉換的GeoPoint之前以像素爲單位,這樣當你四捨五入到E6你將有一個更小的錯誤,你可以用10或100嘗試多。 我希望它能幫助你。

+0

我會在接下來的幾天嘗試這個... – anonymous 2012-09-30 20:40:16