Моя цель - создать изохронные фигуры на основе API Google Map. Я пробовал другие услуги ( Здесь ...), но они не предоставляют изолинии для велосипедов.
Мой подход до сих пор - подход "грубой силы". В одном из районов Парижа, Франция, я использую API матрицы расстояний Google Maps для получения велосипедных расстояний (от которых можно ехать, ходить пешком) до 18 000 адресов от моей начальной точки.
Используя маркеры разных цветов, у меня уже есть обзор расстояний езды на велосипеде от моей начальной точки:
Пока все не так плохо. Однако вместо того, чтобы отображать 18 000 маркеров, я предпочел бы делать из них фигуры, но я почесал голову, как их вычислять.
Моей первой мыслью было представить круг с центром в моей красной точке, разделить его на многочисленные срезы и для каждого среза определить самую дальнюю точку внутри среза и сохранить ее как точку моей изохроны.
Моя проблема в том, что я полностью скучаю по геометрическим знаниям, чтобы получить эти знаменитые точки под углом, и я даже не уверен, что это подходящий подход.
initial_position = [48,50002, 2,21452]
list_of_points = [{'lat':...,'lng':..., 'cycling_duration':....},...] #list of 18000 walking distances from Google Map API requests
def get_points_within_an_angle(initial_position, ):
#... needing some help ...
return list_of_points
def isochrone(duration_desired, initial_position, list_of_points):
final_shape = []
## Filter points which are within the wanted duration range
list_of_points = [x for x in list_of_points if x['cycling_duration']<=duration_desired]
number_of_slices = 360 #higher number increases precision
for x in range(1, number_of_slices+1):
temp_list_of_points = get_points_within_an_angle(initial_position, list_of_points, angle)
#Determine the farthest_point
farthest_point = max(temp_list_of_points, key=lambda x:x['cycling_duration'])
final_shape.append(farthest_point)
return final_shape
## Finaly calling the function
isochrone(600, initial_position, list_of_points) #duration is expressed in seconds
Любые предложения будут высоко оценены.
Себастьен