Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何找到每家最近的地铁站_Python_R_Location - Fatal编程技术网

Python 如何找到每家最近的地铁站

Python 如何找到每家最近的地铁站,python,r,location,Python,R,Location,我有一个巨大的数据集,包括纽约市每家每户/公寓的经纬度。 以及纽约市每个地铁站/入口的经纬度数据集B 对于每栋房子,我想确定最近的地铁站以及到地铁站的距离。 问题是我有成千上万的房子和数百个地铁站。如果我要计算每个房子的距离,那是浪费时间。 识别最近的一个最快的方法是什么? 有没有R或Python中的包可以帮助我快速完成这项工作?我可能会尝试使用四叉树 R和python都有实现: R:搜索树 Python:pyqtree 如果每一行代表一个家,每一列代表一个站,您可以简单地计算距离矩阵并找到每

我有一个巨大的数据集,包括纽约市每家每户/公寓的经纬度。 以及纽约市每个地铁站/入口的经纬度数据集B

对于每栋房子,我想确定最近的地铁站以及到地铁站的距离。 问题是我有成千上万的房子和数百个地铁站。如果我要计算每个房子的距离,那是浪费时间。 识别最近的一个最快的方法是什么?
有没有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包,但我没有发现任何对我的案例有用的东西。你能告诉我更多的信息吗?非常感谢。