Hướng dẫn calculate bearing between two coordinates python - tính toán phương vị giữa hai tọa độ python

Tôi đang cố gắng tính toán ổ trục giữa hai lat/dài.

Tôi không có câu hỏi liên quan đến chức năng/công thức mỗi se,

provided:

def get_bearing(lat1, long1, lat2, long2):
    dLon = (long2 - long1)

    y = math.sin(dLon) * math.cos(lat2)
    x = math.cos(lat1) * math.sin(lat2) - math.sin(lat1) * math.cos(lat2) * math.cos(dLon)

    brng = math.atan2(y, x)

    brng = np.rad2deg(brng)

    return brng

Vấn đề là kết quả không phải là những gì được mong đợi.

Việc sử dụng dự định của hàm trả về ổ trục giữa hai cặp LAT/dài trong danh sách (rất dài), tức là.

    lat1 = path[int(len(path) * location / 1000)][0]
    lat2 = path[int(len(path) * location / 1000) + 1][0]
    lng1 = path[int(len(path) * location / 1000)][1]
    lng2 = path[int(len(path) * location / 1000) + 1][1]

Kết quả ổ trục sau đó làm thay đổi hướng xem của âm mưu trong đó ổ trục có thể giả định giá trị trong phạm vi [-180, 180]. Lý tưởng nhất, kết quả sẽ xuất hiện sao cho dòng được hình thành giữa LAT1, LNG1 và LAT2, LNG2 là "thẳng đứng" hoàn toàn

Hướng dẫn calculate bearing between two coordinates python - tính toán phương vị giữa hai tọa độ python

Hướng dẫn calculate bearing between two coordinates python - tính toán phương vị giữa hai tọa độ python

Tôi hy vọng rằng ai đó có thể suy ra vấn đề từ ổ trục được trả lại từ chức năng và ổ trục dự kiến ​​sẽ là gì. Một vài trường hợp dưới đây:

Current Location: 30.07134 -97.23076
Next in path: 30.0709 -97.22907
Calculated Bearing: 88.39967863143139
Expected Bearing: ~-70.67

Current Location: 29.91581 -96.85068
Next in path: 29.91556 -96.85021
Calculated Bearing: 118.9170342272798
Expected Bearing: ~122.67

Current Location: 29.69419 -96.53487
Next in path: 29.69432 -96.53466
Calculated Bearing 141.0271357781952
Expected Bearing: ~56

Current Location: 29.77357 -96.07924
Next in path: 29.77349 -96.07876
Calculated Bearing 165.24612555483893
Expected Bearing: ~104

Rất vui khi cung cấp thêm thông tin, cảm ơn trước cho bất kỳ/tất cả sự giúp đỡ.

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

# Giấy phép: phạm vi công cộng
defcalculation_initial_compass_bearing (pointa, pointb): calculate_initial_compass_bearing(pointA, pointB):
"" "
Tính toán ổ trục giữa hai điểm.
Các công thức được sử dụng là như sau:
θ = atan2 (sin (Δ dài) .cos (lat2),
COS (LAT1) .SIN (LAT2) - SIN (LAT1) .COS (LAT2) .COS (Δ -dài)))
:Thông số:
- `Pointa: Tuple đại diện cho vĩ độ/kinh độ cho
điểm đầu tiên. Vĩ độ và kinh độ phải ở mức độ thập phân
- `Pointb: Tuple đại diện cho vĩ độ/kinh độ cho
điểm thứ hai. Vĩ độ và kinh độ phải ở mức độ thập phân
: Trả lại:
Vòng bi ở độ
: Loại trả về:
trôi nổi
"" "
if (type (pointa)! = tuple) hoặc (type (pointb)! = tuple): (type(pointA) != tuple) or (type(pointB) != tuple):
RaisetypeError ("Chỉ các bộ dữ liệu được hỗ trợ làm đối số") TypeError("Only tuples are supported as arguments")
lat1 = math.radians (pointa [0]) = math.radians(pointA[0])
lat2 = math.radians (pointb [0]) = math.radians(pointB[0])
Difflong = math.radians (pointb [1] -pointa [1]) = math.radians(pointB[1] - pointA[1])
x = math.sin (Difflong) *math.cos (lat2) = math.sin(diffLong) * math.cos(lat2)
y = math.cos (lat1) *math.sin (lat2) - (math.sin (lat1) = math.cos(lat1) * math.sin(lat2) - (math.sin(lat1)
*Math.cos (Lat2) *Math.cos (Difflong)) math.cos(lat2) * math.cos(diffLong))
ban đầu_bear = math.atan2 (x, y) = math.atan2(x, y)
# Bây giờ chúng ta có ổ trục ban đầu nhưng Math.atan2 trả về giá trị
# từ -180 ° đến + 180 °, đó không phải là thứ chúng tôi muốn cho một ổ đĩa la bàn
# Giải pháp là bình thường hóa ổ trục ban đầu như hình dưới đây
init_bearing = math.degrees (init_bear) = math.degrees(initial_bearing)
la bàn_bearing = (init_bearing+360) %360 = (initial_bearing + 360) % 360
returncompass_bearing compass_bearing