Tháng này, tôi đã lập trình khá nhiều về PHP và My
SQL liên quan đến GIS. Tìm kiếm xung quanh mạng, tôi thực sự đã gặp khó khăn khi tìm thấy một số Tính toán địa lý để tìm khoảng cách giữa hai vị trí, vì vậy tôi muốn chia sẻ chúng ở đây.

Bạn đang xem: Tính khoảng cách giữa 2 tọa độ gps


Cách đơn giản để tính khoảng cách giữa hai điểm là sử dụng công thức Pitago để tính cạnh huyền của một tam giác (A² + B² = C²). Điều này được gọi là Khoảng cách Euclide.

Đó là một khởi đầu thú vị nhưng nó không áp dụng với môn Địa lý vì khoảng cách giữa các đường vĩ độ và kinh độ là khoảng cách không bằng nhau riêng biệt. Khi bạn càng đến gần đường xích đạo, các đường vĩ độ càng xa nhau. Nếu bạn sử dụng một số loại phương trình tam giác đơn giản, nó có thể đo khoảng cách chính xác ở một vị trí và sai khủng khiếp ở vị trí khác, do độ cong của Trái đất.

Khoảng cách vòng tròn lớn

Các tuyến đường di chuyển xa quanh Trái đất được gọi là Khoảng cách vòng tròn lớn. Đó là… khoảng cách ngắn nhất giữa hai điểm trên hình cầu khác với các điểm trên bản đồ phẳng. Kết hợp điều đó với thực tế là các đường vĩ độ và kinh độ không bằng nhau… và bạn đã có một phép tính khó.

Đây là video giải thích tuyệt vời về cách các Vòng kết nối lớn hoạt động.


Công thức Haversine

Khoảng cách sử dụng độ cong của Trái đất được kết hợp trong Công thức Haversine, sử dụng lượng giác để cho phép độ cong của trái đất. Khi bạn đang tìm khoảng cách giữa 2 nơi trên trái đất (khi quạ bay), một đường thẳng thực sự là một đường cung.

Điều này có thể áp dụng trong chuyến bay hàng không - bạn đã bao giờ nhìn vào bản đồ thực tế của các chuyến bay và nhận thấy chúng được hình cung? Đó là bởi vì bay trong vòm giữa hai điểm sẽ ngắn hơn so với trực tiếp đến vị trí.

PHP: Tính khoảng cách giữa 2 điểm vĩ độ và kinh độ

Đây là công thức PHP để tính khoảng cách giữa hai điểm (cùng với chuyển đổi Mile so với Kilômét) được làm tròn đến hai chữ số thập phân.

function get
Distance
Between
Points
New($latitude1, $longitude1, $latitude2, $longitude2, $unit = "miles") { $theta = $longitude1 - $longitude2; $distance = (sin(deg2rad($latitude1)) * sin(deg2rad($latitude2))) + (cos(deg2rad($latitude1)) * cos(deg2rad($latitude2)) * cos(deg2rad($theta))); $distance = acos($distance); $distance = rad2deg($distance); $distance = $distance * 60 * 1.1515; switch($unit) { case "miles": break; case "kilometers" : $distance = $distance * 1.609344; } return (round($distance,2)); }

Các biến là:

$ Latitude1 - một biến cho vĩ độ của vị trí đầu tiên của bạn.

$ Kinh độ1 - một biến số cho kinh độ vị trí đầu tiên của bạn

$ Latitude2 - một biến cho vĩ độ của vị trí thứ hai của bạn.

$ Kinh độ2 - một biến cho kinh độ vị trí thứ hai của bạn.

đơn vị $ - mặc định là dặm. Điều này có thể được cập nhật hoặc chuyển thành cây số.

Java: Tính Khoảng Cách Giữa 2 Điểm Vĩ Độ Và Kinh Độ

public static double get
Distance
Between
Points
New(double latitude1, double longitude1, double latitude2, double longitude2, String unit) { double theta = longitude1 - longitude2; double distance = 60 * 1.1515 * (180/Math.PI) * Math.acos( Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180)) ); if (unit.equals("miles")) { return Math.round(distance, 2); } else if (unit.equals("kilometers")) { return Math.round(distance * 1.609344, 2); } else { return 0; }}

Các biến là:

vĩ độ1 - một biến cho vĩ độ của vị trí đầu tiên của bạn.

kinh độ1 - một biến số cho kinh độ vị trí đầu tiên của bạn

vĩ độ2 - một biến cho vĩ độ của vị trí thứ hai của bạn.

kinh độ2 - một biến cho kinh độ vị trí thứ hai của bạn.

