Примечание: решение в python также подойдет мне.
Я пытаюсь нарисовать контуры в зависимости от времени транспортировки. Чтобы быть более ясным, я хочу сгруппировать точки, которые имеют одинаковое время в пути (скажем, 10-минутный интервал), к определенной точке (пункт назначения) и отобразить их как контуры или тепловую карту.
Прямо сейчас, единственная идея, которая у меня есть, - это использовать gmapsdistance
чтобы найти время в пути для разных источников, а затем объединить их и нарисовать на карте. Но, как вы можете сказать, это ни в коем случае не является надежным решением.
Этот поток в ГИС-сообществе и этот для python иллюстрируют аналогичную проблему, но для происхождения в пункты назначения в пределах досягаемости в определенное время. Я хочу найти источники, которые я могу путешествовать в пункт назначения в течение определенного времени.
Прямо сейчас, код ниже показывает мою элементарную идею:
library(gmapsdistance)
set.api.key("YOUR.API.KEY")
mdestination <- "40.7+-73"
morigin1 <- "40.6+-74.2"
morigin2 <- "40+-74"
gmapsdistance(origin = morigin1,
destination = mdestination,
mode = "transit")
gmapsdistance(origin = morigin2,
destination = mdestination,
mode = "transit")
Эта карта также может помочь понять вопрос:
Обновление I:
Используя этот ответ, я могу получить точки, в которые я могу попасть из пункта отправления, но мне нужно поменять его местами и найти точки, у которых время в пути меньше определенного времени до моего пункта назначения;
library(httr)
library(googleway)
library(jsonlite)
appId <- "TravelTime_APP_ID"
apiKey <- "TravelTime_API_KEY"
mapKey <- "GOOGLE_MAPS_API_KEY"
location <- c(40, -73)
CommuteTime <- (5 / 6) * 60 * 60
url <- "http://api.traveltimeapp.com/v4/time-map"
requestBody <- paste0('{
"departure_searches" : [
{"id" : "test",
"coords": {"lat":', location[1], ', "lng":', location[2],' },
"transportation" : {"type" : "driving"} ,
"travel_time" : ', CommuteTime, ',
"departure_time" : "2017-05-03T07:20:00z"
}
]
}')
res <- httr::POST(url = url,
httr::add_headers('Content-Type' = 'application/json'),
httr::add_headers('Accept' = 'application/json'),
httr::add_headers('X-Application-Id' = appId),
httr::add_headers('X-Api-Key' = apiKey),
body = requestBody,
encode = "json")
res <- jsonlite::fromJSON(as.character(res))
pl <- lapply(res$results$shapes[[1]]$shell, function(x){
googleway::encode_pl(lat = x[['lat']], lon = x[['lng']])
})
df <- data.frame(polyline = unlist(pl))
df_marker <- data.frame(lat = location[1], lon = location[2])
google_map(key = mapKey) %>%
add_markers(data = df_marker) %>%
add_polylines(data = df, polyline = "polyline")
Обновление II:
Более того, в документации по платформе Time Time Map Platform говорится о многоцелевом происхождении и времени прибытия, что я и хочу делать. Но мне нужно сделать это как для общественного транспорта, так и для вождения (для мест, где время в пути меньше часа), и я думаю, что, поскольку общественный транспорт сложен (в зависимости от того, к какой станции вы находитесь близко), возможно, тепловая карта - лучший вариант, чем контуры.