Python 如何找到每家最近的地铁站
我有一个巨大的数据集,包括纽约市每家每户/公寓的经纬度。 以及纽约市每个地铁站/入口的经纬度数据集B 对于每栋房子,我想确定最近的地铁站以及到地铁站的距离。 问题是我有成千上万的房子和数百个地铁站。如果我要计算每个房子的距离,那是浪费时间。 识别最近的一个最快的方法是什么?Python 如何找到每家最近的地铁站,python,r,location,Python,R,Location,我有一个巨大的数据集,包括纽约市每家每户/公寓的经纬度。 以及纽约市每个地铁站/入口的经纬度数据集B 对于每栋房子,我想确定最近的地铁站以及到地铁站的距离。 问题是我有成千上万的房子和数百个地铁站。如果我要计算每个房子的距离,那是浪费时间。 识别最近的一个最快的方法是什么? 有没有R或Python中的包可以帮助我快速完成这项工作?我可能会尝试使用四叉树 R和python都有实现: R:搜索树 Python:pyqtree 如果每一行代表一个家,每一列代表一个站,您可以简单地计算距离矩阵并找到每
有没有R或Python中的包可以帮助我快速完成这项工作?我可能会尝试使用四叉树 R和python都有实现:
- R:搜索树
- Python:pyqtree
geosphere
包在这里很有用,因为它将根据坐标计算距离
您会注意到,我将经度放在第一位,距离函数distHaversine
以这种方式排序
求你了。我只是按照示例的说明进行操作
例如:
cities <- data.frame(city = c('Miami', 'Atlanta', 'New York', 'Los Angeles'),
lon = c(-80.1917, -84.387982, -74.005941, -118.243685),
lat = c(25.76168, 33.748995, 40.712784, 34.052234),
stringsAsFactors = FALSE)
stations <- data.frame(station = c('Orlando', 'Richmond', 'Nashville'),
lon = c(-81.379236, -77.436048, -86.781602),
lat = c(28.538335, 37.540725, 36.162664),
stringsAsFactors = FALSE)
cities
# city lon lat
# 1 Miami -80.19170 25.76168
# 2 Atlanta -84.38798 33.74900
# 3 New York -74.00594 40.71278
# 4 Los Angeles -118.24368 34.05223
stations
# station lon lat
# 1 Orlando -81.37924 28.53834
# 2 Richmond -77.43605 37.54073
# 3 Nashville -86.78160 36.16266
library(geosphere)
dist_mat <- mapply(function(lon, lat, cty) distHaversine(c(lon, lat), cty), stations[,2], stations[,3], list(cities[-1]))
min_dist <- apply(dist_mat, 1, which.min)
cbind(city=cities[,1], closest_station=stations[min_dist,1])
# city closest_station
# [1,] "Miami" "Orlando"
# [2,] "Atlanta" "Nashville"
# [3,] "New York" "Richmond"
# [4,] "Los Angeles" "Nashville"
城市
如果我要计算每个房子的距离,是时候了
浪费
不是真的,这就是电脑的用途。我无法想象在一个普通的桌面上花上几个小时
这是未经测试的,认为它是伪代码:
# distance between points is sqrt((x1-x2)^2 + (y1-y2)^2)
houses = [[32,54],[3,2],[15,16]]
subways = [[123,2],[54,3],[56,6],[54,32],[1,65],[43,1],[13,16],[21,6],[5,1]]
distances = []
for i in range(len(houses)):
distances.append([])
for j in range(len(subways)):
delta_x = house[i][0]-subway[j][0]
delta_y = house[i][1]-subway[j][1]
distance = (delta_x**2 + delta_y**2)**(0.5)
distances[i].append(distance)
min_idx = distances.index(min(distances))
print 'closest subway to house number %s at %s is subway number %s at %s' (
i, house[i], min_idx, subways[min_idx])
我打赌5万栋房子和500条地铁,不到一个小时你就会有答案。谢谢,我查阅了pyqtree python包,但我没有发现任何对我的案例有用的东西。你能告诉我更多的信息吗?非常感谢。