2015-11-25 44 views
5

Tôi đang tìm hàm trả về một điểm (lat, long) giữa hai điểm (nơi tôi cũng chỉ định vĩ độ, dài) và điểm đó dựa trên phần trăm khoảng cách.Tính điểm giữa hai tọa độ dựa trên tỷ lệ phần trăm

Vì vậy, tôi chỉ định Lat1, Lon1, Lat2, Lon2 và% trên hàm và nó trả về một điểm, ví dụ, 20% xa từ điểm đầu tiên đến điểm thứ hai.

+1

Nếu bạn đang làm việc với api của Google Maps, hãy xem [nội suy] (https://developers.google.com/maps/documentation/javascript/reference#spherical) để tính điểm giữa hai điểm khác tại một số phân đoạn (0-1) giữa chúng. –

Trả lời

10

Giả sử tọa độ là số thập phân. Bạn có thể sử dụng phương trình này.

function midpoint(lat1, long1, lat2, long2, per) { 
    return [lat1 + (lat2 - lat1) * per, long1 + (long2 - long1) * per]; 
} 

Trả lại tọa độ mong muốn mới [lat, long], dựa trên tỷ lệ phần trăm (chẳng hạn như per = 0,2 cho 20%).

+2

Điểm giữa của lat dài nói chung không phải là điểm giữa tính theo công thức này, bởi vì chúng là tọa độ trên một hình cầu, không phải là mặt phẳng. – spirographer

+2

Iguiel Tôi cũng nghĩ thế nhưng nó không hoạt động như thế. Đối với P1 (37.740675, -25.661043) và P2 (37.738096, -25.669267), ví dụ, 20% trả về P3 (7.5478771, -5,133031). Điều đó đặt tôi ở châu Phi thay vì quần đảo Azores giữa P1 và P2. –

+1

Hi Swift-R, tôi thấy, tôi nghĩ rằng có một sai lầm trong phương trình của tôi, nó phải là: [lat1 + (lat2-lat1) * per, long1 + (long2-long1) * per] Tôi sẽ sửa câu trả lời của mình. Tôi hy vọng nó làm việc cho bạn. – lguiel

1

Đây là một tài liệu tham khảo mà sẽ giúp rất nhiều (đánh dấu phía dưới)

http://www.movable-type.co.uk/scripts/latlong.html

điểm Intermediate

Một điểm trung gian tại bất kỳ phần dọc theo con đường vòng tròn lớn giữa hai điểm có thể cũng được tính toán.

Formula:

a = sin((1−f)⋅δ)/sin δ 
b = sin(f⋅δ)/sin δ 
x = a ⋅ cos φ1 ⋅ cos λ1 + b ⋅ cos φ2 ⋅ cos λ2 
y = a ⋅ cos φ1 ⋅ sin λ1 + b ⋅ cos φ2 ⋅ sin λ2 
z = a ⋅ sin φ1 + b ⋅ sin φ2 
φi = atan2(z, √x² + y²) 
λi = atan2(y, x) 

nơi f là phần dọc theo tuyến đường vòng tròn lớn (f = 0 là điểm 1, f = 1 là điểm 2), δ là khoảng cách góc d/R giữa hai điểm.

+0

Tôi không hiểu trong đó phần trăm đến. –

+0

* f * là phần từ điểm 1 đến điểm 2. Phần trăm là một phần trong đó mẫu số là 100. Ví dụ, nếu tỷ lệ phần trăm của bạn là 39%, thì phần * f = 39/100 *. – spirographer

Các vấn đề liên quan