【问题标题】:How do I select the subset of my lat/lon data that is highway travel using R?如何使用 R 选择公路旅行的纬度/经度数据子集?
【发布时间】:2014-04-23 05:28:24
【问题描述】:

我有一些由带时间戳的纬度/经度对组成的数据,我在下面使用 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 密钥来运行上述内容。

【问题讨论】:

  • 似乎在高速公路上的反向地理编码点经常给我附近的道路,因此反向地理编码所有点并按高速公路过滤的策略效果不太好。
  • 你能做一个已知高速公路的白名单并用它来过滤吗?也许您收到了每个坐标的多个条目?

标签: r google-maps geocoding


【解决方案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)

【讨论】:

  • 这不是一个完整的答案,因为我仍然需要弄清楚如何过滤我的数据以仅包含那些在道路坐标一定距离内的点(我的精度约为 50m数据),但现在我看到它在概念上是可以完成的。
  • @WilliamGunn 感谢您的评论。您需要将数据与道路数据合并,并查看过滤后剩余的点数。 dplyr 提供了几种合并方式。你可能想试一试。或者,如果您可以上传示例数据,我很乐意尝试看看会发生什么。
  • 合并是一个聪明的主意,但它只会处理完全匹配,而不是道路一定距离内的匹配,对吗?
  • @WilliamGunn 是的,这就是挑战。我认为,如果您可以生成涵盖此 50 米精度范围的潜在 lon 和 lat 值,那么您就有很好的机会。这就像“接近合并”。这对我来说就像一个赏金问题。
  • 好的,如果我试图从道路数据中创建一个大的经纬度矩阵的尝试不起作用,我可能会重新发布。我想我可以从道路数据的末端截断一两个数字,以使其不那么精确,并且可能接近我正在寻找的数据。
猜你喜欢
  • 2011-10-18
  • 1970-01-01
  • 2021-03-02
  • 2019-08-01
  • 2014-12-19
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 2015-01-15
相关资源
最近更新 更多