Как найти ближайшую точку среди списка координат GPS

1

У меня есть 2 набора данных. Один с координатами точками различных транспортных средств (vehicledata) и еще одна с координатами точек, каждый из которых присвоенной области (sublap данные). Я хочу классифицировать транспортные средства по регионам. Однако есть некоторые координаты транспортных средств, которые не относятся к данным региона. Я хотел бы по-прежнему иметь возможность классифицировать эти точки, назначая область, связанную со следующим ближайшим значением lat/lon, к этим координатам. Любые идеи о том, как это сделать с моим существующим скриптом python?

vehicledata = pd.read_csv('ParkingChargingBlocks.csv')

sublapdata = pd.read_csv('location_to_pnode_sublap.csv')

VID = vehicledata['VID'].values #j
lat_v = vehicledata['lat'].values
lon_v = vehicledata['lon'].values

sublap = sublapdata['sublap'].values #i
lat_s = sublapdata['latitude'].values
lon_s = sublapdata['longitude'].values

with open('locations_with_sublap.csv', 'w') as csvfile:
    fieldnames = ['VID', 'lat', 'lon', 'sublap'] 
    writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
    writer.writeheader()

for j in range (0, len(lat_v)): 
    for i in range(0, len(lat_s)):
        if lat_v[j] == lat_s[i] and lon_v[j] == lon_s[i]: 
            print (lat_v[j], lon_v[j], sublap[i])
            writer.writerow({"VID": VID[j], "lat": lat_v[j], "lon": lon_v[i], "sublap": sublap[i]})
Теги:
classification
nearest-neighbor

1 ответ

0

Использование scipy.spatial.KDTree может быть чрезмерным:

kd-дерево для быстрого поиска ближайших соседей

Этот класс предоставляет индекс в набор k-мерных точек, которые можно использовать для быстрого поиска ближайших соседей любой точки.

import numpy as np
from scipy.spatial import KDTree

VID = ['va', 'vb', 'vc']
lat_v = [1.2, 9.5, 1.4]
lon_v = [3.1, 2.4, 2.2]

sublap = ['a', 'b', 'c']
lat_s = [1, 7, 9]
lon_s = [3, 5, 1]

latlon_v = np.vstack([lat_s, lon_s]).T
findNearestRegion = KDTree(latlon_v).query

dist_idx = [ findNearestRegion(coords) for coords in zip(lat_v, lon_v) ]

for vehicle_id, (distance, index) in enumerate(dist_idx):
    print(VID[vehicle_id], sublap[index], distance)

Который дает:

va a 0.22360679774997896
vb c 1.4866068747318506
vc a 0.8944271909999156

Это расстояние до ближайшей станции (или региона).

  • 0
    Это ошибка, которую я получаю при запуске: Traceback (последний вызов был последним): файл "sublap_finder_updated.py", строка 28, в <module> findNearestRegion = KDTree (zip (lat_s, lon_s)). Файл запроса "/ Users /nalin/anaconda3/lib/python3.6/site-packages/scipy/spatial/kdtree.py ", строка 235, в файле init self.n, self.m = np.shape (self.data) ValueError: недостаточно значений распаковать (ожидал 2, получил 0)
  • 0
    проверьте длину lat_s и lon_s , может быть, он пуст?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню