Hướng dẫn how do you find the distance between two lat long in python? - làm thế nào để bạn tìm thấy khoảng cách giữa hai lat dài trong python?

Ảnh bằng cách chụp trái tim con người. trên undplash

Một vài tháng trước, tôi đã làm việc trên một dự án tự do về trực quan hóa dữ liệu vị trí địa lý (nghĩa là vĩ độ và kinh độ) trong đó tôi phải trực quan hóa các cơ sở trung tâm và vị trí khách hàng trên bản đồ. Theo một trong những yêu cầu của khách hàng, tôi phải tìm tất cả các địa điểm của khách hàng nằm trong phạm vi 3 km từ các cơ sở khác nhau. Để làm điều này, tôi phải tính khoảng cách giữa tất cả các vị trí. Đó là lần đầu tiên tôi làm việc với các tọa độ RAW, vì vậy tôi đã thử một nỗ lực ngây thơ để tính khoảng cách bằng cách sử dụng khoảng cách Euclide, nhưng sớm nhận ra rằng cách tiếp cận này là sai.

Khoảng cách Euclide hoạt động cho bề mặt phẳng như một đồng bằng Cartesian, tuy nhiên, Trái đất không bằng phẳng. Vì vậy, chúng tôi phải sử dụng một loại công thức đặc biệt được gọi là khoảng cách haversine.Haversine Distance.

Haversine Distancecan được xác định là khoảng cách góc giữa hai vị trí trên bề mặt Trái đất.can be defined asthe angular distance between two locations on the Earth’s surface.

Khoảng cách Haversine có thể được tính là:

Nguồn: https://en.wikipedia.org/wiki/haversine_formula

Có vẻ khó khăn, vâng, sẽ rất khó khăn nếu bạn phải áp dụng nó bằng mã Python thô, nhưng nhờ cộng đồng các nhà phát triển sôi động của Python, rằng chúng tôi có một thư viện chuyên dụng để tính khoảng cách Haversine gọi là Haversine (một trong những đặc quyền sử dụng Python).

Rằng nó với phần giới thiệu cho phép bắt đầu với việc thực hiện nó:

Bước 1: Cài đặt trên mạng Haversine

Để cài đặt loại HAVERSINE sau lệnh trong Notebook Jupyter.

!pip install haversine

Nếu bạn đang cài đặt thông qua lời nhắc của Anaconda, hãy loại bỏ các trò chơi! Đánh dấu từ lệnh trên.

Bước 2: Nhập thư viện

Sau khi cài đặt thư viện nhập nó

import haversine as hs

Bước 3: Tính khoảng cách giữa hai vị trí

loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)

Đầu ra: 5.229712941541709

Theo mặc định, hàm Haversine trả về khoảng cách tính bằng km. Nếu bạn muốn thay đổi đơn vị khoảng cách thành dặm hoặc mét, bạn có thể sử dụng tham số đơn vị của hàm Haversine như hình dưới đây:

from haversine import Unit
#To calculate distance in meters
hs.haversine(loc1,loc2,unit=Unit.METERS)

Đầu ra: 5229.7129415417085

#To calculate distance in miles 
hs.haversine(loc1,loc2,unit=Unit.MILES)

Đầu ra: 3.2495929643035977

Tương tự, bạn cũng có thể tính khoảng cách tính bằng inch.

Tính khoảng cách giữa hai vị trí là một yêu cầu cơ bản nếu bạn đang làm việc với dữ liệu vị trí thô. Nó không chỉ giúp bạn hình dung tốt hơn mà còn cung cấp một lợi thế cho thuật toán học máy của bạn. Nó có thể tạo ra một lợi thế cho mô hình của bạn và cải thiện hiệu quả tổng thể của nó bằng cách thêm một khoảng cách mới về khoảng cách.

Đây là đầu ra của dự án mà tôi đã đề cập trước đó trong bài viết này:

Hình ảnh của tác giả

Nếu bạn muốn xem toàn bộ mã, bạn có thể truy cập trang GitHub của tôi: https://github.com/ashutoshb418/foodies-visualization

Dữ liệu địa lý

Khoảng cách kỹ thuật tính năng từ tọa độ địa lý

Khi chuẩn bị dữ liệu cho một mô hình, có thể có một thời gian mà nó hữu ích để tìm khoảng cách giữa hai vị trí. Bài đăng này cho thấy cách tìm khoảng cách hình cầu và di chuyển ngắn nhất giữa hai vị trí từ vĩ độ và kinh độ của chúng ở Python.

Ảnh của Dariusz Sankowski trên undplash

Tọa độ địa lý

Chúng ta có thể xác định vị trí bất kỳ nơi nào trên trái đất từ ​​các tọa độ địa lý của nó. Tọa độ địa lý của một vị trí bao gồm vị trí vĩ độ và kinh độ của nó.

