Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.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_For Loop_Geospatial_Geo_Haversine - Fatal编程技术网

Python 在坐标之间最近的距离上连接两个数据帧

Python 在坐标之间最近的距离上连接两个数据帧,python,for-loop,geospatial,geo,haversine,Python,For Loop,Geospatial,Geo,Haversine,我有两个数据集,我需要在两个坐标之间的距离上连接在一起。我创建了一个用于计算距离(km)的函数,但在计算过程中遇到了性能限制 数据集1: building_id | lat | lng -------------|-------|-------- 1 | 32.11 | -71.22 2 | 32.44 | -72.25 3 | 31.75 | -71.36``` building_id | lat | lng -

我有两个数据集,我需要在两个坐标之间的距离上连接在一起。我创建了一个用于计算距离(km)的函数,但在计算过程中遇到了性能限制

数据集1:

 building_id |  lat  |  lng
-------------|-------|--------
      1      | 32.11 | -71.22
      2      | 32.44 | -72.25
      3      | 31.75 | -71.36```
building_id |  lat  |  lng
------------|-------|--------
      4     | 31.65 | -73.52
      5     | 32.78 | -70.21
      6     | 36.15 | -72.49
数据集2:

 building_id |  lat  |  lng
-------------|-------|--------
      1      | 32.11 | -71.22
      2      | 32.44 | -72.25
      3      | 31.75 | -71.36```
building_id |  lat  |  lng
------------|-------|--------
      4     | 31.65 | -73.52
      5     | 32.78 | -70.21
      6     | 36.15 | -72.49
每个数据集中有10000多座建筑物,我想将数据集2与数据集1进行匹配,但仅当距离(以km为单位)小于0.0075时

我目前正在遍历数据集1的每一行,并从数据集2中查找所有lat lng组合,以确定最小距离

dataset_2_latlng_dict = dict(zip(dataset_2.lng,dataset_2.lat))

for index, row in dataset_1.iterrows():
    lat = row['lat']
    lng = row['lng']
    all_dist = []
    final_list = []
    for key, value in dataset_2_latlng_dict.iteritems():
        distance = utils.distance_km(key,value,lng,lat)
        all_dist.extend([distance])
        final_list = sorted(all_dist, key=float)
    dataset_1['min_distance'] = final_list[0]

您没有向提供任何数据,因此我将此答案保留为描述性的

正如您所期望的,没有理由计算到每个其他建筑的距离。7.5米规格意味着lat和longs将非常接近于直接匹配彼此相邻的任何建筑物

纬度线之间的距离从赤道的110.6公里到两极的111.7公里不等。如果我们加上一些误差和四舍五入来简化分析,那么我们可以使用每度100公里的估计值。这意味着0.0075km的最大距离变为0.000075度的最大纬度。因此,任何符合0.0075km距离标准的建筑也必然符合0.000075度纬度标准。如果将计算限制在纬度0.000075度以内的建筑物上,则只需对较小的建筑物子集进行计算


因此,您只需按纬度对位置列表进行排序,然后遍历列表,仅比较纬度在0.000075度(7.5米)以内的建筑物的距离另一个列表中的建筑的最大距离。

您是否有更大的数据集可用于测试?您可以尝试1)计算第一个数据集中与每个建筑的最大距离的坐标,然后2)根据这些坐标过滤第二个数据集。然后,您甚至可能不需要将所有行相互配对。