2013-07-27 86 views
2

我需要驗證座標LAT/LNG點是否在其他兩點之間(像道路這樣的線段)。 我跟着THIS topic沒有成功。檢查兩點之間的座標點

function inRange(start, point, end) { 
    start_x = start.lat(); 
    start_y = start.lng(); 
    end_x = end.lat(); 
    end_y = end.lng(); 
    point_x = point.lat(); 
    point_y = point.lng(); 

    var dx = end_x - start_x; 
    var dy = end_y - start_y; 
    var innerProduct = (point_x - start_x)*dx + (point_y - start_y)*dy; 
    return 0 <= innerProduct && innerProduct <= dx*dx + dy*dy; 
} 


function checkRange(start, point, end){ 
    var x1 = start.lat(); 
    var y1 = start.lng(); 
    var x2 = end.lat(); 
    var y2 = end.lng(); 
    var x = point.lat(); 
    var y = point.lng(); 

    if (x1 == x2) { // special case 
     return y1 < y2 ? (y1 <= y && y <= y2) : (y2 <= y && y <= y1); 
    } 

    var m = (y2 - y1)/(x2 - x1); 
    var r1 = x1 + m * y1; 
    var r2 = x2 + m * y2; 
    var r = x + m * y; 
    return r1 < r2 ? (r1 <= r && r <= r2) : (r2 <= r && r <= r1); 
} 
  • 首先測試

開始:(44.4963217,11.327993300000003)

結束:(44.4973624,11.32760170000006)

點(44.4958434,11.328122000000008)

INRANGE ==假(OK) S Ø點成爲新的起點

  • 二測

開始:(44.4958434,11.328122000000008)

結束:(44.4973624,11.32760170000006)

點:(44.4966928,11.32781620000003)

InRange == false(ERROR) Point2在start/end之間,但函數返回fal SE :(

+0

。現在忘記'特例':什麼是'return(point.lat() start.lat()&& point.lng() start.lng());'return? – shennan

+0

False both tests :( – Davide

+0

)您的第二次測試的縱向點不在開始和結束的經度之間''(11.32781620000003 <11.32712170000006 && 11.32781620000003> 11.328122000000008)'returns false。 – shennan

回答

1

你的方法響應,因爲它應該給你已經通過它的數據:我覺得你在這個複雜

var start_lng = 11.328122000000008; 

var end_lng = 11.32760170000006; // This longitude is less than the point longitude. 

var point_lng = 11.32781620000003; // This longitude more than the end longitude. 
+0

同意這一點,對於這個問題的工作算法的任何想法? – Davide

+0

你必須詳細瞭解你如何獲得數據,以及你爲什麼期望它有所不同。你在哪裏繪製這些座標?有沒有工具可以在任何地方看到在GMaps上渲染的所有三個座標 一次? – shennan

+0

我們正在使用GoogleMaps開發CityNotifier。用戶可以通知地圖上的事件,並使用流量通知來繪製熱量覆蓋圖。 [Here](http://ltw1306.web.cs.unibo.it)的項目網站。 我使用[THIS](http://itouchmap.com/latlong.html)網站檢查座標點。我是否回答你的問題? :) – Davide