我需要驗證座標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 :(
。現在忘記'特例':什麼是'return(point.lat() start.lat()&& point.lng() start.lng());'return? –
shennan
False both tests :( – Davide
)您的第二次測試的縱向點不在開始和結束的經度之間''(11.32781620000003 <11.32712170000006 && 11.32781620000003> 11.328122000000008)'returns false。 – shennan