2011-04-04 39 views
0

給定一個邊界框,我希望能夠計算該框內所有可能的緯度/經度組合,以達到一定的精度,例如,小數點後3位。目前計算完成的實時性非常低。爲了幫助加快速度,我計劃使用AppFabric Caching之類的功能來緩存所有點/距離組合的數據集。如果正確完成,這應該將距離計算減少爲查找。邊界框內的緯度/經度組合

我錯過的唯一難題是計算邊界框中緯度/經度組合的有效方法 - 任何人都可以幫忙嗎?

馬克

+1

地圖有什麼樣的投影? – Reinderien 2011-04-04 20:22:36

+2

@markpirvine 爲什麼你想要所有可能的組合?僅僅知道某個點是否在邊界框內是不夠的?這將更容易計算。 – Adi 2011-04-04 20:25:22

+0

我認爲Reinderien正在假設一個對齊的矩形邊界框。但是,除了您使用的是什麼地圖投影之外,您還打算使用哪種箱形/投影?同一枚硬幣的兩面... – winwaed 2011-04-04 20:48:07

回答

1

對於爲什麼你想要所有這些點而不是僅僅檢查一個給定的點的問題,仍然有點神祕莫測,這是因爲不是需要很多計算。

但是,給定一個小方塊,我們可以把它看作是局部平坦的。

也就是說,我們把任何一點新座標:

(llat, llong) -> (x = llong * cos(llat), y = llong) 

[注意COS()不是一個昂貴的功能 - 除非你是仍然在486!]

的問題,那麼降低對於笛卡爾飛機。

假設通過「框」你是指一個矩形,不一定是定向的。

顯而易見的事情是光柵化它。

  • 從您的方框中找到極值緯度點。
  • 對於範圍內的每個緯度找到與邊緣相交的一對經度。 [這是爲了這個邊緣區間,你使用局部平坦度,只考慮直線相交。]
  • 在這對經度定義的區間內的所有經度都在你所尋找的集合中。
  • 也許你所有的實際存儲都是間隔終點而不是所有點。
1

我的猜測是計算「所有的經度和緯度組合的」一定的箱子不應該加快之內;它根本不應該完成。相反,您應該派生沿着邊界框的四個邊緣運行的函數。例如,對於變化的x和常數y_top,推導函數lat(x)long(x)。給定四個邊的兩個函數=總共八個函數,您應該能夠開發快速邏輯,以確定任何給定的座標是否在邊界框中。

0

我會同意其他答案,通常你不想創建所有緯度/經度組合列表。

如果您使用的是SQL Server 2008或2012,那麼使用STContains()或STIntersects()方法非常簡單,並且使用空間索引非常快。