我有一些数据由时间标记的lat / lon对组成,我使用ggmap在下面绘制了一个子集。如果我只想选择沿着高速公路行驶的数据,你可以在地图上看到 - 在绿色山脉和灰色平坦区域之间运行的280-NW-SE& 101切入灰色平坦区域的中间(红色是密集的) - 我如何只选择那些数据?
我最终想要实现的是一个仅包含高速公路/州际旅行的数据框。我已经看过this question,这是javascript中可能解决方案的简要草图,&建议使用Directions API返回任何给定点的最近道路。然后我可以过滤这些结果,但我想知道是否有人找到了更清洁的解决方案。
这里有一些示例数据(CSV)
以下是绘制上述内容的代码:
require(ggmap)
map<-get_googlemap(center="Palo Alto", zoom = 10)
ggmap(map) + geom_point(data = sample, aes(x = lon, y = lat),size = 3, color = "red")
您不需要API密钥来运行上述内容。
答案 0 :(得分:1)
我刚发现这篇文章并认为这是一个有趣的问题。我想下载您的示例数据文件。不幸的是,该链接不再起作用。因此,我无法尝试我脑海中的整个过程。但是,如果您仍尝试执行此任务,我相信以下内容可让您继续前进。
我最近注意到Natural Earth提供道路数据。也就是说,例如,你可以为美国的道路做好准备。如果您可以比较数据集中的lon / lat和道路数据的lon / lat,并确定数据点中的匹配项,则可以获得所需的数据。我关注的是您的数据点在多大程度上是准确的。如果lon / lat完全停留在您感兴趣的道路上,那么您一定会好的。但如果有一些边距,您可能需要考虑如何过滤数据。
我想留下的是道路数据和googlemap非常匹配的证据。只要我看到输出,道路数据就是可靠的。您可以使用道路数据对数据进行子集化。这是我的代码。
### Step 1: shapefile becomes SpatialLinesDataFrame.
foo <- readShapeLines("ne_10m_roads_north_america.shp")
### Step 2: If necessary, subset data before I use fortify().
### dplyr does not work with SpatialLinesDataFrame at this point.
CA <- foo %>%
subset(.,country == "United States" & state == "California")
### Step 3: I need to convert foo to data frame so that I can use the data
### with ggplot2.
ana <- fortify(CA)
### Step 4: Get a map using ggmap package
longitude <- c(-122.50, -121.85)
latitude <- c(37.15, 37.70)
map <- get_map(location = c(lon = mean(longitude), lat = mean(latitude)),
zoom = 12, source = "google",
maptype = "satellite")
ggmap(map) +
geom_path(aes(x = long, y = lat, group = group), data = ana)