Vị trí dự án trên một đường dẫn (vòng tròn lớn)


9

Tôi đã tìm kiếm trang SE này trong một vài giờ và tôi vẫn đang cố gắng tìm giải pháp cho câu hỏi của mình. Mục tiêu của tôi là đưa ra một cách trong OSM và vị trí của tôi (tọa độ lat / lon), tôi muốn tìm vị trí gần nhất (tọa độ lat / lon) trên đường đó. Điểm có thể ở bất cứ đâu trên đường, không giới hạn ở các điểm được sử dụng để xác định đường.

Vì vậy, tôi đang nghĩ về thuật toán sau:

  1. Đường dẫn riêng biệt thành các cạnh riêng biệt, mỗi cạnh chỉ kết nối hai điểm.
  2. Chọn cạnh gần nhất.
  3. Chiếu vị trí của tôi lên cạnh đó.

Bây giờ có nhiều câu hỏi về cách tính khoảng cách giữa vị trí và đường dẫn:

Ngoài ra một câu hỏi tương tự mà tôi không thể xác định đúng hoặc xác minh:

Ngoài ra còn có một số thông tin từ Tiến sĩ Toán về chủ đề đó. Tuy nhiên, tôi dường như không thể tìm thấy một thuật toán để tính toán vị trí trong bước 3. Vì tôi đã không chạm vào đại số (vectơ) trong một thời gian dài, tôi không hiểu lắm logic trong các câu trả lời đó.

Ai đó có thể hiển thị một thuật toán để làm điều này? Một giải pháp trong bất kỳ ngôn ngữ lập trình hợp lý là tốt với tôi.


1
Vì nó có vẻ quan trọng đối với việc "từ chối" các câu hỏi khác của bạn, vui lòng giải thích chi tiết về "chiếu vị trí của tôi lên cạnh đó". Hình chiếu có thể không nằm trên cạnh. Tôi tin rằng vấn đề được giải quyết trong các câu hỏi khác. (Làm tốt lắm, cho nghiên cứu, BTW.)
Martin F


@MartinF câu hỏi đó tính toán khoảng cách từ một điểm đến một dòng, nhưng không phải là điểm gần nhất trên chính dòng đó.
bouke

một giải pháp tại gis.stackexchange.com/a/23500/3195 mặc dù nó có lẽ khó có thể hiểu được.
Martin F

À vâng cảm ơn, tôi đã cập nhật ref không. 3. "Giải pháp" trong câu hỏi cụ thể đó liên kết đến một lời giải thích chung về lĩnh vực vấn đề. Trong khi điều này có thể là đủ cho các nhà toán học có căn cứ, tôi không hoàn toàn hiểu toán học trong bài báo đó.
bouke

Câu trả lời:


7

Sử dụng mô hình hình cầu của trái đất có thể cho độ chính xác đầy đủ và dẫn đến các phép tính nhanh đơn giản.

Chuyển đổi tất cả các tọa độ thành tọa độ cartesian tập trung vào trái đất (3D). Ví dụ: công thức

(cos(lon)*cos(lat), sin(lon)*cos(lat), sin(lat))

sẽ làm. (Nó sử dụng thước đo khoảng cách trong đó bán kính trái đất là một đơn vị, thuận tiện.)

Viết X0 = (x0, y0, z0) cho điểm bắt đầu và X1 = (x1, y1, z1) cho điểm đích, xác định vòng tròn lớn (với điều kiện X0 khác với X1 và hai điểm này không đối nghịch nhau), Đặt U là sản phẩm chéo chuẩn hóa của X0 và ​​X1. Điều này được tính theo hai bước:

V = (xv, yv, zv) = (y0*z1 - z0*y1, z0*x1 - x0*z1, x0*y1 - y0*x1)

Độ dài của V là

|V| = sqrt(xv^2 + yv^2 + zv^2)

Chuẩn hóa kéo dài V đến đơn vị chiều dài:

U = (xu, yu, zu) = V / |V| = (xv/|V|, yv/|V|, zv/|V|).

Khoảng cách 3D được định hướng giữa bất kỳ điểm X = (x, y, z) và mặt phẳng của vòng tròn lớn này chỉ là sản phẩm chấm của X với Z, được cho bởi

d = X * U = x*xu + y*yu + z*zu

Điểm gần nhất về khoảng cách trên bề mặt trái đất là điểm gần mặt phẳng nhất: do đó, nó có giá trị tuyệt đối nhỏ nhất là d .

Nhân vật

Hình này cho thấy một vòng tròn lớn (màu đen) được xác định bởi hai điểm trắng và 2000 điểm ngẫu nhiên trên quả cầu được tô màu và tô bóng theo khoảng cách 3D tuyệt đối của chúng với mặt phẳng của vòng tròn lớn đó; đó là, | d |.

Khi đã tìm thấy một điểm gần nhất, chiếu nó vào vòng tròn lớn bằng cách đầu tiên chiếu nó lên mặt phẳng của vòng tròn lớn (dưới dạng 3D) và sau đó kéo dài nó ra bên ngoài bề mặt trái đất. Phép chiếu chỉ trừ d * U:

X' = (x', y', z') = X - d*U = (x - d*xu, y - d*yu, z - d*zu).

Phép chiếu xuyên tâm chỉ đơn giản là tái chuẩn hóa X 'theo cùng cách V được tái chuẩn hóa thành U:

X'' = X' / |X'|.

(Điều này sẽ có vấn đề nếu | X '| = 0, xảy ra khi điểm gần nhất là một trong các cực của vòng tròn lớn. Bao gồm một thử nghiệm trong mã cho điều kiện này, nếu có thể xảy ra và xử lý riêng nó, sử dụng dấu của d để xác định cực nào.)

Nếu muốn, chuyển đổi tọa độ của X 'trở lại (lat, lon) bằng các công thức thông thường .


Một câu hỏi. Hãy xem xét trường hợp không quá bất thường khi chúng ta có thể chọn bất kỳ X1 và X0 nào (trên vòng tròn lớn), từ quan điểm chính xác, tốt hơn là chọn X1 và X0 cách xa hoặc xa (một lần nữa với điều kiện X0 khác với X1 và hai cái này không đối nghịch nhau)?
dùng189035

1
@ user189035 Chọn chúng cách nhau 90 độ. Khi chúng ở rất gần, sản phẩm chéo của chúng không chắc chắn về mặt số lượng: có rất nhiều sự hủy bỏ trong các phép trừ, dẫn đến mất các số liệu quan trọng.
whuber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.