【发布时间】:2019-06-05 15:51:13
【问题描述】:
我有一个地点事故的纬度列表,想看看离这些事故最近的警察局是什么。目前,事故的经纬度列表使用 pandas 在两个单独的列中(对不起,我对 python 很陌生,所以我可能会错误地使用单词)。派出所的经纬度目前在一个单独的 json 文件中。我目前的目标是创建一个新列(或文件),其中出现最近警察局的 latlongs。理想情况下,它应该是相应的名称,但那是我遇到它时会跨过的一座桥。
我查看了其他人是如何做到的,但除了询问位置,我只能询问一对 latlongs 的位置,而不是同时询问所有这些。
from math import cos, asin, sqrt
def distance (lat1, lon1, lat2, lon2):
p = 0.017453292519943295
a = 0.5 - cos((lat2-lat1)*p)/2 + cos(lat1*p)*cos(lat2*p) * (1-cos((lon2-lon1)*p)) / 2
return 12742 * asin(sqrt(a))
def closest(data, v):
return min(data, key=lambda p: distance(v['lat'],v['lon'],p['lat'],p['lon']))
#these are the latlons of the police stations
tempDataList = [{"lat": 52.003181, "lon": 4.353068},
{"lat": 52.089416, "lon": 4.377340},
{"lat": 52.019911, "lon": 4.426602},
{"lat": 52.054457, "lon": 4.388764},
{"lat": 52.044536, "lon": 4.332631},
{"lat": 52.072910, "lon": 4.274784},
{"lat": 52.066099, "lon": 4.298664},
{"lat": 52.070030, "lon": 4.317355},
{"lat": 52.052636, "lon": 4.289576},
{"lat": 52.060829, "lon": 4.318683},
{"lat": 52.075680, "lon": 4.306810},
{"lat": 52.040353, "lon": 4.256946},
{"lat": 52.089381, "lon": 4.345599},
{"lat": 52.111719, "lon": 4.283909},
{"lat": 52.055222, "lon": 4.233827},
{"lat": 52.046393, "lon": 4.253105},
{"lat": 52.144177, "lon": 4.405549},
{"lat": 51.987035, "lon": 4.199314},
{"lat": 52.061650, "lon": 4.486572}]
v = {'lat': 52.103167, 'lon': 4.317532}
print(closest(tempDataList, v))
这是我失败的地方,因为我根本不知道如何让 v 成为两列并将其放入新列。
我希望有一列显示最近警察局的经纬度。
有时我会遇到问题TypeError: string indices must be integers。
【问题讨论】:
标签: python json pandas dataframe latitude-longitude