đơn vị - mặc định là dặm. Điều này có thể được cập nhật hoặc chuyển thành cây số.

Javascript: Tính khoảng cách giữa 2 điểm có vĩ độ và kinh độ

function get
Distance
Between
Points(latitude1, longitude1, latitude2, longitude2, unit = "miles") { let theta = longitude1 - longitude2; let distance = 60 * 1.1515 * (180/Math.PI) * Math.acos( Math.sin(latitude1 * (Math.PI/180)) * Math.sin(latitude2 * (Math.PI/180)) + Math.cos(latitude1 * (Math.PI/180)) * Math.cos(latitude2 * (Math.PI/180)) * Math.cos(theta * (Math.PI/180)) ); if (unit == "miles") { return Math.round(distance, 2); } else if (unit == "kilometers") { return Math.round(distance * 1.609344, 2); }}

Các biến là:

vĩ độ1 - một biến cho vĩ độ của vị trí đầu tiên của bạn.

kinh độ1 - một biến số cho kinh độ vị trí đầu tiên của bạn

vĩ độ2 - một biến cho vĩ độ của vị trí thứ hai của bạn.

kinh độ2 - một biến cho kinh độ vị trí thứ hai của bạn.

đơn vị - mặc định là dặm. Điều này có thể được cập nhật hoặc chuyển thành cây số.

Python: Tính khoảng cách giữa 2 điểm vĩ độ và kinh độ

Dù sao, đây là công thức Python để tính khoảng cách giữa hai điểm (cùng với chuyển đổi Mile so với Kilômét) được làm tròn đến hai chữ số thập phân. Tín dụng cho con trai tôi, Bill Karr, một nhà khoa học dữ liệu cho mở
INSIGHTS, cho mã.

from numpy import sin, cos, arccos, pi, rounddef rad2deg(radians): degrees = radians * 180 / pi return degreesdef deg2rad(degrees): radians = degrees * pi / 180 return radiansdef get
Distance
Between
Points
New(latitude1, longitude1, latitude2, longitude2, unit = "miles"): theta = longitude1 - longitude2 distance = 60 * 1.1515 * rad2deg( arccos( (sin(deg2rad(latitude1)) * sin(deg2rad(latitude2))) + (cos(deg2rad(latitude1)) * cos(deg2rad(latitude2)) * cos(deg2rad(theta))) ) ) if unit == "miles": return round(distance, 2) if unit == "kilometers": return round(distance * 1.609344, 2)

Các biến là:

vĩ độ1 - một biến cho vị trí đầu tiên của bạn vĩ độ.

kinh độ1 - một biến cho vị trí đầu tiên của bạn kinh độ

vĩ độ2 - một biến cho vị trí thứ hai của bạn vĩ độ.

kinh độ2 - một biến cho vị trí thứ hai của bạn kinh độ.

đơn vị - mặc định là dặm. Điều này có thể được cập nhật hoặc chuyển thành cây số.

My
SQL: Truy xuất tất cả các bản ghi trong một phạm vi bằng cách tính khoảng cách tính bằng dặm bằng kinh độ và vĩ độ

Cũng có thể sử dụng SQL để thực hiện một phép tính để tìm tất cả các bản ghi trong một khoảng cách cụ thể. Trong ví dụ này, tôi sẽ My
Table truy vấn trong My
SQL để tìm tất cả các hồ sơ mà là nhỏ hơn hoặc bằng với biến $ khoảng cách (trong Miles) đến vị trí của tôi tại $ vĩ độ và kinh độ $:

