Trang này trình bày nhiều phép tính cho các điểm kinh độ/vĩ độ, với các công thức và đoạn mã để triển khai chúng Show Tất cả các công thức này là để tính toán trên cơ sở trái đất hình cầu (bỏ qua các hiệu ứng hình elip) – đủ chính xác cho hầu hết các mục đích… [Thực tế, trái đất hơi hình elip; . 3% – xem ghi chú để biết thêm chi tiết] Khoảng cách đường tròn lớn giữa hai điểmNhập tọa độ vào hộp văn bản để thử tính toán. Một loạt các định dạng được chấp nhận, chủ yếu là
Và bạn có thể nhìn thấy nó trên bản đồ ẩn bản đồ Khoảng cáchĐiều này sử dụng công thức 'haversine' để tính khoảng cách vòng tròn lớn giữa hai điểm - tức là khoảng cách ngắn nhất trên bề mặt trái đất - đưa ra khoảng cách 'như ruồi bay' giữa các điểm (bỏ qua mọi ngọn đồi mà chúng bay . ) Haversinecông thức. a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)c = 2 ⋅ atan2( √a, √(1−a) )d = R ⋅ ctrong đóφ là vĩ độ, λ là kinh độ, R lưu ý rằng các góc cần phải tính bằng radian để chuyển sang các hàm lượng giác. JavaScript. const R = 6371e3; // metres const φ1 = lat1 * Math.PI/180; // φ, λ in radians const φ2 = lat2 * Math.PI/180; const Δφ = (lat2-lat1) * Math.PI/180; const Δλ = (lon2-lon1) * Math.PI/180; const a = Math.sin(Δφ/2) * Math.sin(Δφ/2) + Math.cos(φ1) * Math.cos(φ2) * Math.sin(Δλ/2) * Math.sin(Δλ/2); const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a)); const d = R * c; // in metres Lưu ý trong các tập lệnh này, tôi thường sử dụng lat/lon cho vĩ độ/kinh độ tính theo độ và φ/λ cho vĩ độ/kinh độ tính bằng radian – nhận thấy rằng việc trộn lẫn độ và radian thường là con đường dễ dàng nhất dẫn đến những lỗi khó hiểu Công thức haversine1 'vẫn đặc biệt phù hợp với tính toán số ngay cả ở những khoảng cách nhỏ' – không giống như các phép tính dựa trên định luật hình cầu của cosin. '(tái)sin' là 1−cosθ và 'nửa sin' là (1−cosθ)/2 hoặc sin²(θ/2) như được sử dụng ở trên. Từng được các nhà hàng hải sử dụng rộng rãi, nó được Roger Sinnott mô tả trên tạp chí Sky & Telescope năm 1984 (“Những đức tính của Haversine”). Sinnott giải thích rằng sự phân chia góc giữa Mizar và Alcor ở chòm sao Đại Hùng – 0°11′49. 69″ – có thể được tính toán chính xác trong Cơ bản trên a sử dụng haversine Đối với những người tò mò, c là khoảng cách góc tính bằng radian và a là bình phương của một nửa độ dài dây cung giữa các điểm Nếu không có sẵn const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;4, c có thể được tính từ 2 ⋅ asin( min(1, √a) ) (bao gồm bảo vệ khỏi lỗi làm tròn) Sử dụng Chrome trên PC Core i5 cũ, phép tính khoảng cách mất khoảng 2 – 5 micro giây (do đó khoảng 200.000 – 500.000 mỗi giây). Ít hoặc không có lợi ích thu được bằng cách bao thanh toán các điều khoản phổ biến; Luật hình cầu của CosinTrên thực tế, JavaScript (và hầu hết các máy tính & ngôn ngữ hiện đại) sử dụng các số dấu phẩy động 64 bit 'IEEE 754', cung cấp 15 con số chính xác đáng kể. Theo ước tính của tôi, với độ chính xác này, định luật hình cầu đơn giản của công thức cosin (cos c = cos a cos b + sin a sin b cos C) cho kết quả được điều chỉnh tốt ở khoảng cách nhỏ cỡ vài mét trên bề mặt trái đất. (Lưu ý rằng dạng trắc địa của định luật cosin được sắp xếp lại từ dạng chính tắc để có thể sử dụng trực tiếp vĩ độ, thay vì vĩ độ) Điều này làm cho định luật cosin đơn giản hơn trở thành một sự thay thế 1 dòng hợp lý cho công thức haversine cho nhiều mục đích trắc địa (nếu không phải cho thiên văn học). Sự lựa chọn có thể được điều khiển bởi ngôn ngữ lập trình, bộ xử lý, ngữ cảnh mã hóa, các chức năng kích hoạt có sẵn (bằng các ngôn ngữ khác nhau), v.v. - và, đối với khoảng cách rất nhỏ, phép tính gần đúng hình chữ nhật có thể phù hợp hơn định luật côsin. d = acos( sin φ1 ⋅ sin φ2 + cos φ1 ⋅ cos φ2 ⋅ cos Δλ ) ⋅ RJavaScript.const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;Excel. =ACOS( SIN(lat1)*SIN(lat2) + COS(lat1)*COS(lat2)*COS(lon2-lon1) ) * 6371000(hoặc với lat/lon theo độ). =ACOS( SIN(lat1*PI()/180)*SIN(lat2*PI()/180) + COS(lat1*PI()/180)*COS(lat2*PI()/180)*COS(lon2 Trong khi đơn giản hơn, định luật cosin chậm hơn một chút so với haversine, trong các thử nghiệm của tôi xấp xỉ hình chữ nhậtNếu hiệu suất là một vấn đề và độ chính xác ít quan trọng hơn, đối với những khoảng cách nhỏ, định lý Pythagoras có thể được sử dụng trên phép chiếu tam giác đều. * Công thứcx = Δλ ⋅ cos φmy = Δφd = R ⋅ √x² + y²JavaScript.const x = (λ2-λ1) * Math.cos((φ1+φ2)/2); const y = (φ2-φ1); const d = Math.sqrt(x*x + y*y) * R; Điều này chỉ sử dụng một hàm trig và một hàm sqrt – so với nửa tá hàm trig cho luật cos và 7 hàm trig + 2 sqrt cho haversine. Độ chính xác hơi phức tạp. dọc theo kinh tuyến không có sai số, mặt khác chúng phụ thuộc vào khoảng cách, phương hướng và vĩ độ, nhưng đủ nhỏ cho nhiều mục đích* (và thường không đáng kể so với chính phép tính gần đúng hình cầu) Ngoài ra, công thức trái đất phẳng tọa độ cực có thể được sử dụng. sử dụng các đồng vĩ độ θ1 = π/2−φ1 và θ2 = π/2−φ2, khi đó d = R ⋅ √θ1² + θ2² − 2 ⋅ θ1 ⋅ θ2 ⋅ cos Δλ. Tôi chưa so sánh độ chính xác Baghdad đến Osaka –không phải là một mang liên tục Ổ đỡ trụcNói chung, tiêu đề hiện tại của bạn sẽ thay đổi khi bạn đi theo một đường tròn lớn (chính thống); . ) Công thức này dành cho phương vị ban đầu (đôi khi được gọi là phương vị chuyển tiếp) mà nếu theo một đường thẳng dọc theo một cung tròn lớn sẽ đưa bạn từ điểm bắt đầu đến điểm kết thúc. 1 Công thức. θ = atan2( sin Δλ ⋅ cos φ2 , cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ ) trong đóφ1,λ1 là điểm đầu, φ2,λ2 là điểm cuối (Δλ là chênh lệch kinh độ)JavaScript.const y = Math.sin(λ2-λ1) * Math.cos(φ2); const x = Math.cos(φ1)*Math.sin(φ2) - Math.sin(φ1)*Math.cos(φ2)*Math.cos(λ2-λ1); const θ = Math.atan2(y, x); const brng = (θ*180/Math.PI + 360) % 360; // in degreesExcel. =ATAN2(COS(lat1)*SIN(lat2)-SIN(lat1)*COS(lat2)*COS(lon2-lon1), SIN(lon2-lon1)*COS(lat2)) * lưu ý rằng Excel đảo ngược các đối số thành ATAN2 – xem ghi chú bên dưới Vì atan2 trả về các giá trị trong phạm vi -π. +π (nghĩa là -180°. +180°), để chuẩn hóa kết quả thành phương vị la bàn (trong phạm vi 0°. 360°, với các giá trị −ve được chuyển thành phạm vi 180°. 360°), chuyển đổi thành độ rồi sử dụng (θ+360) % 360, trong đó % là (dấu phẩy động) modulo Đối với phương vị cuối cùng, chỉ cần lấy phương vị ban đầu từ điểm cuối đến điểm đầu và đảo ngược nó (sử dụng θ = (θ+180) % 360) trung điểmĐây là điểm nửa đường dọc theo đường tròn lớn giữa hai điểm. 1 Công thức. Bx = cos φ2 ⋅ cos ΔλBy = cos φ2 ⋅ sin Δλφm = atan2( sin φ1 + sin φ2, √(cos φ1 + Bx)² + By² )λm = λ1 + atan2(By, cos(φ1)+Bx)JavaScript.const Bx = Math.cos(φ2) * Math.cos(λ2-λ1); const By = Math.cos(φ2) * Math.sin(λ2-λ1); const φ3 = Math.atan2(Math.sin(φ1) + Math.sin(φ2), Math.sqrt( (Math.cos(φ1)+Bx)*(Math.cos(φ1)+Bx) + By*By ) ); const λ3 = λ1 + Math.atan2(By, Math.cos(φ1) + Bx);Kinh độ có thể được chuẩn hóa thành −180…+180 bằng cách sử dụng const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;5 Giống như phương vị ban đầu có thể khác với phương vị cuối cùng, điểm giữa có thể không nằm ở giữa các vĩ độ/kinh độ; điểm trung gianMột điểm trung gian tại bất kỳ phần nào dọc theo đường tròn lớn giữa hai điểm cũng có thể được tính Công thức. a = sin((1−f)⋅δ) / sin δb = sin(f⋅δ) / sin δx = a ⋅ cos φ1 ⋅ cos λ1 + b ⋅ cos φ2 ⋅ cos λ2y = a ⋅ cos φ1 ⋅ sin λ1 +Điểm đến cho trước khoảng cách và hướng từ điểm bắt đầuĐưa ra một điểm bắt đầu, phương hướng ban đầu và khoảng cách, điều này sẽ tính toán điểm đích và phương hướng cuối cùng di chuyển dọc theo một cung tròn lớn (khoảng cách ngắn nhất) Điểm đến dọc theo đường tròn lớn cho trước khoảng cách và phương hướng từ điểm bắt đầu Điểm bắt đầu. ,Ổ đỡ trục. Khoảng cách. kmCông thức. φ2 = asin( sin φ1 ⋅ cos δ + cos φ1 ⋅ sin δ ⋅ cos θ )λ2 = λ1 + atan2( sin θ ⋅ sin δ ⋅ cos φ1, cos δ − sin φ1 ⋅ sin φ2 ) trong đó φ là vĩ độ, λ là kinh độ .const φ2 = Math.asin( Math.sin(φ1)*Math.cos(d/R) + Math.cos(φ1)*Math.sin(d/R)*Math.cos(brng) ); const λ2 = λ1 + Math.atan2(Math.sin(brng)*Math.sin(d/R)*Math.cos(φ1), Math.cos(d/R)-Math.sin(φ1)*Math.sin(φ2));Kinh độ có thể được chuẩn hóa thành −180…+180 bằng cách sử dụng const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;5Excel. lat2. =ASIN(SIN(lat1)*COS(d/R) + COS(lat1)*SIN(d/R)*COS(brng)) lon2. =lon1 + ATAN2(COS(d/R)-SIN(lat1)*SIN(lat2), SIN(brng)*SIN(d/R)*COS(lat1)) * Hãy nhớ rằng Excel đảo ngược các đối số thành ATAN2 – xem ghi chú bên dưới Đối với vòng bi cuối cùng, chỉ cần di chuyển vòng bi ban đầu từ điểm cuối đến điểm bắt đầu và đảo ngược nó bằng const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;7 Giao điểm của hai đường dẫn đã cho điểm bắt đầu và vòng biĐây là phép tính khá phức tạp hơn hầu hết các phép tính khác trên trang này, nhưng tôi đã được yêu cầu tính toán nhiều lần. Điều này đến từ Ed William. Xem bên dưới để biết JavaScript Giao điểm của hai đường tròn lớnĐiểm 1. , Brng 1. điểm 2. , Brng 2. Công thức. δ12 = 2⋅asin( √(sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)) )góc. p1–p2θa = acos( ( sin φ2 − sin φ1 ⋅ cos δ12 ) / ( sin δ12 ⋅ cos φ1 ) )θb = acos( ( sin φ1 − sin φ2 ⋅ cos δ12 ) / ( sin δ12 ⋅ cos φ2 ) )vòng bi đầu/cuối giữa các điểm 1 & 2nếu sin(λ2−λ1) > 0 θ12 = θa θ21 = 2π − θb khác θ12 = 2π − θa θ21 = θbα1 = θ13 − θ12 α2 = θ21 − θ23góc p2–p1–p3 góc p1–p2–p3α3 = acos( −cos α1 ⋅ cos α2 + sin α1 ⋅ sin α2 ⋅ cos δ12 )góc p1–p2–p3δ13 = atan2( sin δ12 ⋅ sin α1 ⋅ sin α2 , cos α2 + cos α1 ⋅ cos . p1–p3φ3 = asin( sin φ1 ⋅ cos δ13 + cos φ1 ⋅ sin δ13 ⋅ cos θ13 )p3 latΔλ13 = atan2( sin θ13 ⋅ sin δ13 ⋅ cos φ1 , cos δ13 − sin φ1 ⋅ p3 = φ3 1long) φ1, λ1, θ13. Điểm bắt đầu thứ nhất & (ban đầu) hướng từ điểm thứ nhất về phía giao điểm % = (dấu phẩy động) modulo lưu ý –nếu sin α1 = 0 và sin α2 = 0. giải pháp vô hạnnếu sin α1 ⋅ sin α2 < 0. giải pháp mơ hồ công thức này không phải lúc nào cũng được điều chỉnh tốt cho các đường kinh tuyến hoặc xích đạo Điều này đơn giản hơn rất nhiều khi sử dụng vectơ thay vì lượng giác cầu. thấy Khoảng cách đường chéoĐây là một cái mới. Đôi khi tôi được hỏi về khoảng cách của một điểm từ một đường tròn lớn (đôi khi được gọi là lỗi đường chéo) Công thức. dxt = asin( sin(δ13) ⋅ sin(θ13−θ12) ) ⋅ R trong đóδ13 là khoảng cách (góc) từ điểm bắt đầu đến điểm thứ baθ13 là (ban đầu) hướng từ điểm đầu đến điểm thứ ba θ12 là (ban đầu) hướng từ điểm đầu đến điểm cuối R là bán kính trái đất JavaScript. const δ13 = d13 / R; const dXt = Math.asin(Math.sin(δ13)*Math.sin(θ13-θ12)) * R; Ở đây, đường đi của vòng tròn lớn được xác định bởi điểm bắt đầu và điểm kết thúc – tùy thuộc vào dữ liệu ban đầu mà bạn đang làm việc, bạn có thể sử dụng các công thức ở trên để có được khoảng cách và phương hướng liên quan. Dấu hiệu của dxt cho bạn biết điểm thứ ba nằm ở phía nào của con đường Khoảng cách dọc theo đường đi, từ điểm bắt đầu đến điểm gần nhất trên đường dẫn đến điểm thứ ba, là Công thức. dat = acos( cos(δ13) / cos(δxt) ) ⋅ Rwhereδ13 là khoảng cách (góc) từ điểm bắt đầu đến điểm thứ baδxt là khoảng cách đường chéo (góc) R là bán kính trái đất JavaScript. const δ13 = d13 / R; const dAt = Math.acos(Math.cos(δ13)/Math.cos(dXt/R)) * R; Điểm gần nhất với các cựcVà. 'Công thức của Claireaut' sẽ cung cấp cho bạn vĩ độ tối đa của đường tròn lớn, với phương vị θ và vĩ độ φ trên đường tròn lớn Công thức. φmax = acos(. tội lỗi θ ⋅ cos φ. ) JavaScript.const φMax = Math.acos(Math.abs(Math.sin(θ)*Math.cos(φ))); dòng rhumb'Đường hình thoi' (hoặc loxodrome) là một đường có phương chịu lực không đổi, cắt tất cả các kinh tuyến theo cùng một góc Các thủy thủ đã từng (và đôi khi vẫn) điều hướng dọc theo các đường hình thoi vì việc đi theo một hướng la bàn không đổi sẽ dễ dàng hơn là liên tục điều chỉnh phương hướng, như cần thiết để đi theo một vòng tròn lớn. Các đường thẳng là các đường thẳng trên bản đồ Phép chiếu Mercator (cũng hữu ích cho việc điều hướng) Các đường thẳng thường dài hơn các đường tròn lớn (chính thống). Chẳng hạn, từ London đến New York dọc theo một đường hình thoi dài hơn 4% so với dọc theo một vòng tròn lớn – quan trọng đối với nhiên liệu hàng không, nhưng không đặc biệt đối với tàu thuyền. New York đến Bắc Kinh – gần với ví dụ cực đoan nhất có thể (mặc dù không thể đi thuyền. ) – dài hơn 30% dọc theo đường hình thoi Khoảng cách đường trục giữa hai điểm Điểm đích dọc theo đường trục cho trước khoảng cách và hướng từ điểm bắt đầu Điểm bắt đầu. ,Ổ đỡ trục. Khoảng cách. kmChìa khóa để tính toán các đường hình thoi là hàm Gudermannian nghịch đảo¹, cho biết chiều cao trên bản đồ chiếu Mercator của một vĩ độ nhất định. ln(tanφ + secφ) hoặc ln( tan(π/4+φ/2) ). Tất nhiên, điều này có xu hướng vô cực ở các cực (phù hợp với phép chiếu Mercator). Đối với những người bị ám ảnh, thậm chí còn có một phiên bản hình elip, 'vĩ độ đẳng cự'. ψ = ln( tan(π/4+φ/2) / [ (1−e⋅sinφ) / (1+e⋅sinφ) ]e/2), hoặc giá trị tương đương có điều kiện tốt hơn của nó ψ = atanh(sinφ) − Sau đó, các công thức để lấy tọa độ hướng đông và hướng bắc của phép chiếu Mercator từ kinh độ và vĩ độ hình cầu l๠E = R ⋅ λN = R ⋅ ln( tan(π/4 + φ/2) )Các công thức sau đây là từ công thức hàng không của Ed Williams Khoảng cáchVì đường hình thoi là một đường thẳng trên phép chiếu Mercator, nên khoảng cách giữa hai điểm dọc theo đường hình thoi là độ dài của đường thẳng đó (theo Pythagoras); Trên một vĩ độ không đổi (đi theo hướng đông-tây), phần bù này đơn giản là cosφ; Công thức. Δψ = ln( tan(π/4 + φ2/2) / tan(π/4 + φ1/2) )(chênh lệch vĩ độ 'dự kiến')q = Δφ/Δψ (hoặc cosφ cho đường E-W)d = √(Δφ² .const Δψ = Math.log(Math.tan(Math.PI/4+φ2/2)/Math.tan(Math.PI/4+φ1/2)); const q = Math.abs(Δψ) > 10e-12 ? Δφ/Δψ : Math.cos(φ1); // E-W course becomes ill-conditioned with 0/0 // if dLon over 180° take shorter rhumb line across the anti-meridian: if (Math.abs(Δλ) > Math.PI) Δλ = Δλ>0 ? -(2*Math.PI-Δλ) : (2*Math.PI+Δλ); const dist = Math.sqrt(Δφ*Δφ + q*q*Δλ*Δλ) * R; Ổ đỡ trụcMột đường thẳng là một đường thẳng trên phép chiếu Mercator, với một góc trên phép chiếu bằng phương vị la bàn Công thức. Δψ = ln( tan(π/4 + φ2/2) / tan(π/4 + φ1/2) )(chênh lệch vĩ độ 'dự kiến')θ = atan2(Δλ, Δψ)trong đóφ là vĩ độ, λ là kinh độ, Δλ .const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;0 Dự địnhCho trước một điểm bắt đầu và khoảng cách d dọc theo phương vị không đổi θ, điều này sẽ tính điểm đích. Nếu bạn duy trì một phương vị không đổi dọc theo đường hình thoi, bạn sẽ dần dần xoắn ốc về phía một trong các cực Công thức. δ = d/R(khoảng cách góc)φ2 = φ1 + δ ⋅ cos θΔψ = ln( tan(π/4 + φ2/2) / tan(π/4 + φ1/2) )(chênh lệch vĩ độ 'dự kiến')q .const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;1Kinh độ có thể được chuẩn hóa thành −180…+180 bằng cách sử dụng const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;5 trung điểmCông thức tính toán 'điểm giữa loxodromic', điểm nằm ở nửa đường dọc theo đường hình thoi giữa hai điểm, là của Robert Hill và Clive Tooth1 (thx Axel. ) Công thức. φm = (φ1+φ2) / 2f1 = tan(π/4 + φ1/2)f2 = tan(π/4 + φ2/2)fm = tan(π/4+φm/2)λm = [ (λ2− .const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;2Kinh độ có thể được chuẩn hóa thành −180…+180 bằng cách sử dụng const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;5 Sử dụng các tập lệnh trong các trang webSử dụng các tập lệnh này trong các trang web sẽ giống như sau const φ1 = lat1 * Math.PI/180, φ2 = lat2 * Math.PI/180, Δλ = (lon2-lon1) * Math.PI/180, R = 6371e3; const d = Math.acos( Math.sin(φ1)*Math.sin(φ2) + Math.cos(φ1)*Math.cos(φ2) * Math.cos(Δλ) ) * R;3 Chuyển đổi giữa độ-phút-giây sang độ thập phânVĩ độKinh độ1° ≈ 111 km (110. 57 đương lượng — 111. 70 cực)dm1′ ≈ 1. 85 km (= 1nm)0. 01° ≈ 1. 11 kmdms1″ ≈ 30. 9 m0. 0001° ≈ 11. 1 mHiển thị kết quả tính toán dưới dạng. độ deg/min deg/min/secghi chú
Xem bên dưới để biết mã nguồn JavaScript, cũng có sẵn trên GitHub. Tài liệu đầy đủ có sẵn, cũng như một bộ thử nghiệm Lưu ý tôi sử dụng các chữ cái Hy Lạp trong các biến đại diện cho các ký hiệu toán học được trình bày theo quy ước dưới dạng các chữ cái Hy Lạp. Tôi đánh giá cao lợi ích to lớn của tính dễ đọc so với sự bất tiện nhỏ khi nhập (nếu bạn gặp phải bất kỳ sự cố nào, hãy đảm bảo bạn bao gồm const x = (λ2-λ1) * Math.cos((φ1+φ2)/2); const y = (φ2-φ1); const d = Math.sqrt(x*x + y*y) * R;0) và sử dụng mã hóa UTF-8 khi lưu tệp) Với cú pháp kiểu C không được gõ, JavaScript đọc rất gần với mã giả. phơi bày các thuật toán với sự phân tâm cú pháp tối thiểu. Các chức năng này phải đơn giản để dịch sang các ngôn ngữ khác nếu được yêu cầu, mặc dù vậy cũng có thể được sử dụng nguyên trạng trong trình duyệt và Node. js Để thuận tiện và rõ ràng, tôi đã mở rộng đối tượng JavaScript cơ sở const x = (λ2-λ1) * Math.cos((φ1+φ2)/2); const y = (φ2-φ1); const d = Math.sqrt(x*x + y*y) * R;1 với các phương thức const x = (λ2-λ1) * Math.cos((φ1+φ2)/2); const y = (φ2-φ1); const d = Math.sqrt(x*x + y*y) * R;2 và const x = (λ2-λ1) * Math.cos((φ1+φ2)/2); const y = (φ2-φ1); const d = Math.sqrt(x*x + y*y) * R;3. Tôi không thấy khả năng xảy ra xung đột cao vì đây là những hoạt động phổ biến Tôi cũng có một trang minh họa việc sử dụng định luật hình cầu của cosin để chọn các điểm từ cơ sở dữ liệu trong một vòng tròn giới hạn được chỉ định – ví dụ này dựa trên MySQL+PDO, nhưng có thể mở rộng cho các nền tảng DBMS khác Một số người đã hỏi về các bảng tính Excel mẫu, vì vậy tôi đã triển khai các công thức khoảng cách & phương hướng và điểm đích dưới dạng bảng tính, ở dạng chia nhỏ tất cả các giai đoạn liên quan để minh họa hoạt động tháng 2 năm 2019. Tôi đã cấu trúc lại thư viện để sử dụng các mô-đun ES, cũng như mở rộng nó trong phạm vi; Hiệu suất. như đã lưu ý ở trên, phép tính khoảng cách haversine mất khoảng 2 – 5 micro giây (do đó khoảng 200.000 – 500.000 mỗi giây). Tôi vẫn chưa hoàn thành các bài kiểm tra thời gian trên các tính toán khác Những ngôn ngữ khác. Tôi không thể hỗ trợ bản dịch sang các ngôn ngữ khác, nhưng nếu bạn đã chuyển mã sang ngôn ngữ khác, tôi sẵn lòng cung cấp các liên kết tại đây
Nếu bạn muốn thể hiện sự đánh giá cao của mình và hỗ trợ tiếp tục phát triển các tập lệnh này, tôi rất biết ơn sẽ nhận đóng góp |