我正在使用gmapsdistance
R 中的包。我有我的 API 密钥,并且我熟悉包中的功能。
但是,我想解决一个相反的问题。我想输入一个纬度/经度,并绘制一个可以在 3 小时或更短时间内到达的所有点的区域,而不是仅仅找到 lat/longs 之间的Time
、Distance
和lat/longs 的向量。Status
然后我想在谷歌地图上画这个。首先,最好使用佛罗里达州马里马尔:25.9840,-80.2821。
有没有人有过这类问题的经验?
我正在使用gmapsdistance
R 中的包。我有我的 API 密钥,并且我熟悉包中的功能。
但是,我想解决一个相反的问题。我想输入一个纬度/经度,并绘制一个可以在 3 小时或更短时间内到达的所有点的区域,而不是仅仅找到 lat/longs 之间的Time
、Distance
和lat/longs 的向量。Status
然后我想在谷歌地图上画这个。首先,最好使用佛罗里达州马里马尔:25.9840,-80.2821。
有没有人有过这类问题的经验?
正如评论中所建议的那样,您可以注册像Travel Time Platform(我在本例中使用的)这样的服务,并使用他们的 API 来获取给定起点的可能目的地。
然后你可以使用谷歌地图(在我的 googleway 包中)在地图上绘制它
appId <- "TravelTime_APP_ID"
apiKey <- "TravelTime_API_KEY"
mapKey <- "GOOGLE_MAPS_API_KEY"
library(httr)
library(googleway)
library(jsonlite)
location <- c(25.9840, -80.2821)
driveTime <- 2 * 60 * 60
## London example
## location <- c(51.507609, -0.128315)
## sign up to http://www.traveltimeplatform.com/ and get an API key
## and use their 'Time Map' API
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" : ', driveTime, ',
"departure_time" : "2017-05-03T08:00: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")
如果您想在传单中渲染并使用免费的等时线服务,这是一个非常好的选择。不过有2小时车程的限制。
devtools::install_github("tarakc02/rmapzen")
library(rmapzen)
Sys.setenv(MAPZEN_KEY = "") # get for free at https://mapzen.com/
marimar <- mz_geocode("Marimar, FL")
isos <- mz_isochrone(
marimar,
costing_model = mz_costing$auto(),
contours = mz_contours(c(60 * 2)) # 2 hours
)
library(leaflet)
leaflet(as_sp(isos)) %>%
addProviderTiles("CartoDB.DarkMatter") %>%
addPolygons(color = ~paste0("#", color), weight = 1)