Hình ảnh của tác giả

Latitude

Vĩ độ là một phép đo vị trí thẳng đứng giữa Bắc Cực và Nam Cực. Các đường vĩ độ ngang tưởng tượng được gọi là song song. Xích đạo là một song song đặc biệt ở vĩ độ 0 ° và nằm giữa và Bắc Cực và Nam Cực.

Hình ảnh của tác giả

📍 Kinh độ

Kinh độ là một phép đo của vị trí ngang. Các đường kinh độ thẳng đứng tưởng tượng được gọi là kinh tuyến. Các kinh tuyến chính là một kinh tuyến đặc biệt ở độ kinh độ 0 °. Kinh độ cũng rất quan trọng khi nói đến múi giờ.

Hình ảnh của tác giả | Đối diện với kinh tuyến chính, Antimeridian nằm ở kinh độ 180 °.

Parallels giống như một chiếc nhẫn trong khi kinh tuyến giống như một nửa vòng.

Thiết lập

Chúng tôi sẽ nhập các thư viện và đặt hai tọa độ vị trí mẫu ở Melbourne, Úc:

import numpy as np
import pandas as pd
from math import radians, cos, sin, asin, acos, sqrt, pi
from geopy import distance
from geopy.geocoders import Nominatim
import osmnx as ox
import networkx as nx
lat1, lon1 = -37.82120, 144.96441 # location 1
lat2, lon2 = -37.88465, 145.08727 # location 2

Cài đặt

import haversine as hs
2 có thể là một cách khó khăn. Một cách dễ dàng để thiết lập môi trường để làm theo hướng dẫn này sẽ là sử dụng Google Colaboratory: Đầu tiên, tạo một cuốn sổ mới; thứ hai, cài đặt thư viện với
import haversine as hs
3; Thứ ba, khởi động lại: Chuyển đến thời gian chạy từ menu trên đầu> Khởi động lại thời gian chạy> Môi trường đã sẵn sàng!

Khoảng cách hình cầu ngắn nhất

Bán kính xích đạo Trái đất là 6378 km và bán kính cực là 6356 km nên trái đất không phải là một hình cầu hoàn hảo. Tuy nhiên, giả sử Trái đất hình cầu cho phép chúng ta dễ dàng tìm thấy khoảng cách gần đúng, điều này là thỏa đáng trong một số ứng dụng. Trong phần này, chúng tôi sẽ sử dụng công thức Haversine để tìm khoảng cách hình cầu giữa hai vị trí từ tọa độ địa lý của chúng. Trước tiên, hãy làm quen với chức năng Haversine.

Chức năng Haversine như sau:

Haversine của một góc trung tâm, bằng khoảng cách hình cầu chia cho bán kính của hình cầu, có thể được tính toán bằng công thức Haversine:

Chúng ta có thể chuyển đổi công thức này bằng định nghĩa đầu tiên của hàm Haversine và sắp xếp lại nó sao cho

import haversine as hs
4 ở phía bên trái:

Bây giờ, nó đã đến lúc dịch nó thành mã Python. Có hai điều cần làm nổi bật: Thứ nhất, các vĩ độ và kinh độ có bằng cấp nên chúng tôi sẽ phải chuyển đổi chúng thành radian trước khi chúng tôi cắm chúng vào công thức. Thứ hai, chúng ta sẽ sử dụng giá trị trung bình trên toàn cầu là 6371 km làm bán kính của trái đất hình cầu.

def calculate_spherical_distance(lat1, lon1, lat2, lon2, r=6371):
# Convert degrees to radians
coordinates = lat1, lon1, lat2, lon2
# radians(c) is same as c*pi/180
phi1, lambda1, phi2, lambda2 = [
radians(c) for c in coordinates
]

# Apply the haversine formula
a = (np.square(sin((phi2-phi1)/2)) + cos(phi1) * cos(phi2) *
np.square(sin((lambda2-lambda1)/2)))
d = 2*r*asin(np.sqrt(a))
return d

print(f"{calculate_spherical_distance(lat1, lon1, lat2, lon2):.4f} km")

Ngoài ra, chúng ta có thể sử dụng định nghĩa thứ hai của hàm haversine với cosin và sắp xếp lại phương trình để thể hiện

import haversine as hs
4:

Điều này có thể được thể hiện bằng Python như sau:

def calculate_spherical_distance(lat1, lon1, lat2, lon2, r=6371):
# Convert degrees to radians
coordinates = lat1, lon1, lat2, lon2
phi1, lambda1, phi2, lambda2 = [
radians(c) for c in coordinates
]

# Apply the haversine formula
d = r*acos(cos(phi2-phi1) - cos(phi1) * cos(phi2) *
(1-cos(lambda2-lambda1)))
return d

print(f"{calculate_spherical_distance(lat1, lon1, lat2, lon2):.4f} km")

