我正在尝试从诺基亚这里的Enterprise下载反向流等值线(https://developer.here.com/rest-apis/documentation/enterprise-routing/topics/resource-reverse-flow.html)的坐标。
我能够运行这个查询,并获得一个长长的latitude+longitude列表,但是当我试图创建和绘制一个SpatialPolygon时,我发现这些点的顺序似乎是随机的。图如下所示:http://i.stack.imgur.com/rVxql.png
my.coord.pairs <- points.from.nokia.here.api
pol <- spChFIDs(block[1,], paste("newid", 3324234, sep = ""))
pol@polygons[[1]]@Polygons[[1]]@coords <- matrix(my.coord.pairs, nrow = length(my.coord.pairs)/2, ncol = 2, byrow = TRUE)
ggplot(pol, aes(long, lat, group = group)) +
theme(panel.background = element_blank()) +
geom_polygon(colour = "black", size = 1) + coord_equal() +
labs(x = "Easting", y = "Northing", fill = "Population") +
scale_fill_manual("Test", values = c(alpha("Red", 0.4), "white"), labels = c("a", "b"))P.S.:“块”是我从美国人口普查档案中得到的一个多边形。
P.S.2:我知道这里存在geocodeHERE R软件包,但它仍然很不成熟,不提供等值线和反向流计算。
发布于 2015-09-16 21:04:31
谢谢斯科特张伯伦,我同意你的意见,我的问题没有很好地表达出来。
答案是,我对反向流资源的理解是错误的。它不返回像计算等值线资源那样的多边形。此外,它现在是API的遗留资源。
检索我想要的东西的正确方法--表示所有地方的多边形,你可以从那里开始开车,在给定的旅行时间或旅行距离内到达指定的目的地--使用计算等值线资源,使用目的参数,而不是 start 参数。
计算等值线资源的双重功能(目的/开始)在API文档中有些不被注意,不过它的工作原理是:https://developer.here.com/rest-apis/documentation/routing/topics/resource-calculate-isoline.html#resource-calculate-isoline。
下面是我的代码,它向计算等值线资源发出请求,然后解压缩返回的数据以获取多边形(即构成多边形的点的列表)。请注意,该代码需要一个应用程序ID和应用程序代码,这是您在创建这里的API帐户时得到的。
# These variables below are just to compose the example code.
latitude <- 34.9859619
longitude <- -78.5900116
range <- 1800 # 30 minutes, in seconds
resolution <- 5
# Now comes the real code
response_parsed <- RJSONIO::fromJSON(RCurl::getURL(paste0("http://isoline.route.cit.api.here.com/routing/7.2/calculateisoline.json",
"?app_id=", App_id, "&app_code=", App_code, "&range=", range, "&rangetype=time", "&destination=geo!", latitude, ",",
longitude, "&mode=fastest;car;traffic:enabled")))
if(length(response_parsed) == 0)
stop('Error in JSON request.')
polygon <- data.frame(long=numeric, lat=numeric)
# The points (latitude+longitude) come together as characters separated by a comma. We need to split them.
for(rsh in response_parsed$response$isoline[[1]]$component[[1]]$shape) {
split <- strsplit(rsh, ",")[[1]]
polygon <- rbind(polygon, data.frame(long=as.numeric(split[[2]]), lat=as.numeric(split[[1]])))
}
# Now the polygon data frame contains all points that form the polygon returned by Calculate Isoline.https://stackoverflow.com/questions/32468872
复制相似问题