我有一些城市的地理座標(經度&經度),並希望得到x,y座標,因此可以將它們繪製成地圖。將地理座標(經緯度)映射到地圖(x,y)
該地圖屬於非標準地圖,例如http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg。
我試了幾個公式推我發現,但沒有一個似乎真的工作:(。簡單的JavaScript代碼或紅寶石將是最好的:)
我有一些城市的地理座標(經度&經度),並希望得到x,y座標,因此可以將它們繪製成地圖。將地理座標(經緯度)映射到地圖(x,y)
該地圖屬於非標準地圖,例如http://www.wordtravels.com/images/map/Spain/Fuerteventura_map.jpg。
我試了幾個公式推我發現,但沒有一個似乎真的工作:(。簡單的JavaScript代碼或紅寶石將是最好的:)
除了上面的答案,還有一個開源的proj4js庫,它執行各種地圖投影之間的轉換。它由OpenLayers在內部用於這種事情,並支持許多流行的投影和座標系統。
你不會找到它,除非方便你在一個非常小的工作規模(並接近赤道)。維基百科的Geographic coordinate system是一個很好的開始...
更容易的路徑可能是使用類似web mapping的東西,並堅持你的緯度和經度。
使用Google Maps API,您可以將jpg覆蓋在地圖上並正確放置。
下面是一個例子 http://code.google.com/apis/maps/documentation/javascript/examples/overlay-hideshow.html
,這裏是大約覆蓋 http://code.google.com/apis/maps/documentation/javascript/overlays.html
有很多種方法與不同的精確度來解決這個問題的API頁面。然而,它們都歸結爲執行與您的地圖相對應的投影。
如果您知道您的地圖是墨卡託投影品種,那麼可以簡單地將經緯度座標視爲X/Y,進行適當的縮放和平移。也就是說,你會找到一個簡單的ax + b和cy + d來完成這項工作。
如果你的地圖不是墨卡託投影(因爲它可能不是如果它試圖讓規模一致,就像這個似乎做的那樣),那麼你最好的選擇是假設它是一個「地球切線」投影。 (這對於小型的大陸來說可行。)在這種情況下,您需要首先將緯度/長度投影到三維座標系中。
z=sin(lat)
x=cos(lat)*sin(long)
y=cos(lat)*cos(long)
正z指向北極。正y指向0,0,正x指向lat 0長90(東),正lat/long指向北和東。當然,你必須先轉換爲弧度。
所有這一切都假設了一個球形的地球,這並不完全正確,但它足夠接近,除非你正在發射遠程迫擊炮彈。
無論如何,一旦你有了你的XYZ,那麼你需要旋轉和縮放地圖。要圍繞Z軸旋轉,只需在投影到三維之前減去基本經度。這樣做是爲了將您的地圖放在零經度上,以實現最簡單的數學運算。
完成此操作後,您只需將球形向前旋轉,直到原始地圖朝前。在y-z軸上進行2-d旋轉。使用http://en.wikipedia.org/wiki/Coordinate_rotations_and_reflections來確定這一部分。
最後,您的x,z座標將與您的地圖的x,y座標非常一致,以便如前所述進行適當的縮放/平移。
也許這會有所幫助,我已經使用javascript完成了美國的實施。
進一步思考,假設你的位圖是一個標準的投影,它應該工作,但是你必須確定你自己的投影參數(經絡,縮放等)。這應該是可能的,但可能不適合地圖投影新手。 – winwaed 2010-12-06 03:43:34
謝謝,我能夠從提到的圖書館中提取所需的公式:) – gucki 2010-12-11 01:08:53