如何使用R选择公路旅行的纬度/经度数据的子集?

时间:2014-04-23 05:28:24

标签: r google-maps geocoding

我有一些数据由时间标记的lat / lon对组成,我使用ggmap在下面绘制了一个子集。如果我只想选择沿着高速公路行驶的数据,你可以在地图上看到 - 在绿色山脉和灰色平坦区域之间运行的280-NW-SE& 101切入灰色平坦区域的中间(红色是密集的) - 我如何只选择那些数据?

A plot of some time stamped position data

我最终想要实现的是一个仅包含高速公路/州际旅行的数据框。我已经看过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密钥来运行上述内容。

1 个答案:

答案 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)

enter image description here