基于运输时间的热图/等值线(反向等时线)
注意:需要 r、python、java 或 c++ 或 c# 中的解决方案(如有必要)。
我正在尝试根据运输时间绘制轮廓。为了更清楚起见,我想将具有相似行程时间(假设10分钟间隔)的点聚类到特定点(目的地),并将它们映射为等值线或热图。
现在,我唯一的想法是使用R包gmapsdistance
来查找不同起源的旅行时间,然后将它们聚类并在地图上绘制。但是,正如您所知道的,这绝不是一个强大的解决方案。
GIS社区的这个线程和python的这个线程说明了类似的问题,但是对于特定时间内到达的目的地的起点。我想找到可以在一定时间内到达目的地的起点。
现在,下面的代码显示了我的基本想法(使用R):
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")
这张地图也可能有助于理解这个问题:
使用这个答案,我可以得到我可以从原点去的点,但我需要反转它,找到旅行时间等于一定时间到达目的地的点;
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")
此外,旅行时间地图平台的文档讨论了具有到达时间的多起源,这正是我想做的事情。但是我需要为公共交通和驾驶(对于通勤时间少于一小时的地方)都这样做,我认为由于公共交通很棘手(基于您靠近的车站),也许热图是比等值线更好的选择。