Thực tế hơn, chúng ta có thể sử dụng gói

import haversine as hs
6 để có được khoảng cách hình cầu trong một dòng mã duy nhất:

print(f"{distance.great_circle((lat1, lon1), (lat2, lon2)).km:.4f} km")

Ngoài ra, nó rất dễ tìm thấy các khoảng cách khác với gói

import haversine as hs
6. Chẳng hạn, chúng ta có thể có được khoảng cách dựa trên giả định Trái đất Ellipsoid như thế này:
import haversine as hs
8. Có các mô hình elipsoid khác nhau có sẵn, hàm trước sử dụng mô hình
import haversine as hs
9 và ở đây, một cú pháp thay thế:
loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)
0. Nếu bạn muốn tìm hiểu thêm về thư viện, hãy xem tài nguyên của nó về khoảng cách tính toán.

Khoảng cách di chuyển ngắn nhất

Trong phần này, chúng tôi sẽ xem xét cách tìm khoảng cách di chuyển ngắn nhất bằng OpenStreetMap với gói

loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)
1. Chúng tôi sẽ bắt đầu bằng cách kéo biểu đồ của mạng lưới thành phố:

mel_graph = ox.graph_from_place(
'Melbourne, Australia', network_type='drive', simplify=True
)
ox.plot_graph(mel_graph)

Mã này có khả năng mất một thời gian để chạy. Chúng tôi đã sử dụng

loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)
2 để có được khoảng cách lái xe. Các loại mạng khác cũng có sẵn. Chẳng hạn, nếu chúng ta là sau khi đi bộ, thì chúng ta đã điều chỉnh mã thành
loc1=(28.426846,77.088834)
loc2=(28.394231,77.050308)
hs.haversine(loc1,loc2)
3.

Bây giờ, chúng ta có thể tìm thấy khoảng cách lái xe bằng biểu đồ:

import haversine as hs
0

Khoảng cách lái xe ngắn nhất từ ​​vị trí 1 đến vị trí 2 là 15.086,094 mét. Nó đáng chú ý rằng khoảng cách từ vị trí 2 đến vị trí 1 có thể không nhất thiết giống như khoảng cách từ vị trí 1 đến vị trí 2.

Chúng ta có thể tạo một hàm tính toán khoảng cách:

import haversine as hs
1

Điều đó là vậy đó! Nếu bạn muốn tìm hiểu thêm về thư viện, hãy xem các ví dụ về người dùng OSMNX và các ví dụ OSMNX.

Ảnh của Clay Banks trên unplash

Bạn có muốn truy cập nhiều nội dung hơn như thế này không? Các thành viên trung bình nhận được quyền truy cập không giới hạn vào bất kỳ bài viết nào trên phương tiện. Nếu bạn trở thành thành viên sử dụng liên kết giới thiệu của tôi, một phần phí thành viên của bạn sẽ trực tiếp hỗ trợ tôi.

Làm thế nào để bạn tìm thấy khoảng cách giữa hai tọa độ kinh độ vĩ độ?

Đối với điều này phân chia các giá trị của kinh độ và vĩ độ của cả hai điểm cho 180/pi. Giá trị của PI là 22/7. Giá trị 180/pi là khoảng 57.29577951. Nếu chúng ta muốn tính khoảng cách giữa hai vị trí tính bằng dặm, hãy sử dụng giá trị 3, 963, đó là bán kính của Trái đất.divide the values of longitude and latitude of both the points by 180/pi. The value of pi is 22/7. The value of 180/pi is approximately 57.29577951. If we want to calculate the distance between two places in miles, use the value 3, 963, which is the radius of Earth.

Làm thế nào để bạn tìm thấy khoảng cách giữa hai vectơ trong Python?

Làm thế nào để tính toán khoảng cách Euclide trong Python?Công thức để tính khoảng cách giữa hai điểm (x1 1, y1 1) và (x2 2, y2 2) là d = √ [(x2 - x1) 2 + (y2 - y1) 2].Có 4 cách tiếp cận khác nhau để tìm khoảng cách Euclide trong Python bằng các thư viện Numpy và Scipy.d = √[(x2 – x1)2 + (y2 – y1)2]. There are 4 different approaches for finding the Euclidean distance in Python using the NumPy and SciPy libraries.

Làm thế nào để bạn tìm thấy khoảng cách ngắn nhất giữa hai tọa độ trong Python?

Sử dụng Dist trong một vòng lặp lồng nhau bên trong ShortStdist để so sánh từng phần tử của danh sách các điểm với mọi yếu tố trong danh sách sau nó.Vì vậy, về cơ bản, tìm khoảng cách ngắn nhất giữa các điểm trong một danh sách.Điều đó tìm thấy khoảng cách ổn giữa hai điểm.. So, basically, find the shortest distance between points in a list. That finds the distance alright between two points.