Я пытаюсь найти все станции внутри Манхэттена из набора данных 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))
, но я не могу получить, какие точки l ie внутри manhattan
. Я предполагаю, что хочу использовать st_intersection
или st_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
пакеты.)