2012-02-05 76 views
1

這裏是我的場景:Android在地圖上找到的位置

我有一個地圖的圖像。我用它作爲背景圖像。

圖像形狀不是方形。它更像一個梯形。

我有圖像的四個角落的每一個的地理座標和圖像的寬度和高度。

現在,當我從GPS獲取位置座標時,我希望能夠繪製地圖上的點。由於圖像的形狀不是平方的,我不能用簡單的比例來評估地圖上gps座標的位置。

如何繪製我從GPS獲取的座標到地圖上的位置?

更新:

我使用的自定義地圖,我不使用的MapView,因爲我只能用谷歌地圖這個觀點(據我所知)。此外,應用程序需要能夠離線運行,而使用MapView時我認爲這是不可能的(就我所知,也是如此)。

+0

這聽起來像你沒有使用MapActivity,是否正確? – 2012-02-05 22:52:34

+0

約翰,我更新了這篇文章。不,我不使用mapactivity。 – Yash 2012-02-05 22:56:46

+0

由於您使用的是梯形,這是否包含某種3D視角?如果是這樣,你是否使用opengles功能將你的地圖(最好是矩形)轉換成梯形? – 2012-02-05 23:01:01

回答

0

我的做法是,您應該在顯示屏上顯示完整的地圖,並儘可能將其適合屏幕座標,因此在您的情況下,底部寬度可能適合整個屏幕底部顯示,而頂部可能更窄,可能有一些「非映射」區域位於屏幕的左側和右側。您需要能夠將地圖地理座標轉換爲屏幕像素座標(對於相對較小的區域,線性轉換可能足夠準確)。然後,您可以使用相同的地理座標到像素轉換,在地圖上放置代表用戶位置的標記。如果您希望用戶能夠以任何方向拖動地圖圖像或放大和縮小,則需要調整屏幕像素以相應地進行座標計算。

0

假如沒有什麼角度來看,你有四個角的座標,它只是縮放位置描述如下事項:

Point upperRightGPS; // upper right GPS coordinates 
Point upperLeftGPS; // upper left GPS coordinates 
Point lowerRightGPS; // lower left GPS corrdinates 
Point upperRight; // upper right screen pixel value (100, 0)? 
Point upperLeft; // upper left screen pixel value (0,0)? 
Point lowerRight; // lower right screen pixel value (0, 200)? 

public Point positionOnMap(Point gps){ 

    double dx = (upperRight.x - upperLeft.x)/(upperRightGPS.x - upperLeftGPS.x); 
    double dy = (upperRight.y - lowerRight.y)/(upperRightGPS.y - lowerRightGPS.y); 

    return new Point((int) dx * gps.x, (int) dy * gps.y); 
} 

這是假設的起源是在你的屏幕upperleft。

您可能需要調整上述代碼才能在您的情況下工作,但這是我最好的猜測,而不會看到您的代碼。

+0

謝謝你的迴應約翰。但從我的理解算法來看,只有覆蓋區域是正方形時纔會有效? – Yash 2012-02-06 05:49:22

+0

我想我不清楚你在找什麼 – 2012-02-06 06:19:25