Tôi đang tìm kiếm một công cụ trực tuyến hoặc một công cụ mà tôi có thể tải xuống để chuyển đổi DD sang DMS.
Ví dụ: tôi muốn chuyển đổi từ:
41.590833, -93.620833 đến 41 ° 35 27 N, 93 ° 37 15 ″ W ... Đó là các tọa độ, theo Geohack , cho Des Moines.
Tôi đang tìm kiếm một công cụ trực tuyến hoặc một công cụ mà tôi có thể tải xuống để chuyển đổi DD sang DMS.
Ví dụ: tôi muốn chuyển đổi từ:
41.590833, -93.620833 đến 41 ° 35 27 N, 93 ° 37 15 ″ W ... Đó là các tọa độ, theo Geohack , cho Des Moines.
Câu trả lời:
Bởi vì ngay cả mã Microsoft là lỗi, có thể hữu ích để cung cấp mã giả chính xác cho chuyển đổi.
Để chuyển đổi độ thập phân x sang độ ( d ), phút ( m ) và (thập phân) giây ( s ), hãy làm như sau:
Declare d, m as integer, s as float
If x < 0, then sign = -1 else sign = +1
Let y = Abs(x) ' Work with positive values only.
Let d = Int(y) ' Whole degrees. Floor() is ok too.
Let z = 60*(y - d) ' The fractional degrees, converted to minutes.
Let m = Int(z) ' Whole minutes.
Let s = 60*(z - m) ' The fractional minutes, converted to seconds.
Assert sign*(((s/60) + m)/60 + d) == x ' This confirms a correct result.
Return (sign*d, m, s)
Thay vì trả lại một mức độ đã ký, bạn có thể chỉ ra N / S hoặc E / W ở cuối:
If x is a latitude, then
If sign == -1 then hemisphere = "S" else hemisphere = "N"
Else {x is a longitude}
If sign == -1 then hemisphere = "W" else hemisphere = "E"
End if
Return (d, m, s, hemisphere)
Nếu bạn thích, bạn có thể làm tròn s thành một số nguyên và định dạng kết quả để khớp với biểu mẫu được đưa ra trong câu hỏi.
Nó không quá phức tạp để làm, nhưng tôi có xu hướng chỉ sử dụng trang web này . Nhưng hãy làm việc thông qua vĩ độ trong ví dụ của bạn. Độ thập phân là như nhau, trong trường hợp này là 41. Bây giờ, lấy phần còn lại và nhân với 60. Điều này mang lại cho bạn 35,44998. Phần nguyên là giây (35 '). Bây giờ, lấy phần còn lại và nhân với 60 lần nữa. Bạn nhận được giây (26.9998), so sánh tích cực với những phát hiện của bạn ở trên.
Hãy xem thư viện python này https://github.com/ewheeler/PyDecimalDegrees
hoặc tập lệnh trực tuyến / ngoại tuyến này dựa trên Perl http://www.movable-type.co.uk/scripts/latlong.html
Nó có thể giúp bạn. Cứ thử đi. http://transition.fcc.gov/mb/audio/bickel/DDDMMSS-decimal.html
Có một lớp đơn giản tuyệt vời để thực hiện điều này tại StackOverflow trong C #: /programming/4504956/formatted-double-to-latitude-longitude-human-readable-format