2012-10-22 33 views
0

我有兩個GPS位置。對於每個我創建一個不同範圍的邊界框。 每個邊界框都有最小/最大緯度和最小/最大經度。檢測兩個GPS座標邊界框重疊

需要實現一種方法來檢測這兩個框是否重疊(不要介意重疊範圍..只有真/假)。此外,這種方法將被集成在一個長循環中,所以我正在尋找最有效的方法來做到這一點。

注意:當說重疊時,我的意思是 - 「地圖上至少有一個包含在兩個邊界框中的單個點」。

任何想法?

回答

0

檢查一個矩形的其中一個角是否在另一個矩形內就足夠了。這是這兩個抱真:

  • rect1.minX rect1.maxX被rect2.minX和rect2.maxX
  • rect1.minY 之間rect1.maxY是介於rect2.minY和rect2.maxY之間

這個檢查應該沒有時間去做,所以效率不是問題。而且,參數的順序是不相關的。

+1

但是要小心邊界跨越日線箱,或極! – DNA

2

我面臨同樣的問題,以前的解決方案是不夠的。

被覆蓋和未覆蓋

此圖片顯示的情況下,我發現這個網頁,給應對這一問題的正確方法:https://rbrundritt.wordpress.com/2009/10/03/determining-if-two-bounding-boxes-overlap/ 下面是該解決方案的實施:

功能DoBoundingBoxesIntersect(BB1,BB2){

  //First bounding box, top left corner, bottom right corner 
      var ATLx = bb1.TopLeftLatLong.Longitude; 
      var ATLy = bb1.TopLeftLatLong.Latitude; 
      var ABRx = bb1.BottomRightLatLong.Longitude; 
      var ABRy = bb1.BottomRightLatLong.Latitude; 

      //Second bounding box, top left corner, bottom right corner 
      var BTLx = bb2.TopLeftLatLong.Longitude; 
      var BTLy = bb2.TopLeftLatLong.Latitude; 
      var BBRx = bb2.BottomRightLatLong.Longitude; 
      var BBRy = bb2.BottomRightLatLong.Latitude; 

      var rabx = Math.abs(ATLx + ABRx – BTLx – BBRx); 
      var raby = Math.abs(ATLy + ABRy – BTLy – BBRy); 

      //rAx + rBx 
      var raxPrbx = ABRx – ATLx + BBRx – BTLx; 

      //rAy + rBy 
      var rayPrby = ATLy – ABRy + BTLy – BBRy; 

      if(rabx <= raxPrbx && raby <= rayPrby) 
      { 
          return true; 
      } 
      return false; 

}

我們能夠適應這樣的解決方案:

  • 步驟1:檢查是否經度2 boundingBox的重疊

    • 一個bondingbox1的左側經度之間boundingbox2的longMin和longMax或者bondingbox1的正確經度在boundingbox2的longMin和longMax之間
  • 步驟2:檢查是否緯度2 boundingBox的重疊

    • 一個bondingbox1的頂部緯度是latMin和boundingbox2的latMax或bondingbox1的底部經度之間是的latMin和latMax之間boundingbox2
  • 如果步驟1和步驟2是正確的,則該2 boundingBox的重疊

你可以在這裏看到相應的草圖:

+1

您能否從您提到的網站添加一些內容(將鏈接保留爲參考)?這篇文章仍然沒有提供明確的答案。所以你很有可能會再次被刪除。 – benka

+1

您以前的評論已被刪除,因爲它僅提供了鏈接回覆。鏈接可能會更改,並且與您的答案無關。我會幫助你在答案上得到圖像,但請添加解釋,而不僅僅是「我也是」的答案。 –

+0

請引用您提供的鏈接中的文字,以避免您的答案關閉。不,這不是侵犯版權。像這樣做:'「xxxxxx」 - 正如本網站所說http:// example.com' –