2010-09-19 131 views

回答

2

除了上面的答案,還有一個開源的proj4js庫,它執行各種地圖投影之間的轉換。它由OpenLayers在內部用於這種事情,並支持許多流行的投影和座標系統。

+1

進一步思考,假設你的位圖是一個標準的投影,它應該工作,但是你必須確定你自己的投影參數(經絡,縮放等)。這應該是可能的,但可能不適合地圖投影新手。 – winwaed 2010-12-06 03:43:34

+1

謝謝,我能夠從提到的圖書館中提取所需的公式:) – gucki 2010-12-11 01:08:53

0

你不會找到它,除非方便你在一個非常小的工作規模(並接近赤道)。維基百科的Geographic coordinate system是一個很好的開始...

更容易的路徑可能是使用類似web mapping的東西,並堅持你的緯度和經度。

3

有很多種方法與不同的精確度來解決這個問題的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座標非常一致,以便如前所述進行適當的縮放/平移。

相關問題