pandas - 确定与纬度和经度的距离
问题描述
我的数据集包含纬度和经度。现在我想确定这两个点之间的距离。你能帮我解决这个问题吗?在我的数据集中,我只有 2 个变量 Longitude = -73.953918 Latitude = 40.778873
解决方案
如果您有 pandas 数据框,则将每一列转换为 np 数组,并且此函数可用于标量或 numpy 数组,只需与 lat 和 lng 保持一致:
def haversine_np(lon1, lat1, lon2, lat2):
"""
Calculate the great circle distance between two points
on the earth (specified in decimal degrees)
All args must be of equal length.
"""
lon1, lat1, lon2, lat2 = map(np.radians, [lon1, lat1, lon2, lat2])
dlon = lon2 - lon1
dlat = lat2 - lat1
a = np.sin(dlat / 2.0) ** 2 + np.cos(lat1) * np.cos(lat2) * np.sin(dlon / 2.0) ** 2
kms= (2 * 6367) * np.arcsin(np.sqrt(a))
return kms
例子:
np.random.seed(42)
df = pd.DataFrame(dict(lat=np.random.uniform(32,33,(100,)),lng=np.random.uniform(33,34,(100,))))
point = dict(lat=32.5,lng=33.5)
df['distance_km'] = haversine_np(df['lng'].values,df['lat'].values,point['lng'],point['lat'])
df
>>>
lat lng distance_km
0 32.374540 33.031429 46.104413
1 32.950714 33.636410 51.683653
2 32.731994 33.314356 31.089653
3 32.598658 33.508571 10.992790
4 32.156019 33.907566 54.090586
... ... ... ...
95 32.493796 33.349210 14.149670
96 32.522733 33.725956 21.324490
97 32.427541 33.897110 38.093632
98 32.025419 33.887086 64.065001
99 32.107891 33.779876 50.888535
推荐阅读
- ruby-on-rails - 在 filesystem_access 中救援':Ruby rails 中的 Bundler::Dsl::DSLError
- python - 在远程容器中开发时发现测试
- android - 对讲开启时未检测到标记点击 - Android SDK v8.6.1
- ios - 如果图像实际上是从 url 下载的,我如何在 swift 5 中知道?
- spring-boot - 重要 onException shareUnitOfWork Apache Camel
- java - 如何在 Android 中将 Hex 转换为 ImageView
- python - matplotlib:同一个图例中的不同handletextpad值
- javascript - 如何从 javascript 方法调用控制器?
- css - 尝试创建闪亮的应用程序需要输入表单并上传到 sql。得到错误
- flutter - Flutter 中的 DateTime.now() 是从哪里获取的?