sf
包提供了一种处理地理要素的好方法,但是我找不到与poly.counts
功能从GISTools
包需要sp
对象。`poly.counts`的等价物用来计算落在多边形内的sf包中的纬度/长度对
poly.counts
从SpatialPointsDataFrame
秋天SpatialPolygonsDataFrame
的多边形内计算的点的数量,并且可以如下使用:
数据
每个多边形我生成两个
## Libraries
library("GISTools")
library("tidyverse")
library("sf")
library("sp")
library("rgdal")
## Obtain shapefiles
download.file(url = "https://www2.census.gov/geo/tiger/TIGER2016/STATE/tl_2016_us_state.zip", destfile = "data-raw/states.zip")
unzip(zipfile = "data-raw/states.zip", exdir = "data-raw/states")
sf_us_states <- read_sf("data-raw/states")
## Our observations:
observations_tibble <- tribble(
~lat, ~long,
31.968599, -99.901813,
35.263266, -80.854385,
35.149534, -90.04898,
41.897547, -84.037166,
34.596759, -86.965563,
42.652579, -73.756232,
43.670406, -93.575858
)
计算点我的sp
物品:
sp_us_states <- as(sf_us_states, "Spatial")
observations_spdf <- observations_tibble %>%
select(long, lat) %>% # SPDF want long, lat pairs
SpatialPointsDataFrame(coords = .,
data = .,
proj4string = [email protected])
现在我可以用poly.counts
points_in_states <-
poly.counts(pts = observations_spdf, polys = sp_us_states)
一下添加到sp
对象:
sp_us_states$points.in.state <- points_in_states
现在我已经完成了我会转换回sf
对象,并可以将其想象为:
library("leaflet")
updated_sf <- st_as_sf(sp_us_states)
updated_sf %>%
filter(points.in.state > 0) %>%
leaflet() %>%
addPolygons() %>%
addCircleMarkers(
data = observations_tibble
)
问题
我可以在sf
和sp
对象之间进行繁琐的转换吗?
看看'?sf :: geos'的各种选项 – SymbolixAU