2008-08-05 58 views
22

我有一堆緯度/經度對映射到(地理位置失真)地圖上已知的x/y座標。如何將緯度/經度映射到扭曲的地圖?

然後我又有一個緯度/經度對。我想盡可能地將其繪製在地圖上。我該如何去做這件事?

起初,我決定爲三個最近的經緯度點創建一個線性方程組,並計算這些方程的變換,但是這根本不起作用。既然這是一個線性系統,我也不能使用更多的附近點。

你不能假定北方向上:你現在擁有的是現有的緯度/長 - > x/y映射。

編輯:它不是墨卡託投影,或類似的東西。它爲了可讀性而被任意地扭曲(想想地鐵地圖)。我只想使用最接近的5到10個映射,這樣映射其他部分的變形不會影響我正在計算的映射。

此外,整個地圖位於非常小的地理區域,因此不需要擔心地球 - 平坦的地球假設足夠好。

+0

你嘗試過http://trimaps.com嗎? – Gilbou 2014-11-14 15:16:21

回答

8

是否還有關於這種失真的更多具體細節?例如,如果您的緯度和經度使用墨卡託投影「扭曲」到您的二維地圖上,則轉換數學爲readily available

如果地圖真的被任意扭曲,有很多東西可以嘗試,但最簡單的可能是從現有的點映射中計算出weighted average。你的權重可以是從你的新點到你現有的每個點的x/y距離的平方的倒數。

一些僞代碼:

estimate-latitude-longitude (x, y) 

    numerator-latitude := 0 
    numerator-longitude := 0 
    denominator := 0 

    for each point, 
     deltaX := x - point.x 
     deltaY := y - point.y 
     distSq := deltaX * deltaX + deltaY * deltaY 
     weight := 1/distSq 

     numerator-latitude += weight * point.latitude 
     numerator-longitude += weight * point.longitude 
     denominator += weight 

    return (numerator-latitude/denominator, numerator-longitude/denominator) 

該代碼會給出一個比較簡單的近似。如果您可以更精確地確定投影扭曲地理座標的方式,那麼您可能會做得更好。

0

問題是球體可能被扭曲了很多種方式,並且所有這些點在赤道上都是已知的,可以說,不會幫助您將點遠離地圖。

你需要更好的「關閉」點,然後你可以假設這三個點在第四個平面上,並進行插值 - 知道經度距離是一個函數,而不是一個常數。

0

嗯。也許我在這裏錯過了關於這個問題的一些事情,但是如果你有長/寬的信息,你也有朝北的方向?

看來您需要將測地座標映射到投影座標系。例如osgb到wgs84。

涉及的數學是非平凡的,但代碼出來只有幾行。如果我有更多的時間,我會發布更多,但我需要一個淋浴,所以我會很無聊,並鏈接到wikipedia條目,這是非常好的。

注意:後淋浴編輯。

2

好的。從理論的角度來看,鑑於失真是「任意的」,任何解決方案都要求您對這種任意失真進行建模,您顯然無法得到「答案」。然而,任何解決方案都將涉及(通常隱含地)施加一些可能或可能不反映現實情況的扭曲模型。

由於您似乎對假定某種局部連續性失真映射的模型最感興趣,最明顯的選擇是您已經嘗試過的一種:最接近點之間的線性插值。超越這一點將需要更復雜的數學和數值分析知識。

但是,您不正確,因爲我們假設您無法將其展開爲更多點。您可以通過使用最小平方誤差方法。找到最小化其他點的誤差的線性答案。這可能是最直接的延伸。換句話說,取5個最近的點,並嘗試提出一個線性近似,以最小化這些點的誤差。並使用它。我會接下來嘗試。

如果這樣做不起作用,那麼N點區域的線性假設就會被破壞。此時您需要升級爲二次或立方模型。數學在這一點上會變得忙碌起來。

相關問題