r - 如何过滤 OSM 形状内的所有点?
问题描述
我正在尝试从 CitiBikes 数据集中找到曼哈顿内的所有车站。我可以通过 OpenStreetMap 得到曼哈顿的形状
q <- opq(bbox="Manhattan")
q <- add_osm_feature(q, key="name", value="Manhattan")
q <- add_osm_feature(q, key="boundary", value="administrative")
administrative <- osmdata_sf (q)
manhattan = administrative$osm_multipolygons[1]
plot(manhattan, main="Manhattan borough")
我可以通过以下方式将数据转换为简单几何点
cbike <- read.csv(file="201903-citibike-tripdata.csv", stringsAsFactors=F,
sep=",", na.strings=c("NA","NaN", "NULL"))
cbike$start.sf <- cbike %>%
select(lat=start.station.latitude, lon=start.station.longitude) %>%
st_as_sf(coords=c("lon", "lat"), crs=st_crs(manhattan))
但我不知道里面有哪些点manhattan
。我假设我想使用st_intersection
orst_intersects
来获得一个布尔向量,但我对它的工作原理有点迷茫:任何谓词都是空的。
> inside = cbike$start.sf[1,1]
> inside
Simple feature collection with 1 feature and 0 fields
geometry type: POINT
dimension: XY
bbox: xmin: -74.00945 ymin: 40.71107 xmax: -74.00945 ymax: 40.71107
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
geometry
1 POINT (-74.00945 40.71107)
这是富尔顿街上的一个点,显然在曼哈顿内部。然而,st_intersects(inside, manhattan)
和st_within(inside, manhattan)
都是空的。(st_intersects(inside, inside)
两者st_intersects(manhattan, manhattan)
都是TRUE
,所以我认为不是点或多面体一般不能相交)
(这与osmdata
、sf
和dplyr
包一起使用。)
解决方案
如果您只想选择曼哈顿起点站,则可以仅从 bbox 的坐标中完成:
xmin <- as.numeric(sub("(.*),.*,.*,.*", "\\1", administrative[[1]]))
xmax <- as.numeric(sub(".*,.*,(.*),.*", "\\1", administrative[[1]]))
ymin <- as.numeric(sub(".*,.*,.*,(.*)", "\\1", administrative[[1]]))
ymax <- as.numeric(sub(".*,(.*),.*,.*", "\\1", administrative[[1]]))
cbike$start_sf <- cbike %>%
select(lat=`Start Station Latitude`, lon=`Start Station Longitude`) %>%
subset(., (lat>=xmin & lat<=xmax & lon<=ymin & lon>=ymax)) %>%
st_as_sf(coords=c("lon", "lat"), crs=st_crs(manhattan))
推荐阅读
- android - 如何通过 Android 管理 API 在 EMM 中为新配置的 Android 设备获取 DeviceId?
- tensorflow - how important is the loss difference between training and validation data at the beginning when training a neuronal network?
- node.js - Run another yarn/npm task within a package.json, without specifying yarn or npm
- python - 有人可以帮我从名为 Suncalc.org 的网站获取实时数据吗
- python-import - Instantiate a .Net class from IronPython without boilerplate
- .net - Is it possible to directly access Acrobat Pro's "Compare Files" tool from an external .NET app?
- msal - 带有 userTokenCache 的 ConfidentialClientApplicationBuilder
- perl - Why does Math::BigInt has wrong output?
- ruby-on-rails - Rails 6.0.2.1:Finder 结果未显示在视图中
- scala - Why I can't get value by using doReturn in Mockito