Truy vấn để lấy tất cả các bản ghi trong một khoảng cách bằng cách tính toán khoảng cách trong dặm giữa hai điểm của vĩ độ và kinh độ là:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`)*pi()/180)))) * 180/pi()) * 60 * 1.1515) as distance FROM `table` WHERE distance

Bạn sẽ cần phải tùy chỉnh điều này:

$ kinh độ - đây là một biến PHP mà tôi đang truyền kinh độ của điểm.

$ vĩ độ - đây là một biến PHP mà tôi đang truyền kinh độ của điểm.

$ khoảng cách - đây là khoảng cách mà bạn muốn tìm tất cả các bản ghi nhỏ hơn hoặc bằng.

bàn - đây là bảng… bạn sẽ muốn thay thế nó bằng tên bảng của mình.

vĩ độ - đây là trường vĩ độ của bạn.

kinh độ - đây là trường kinh độ của bạn.

My
SQL: Truy xuất tất cả các bản ghi trong một phạm vi bằng cách tính toán khoảng cách theo kilomet sử dụng vĩ độ và kinh độ

Và đây là truy vấn SQL sử dụng km trong My
SQL:

$query = "SELECT *, (((acos(sin((".$latitude."*pi()/180)) * sin((`latitude`*pi()/180)) + cos((".$latitude."*pi()/180)) * cos((`latitude`*pi()/180)) * cos(((".$longitude."- `longitude`) * pi()/180)))) * 180/pi()) * 60 * 1.1515 * 1.609344) as distance FROM `table` WHERE distance

Bạn sẽ cần phải tùy chỉnh điều này:

$ kinh độ - đây là một biến PHP mà tôi đang truyền kinh độ của điểm.

$ vĩ độ - đây là một biến PHP mà tôi đang truyền kinh độ của điểm.

$ khoảng cách - đây là khoảng cách mà bạn muốn tìm tất cả các bản ghi nhỏ hơn hoặc bằng.

bàn - đây là bảng… bạn sẽ muốn thay thế nó bằng tên bảng của mình.

vĩ độ - đây là trường vĩ độ của bạn.

kinh độ - đây là trường kinh độ của bạn.

Tôi đã sử dụng mã này trong một nền tảng lập bản đồ doanh nghiệp mà chúng tôi đã sử dụng cho một cửa hàng bán lẻ với hơn 1,000 địa điểm trên khắp Bắc Mỹ và nó hoạt động rất tốt.

Xem thêm:

Khoảng cách địa lý của Microsoft SQL Server: STDistance

Nếu bạn đang sử dụng Microsoft SQL Server, họ cung cấp chức năng riêng, STKhoảng cách để tính khoảng cách giữa hai điểm bằng kiểu dữ liệu Địa lý.

Hướng Dẫn Đo Khoảng Cách Chu Vi Quãng Đường Bằng Google Map Đơn Giản


Mình đã từng có bài viết về chủ đề này trước đây, nhưng sử dụng Google Map API để tính khoảng cách từ điểm A đến điểm B. Lần này tất cả chúng ta sử dụng PHP để tính khoảng cách từ một điểm đến điểm còn lại – cũng sử dụng kinh độ và vĩ độ như Google Map

Công thức tính khoảng cách Haversine

Vấn đề tính khoảng cách từ điểm A đến điểm B có thể được giải quyết bằng công thức Haversine. Để áp dụng được công thức này, chúng ta cần có vị trí điểm A và điểm B trên bề mặt trái đất.Sau đó, bạn cần chuyển đổi kinh độ và vĩ độ tương ứng từ đơn vị đô là độ sang đơn vị đo radian.Hãy xem công thức cơ sở của phép đổi đơn vị chức năng này :Latitude in Radians= (Latitude /180) pi radians =(Latitude * 0.01746031) radiansLongitude in Radians= (Longitude /180) pi radians =(Longitude * 0.01746031) radians

The distance between two places using latitude and longitude in PHP

Core Web Vitals – Hiểu sao cho đúng ?

Mình viết cái blog này từ thời mình hàng U2x, giờ là 3Ux và sắp bước sang U4x. Nói tóm lại là mình già rồi mấy bạn trẻ ơi! Vì vậy mấy bạn đọc để tham khảo, đọc để chia sẻ và đọc để học hỏi là chính chứ đừng có chửi thề, đừng có gây war nha. Mình già – mình ngại va chạm lắm… Nếu bạn cảm thấy bài viết có nhiều điểm không chính xác, hãy comment và chia sẻ để tôi còn được học hỏi từ những góp ý của bạn. Read More…Mình tính việc về yếu tố này hơn nửa tháng nay nhưng đúng lúc em bé nhà mình sinh nên cứ ngồi lên máy gõ được vài chữ là “ người mẫu ” nhà mình lại oe oe … và tụt mood mất tiêu nên lại không viết nữa. Cố gắng lắm giờ đây ráng viết vài dòng
*

Tất tần tật về Lazy Loading Images

Các Câu Hỏi How To: Tính Khoảng Cách Giữa 2 Tọa Độ Gps ? Đo Khoảng Cách Giữa Các Điểm

Nếu có bắt kỳ câu hỏi thắc mắt nào ” How To: Tính Khoảng Cách Giữa 2 Tọa Độ Gps ? Đo Khoảng Cách Giữa Các Điểm” mới hãy cho chúng mình biết nha, mõi thắt mắt hay góp ý của các bạn sẽ giúp mình nâng cao hơn hơn trong các bài sau nha
*
công thức tính khoảng cách giữa 2 tọa độ gps trong excel tính khoảng cách giữa 2 tọa độ gps công thức haversine tọa độ gps