У Zillow есть набор шейп-файлов для разных районов крупных городов США. Я хотел проверить, присутствовали ли определенные здания в определенных районах, используя R:
library(rgeos)
library(sp)
library(rgdal)
df <- data.frame(Latitude =c(47.591351, 47.62212,47.595152),
Longitude = c(-122.332271,-122.353985,-122.331639),
names = c("Safeco Field", "Key Arena", "Century Link"))
coordinates(df) <- ~ Latitude + Longitude
wa.map <- readOGR("ZillowNeighborhoods-WA.shp", layer="ZillowNeighborhoods-WA")
sodo <- wa.map[wa.map$CITY == "Seattle" & wa.map$NAME == "Industrial District", ]
Я могу строить без проблем
plot(sodo)
points(df$Latitude ~ df$Longitude, col = "red", cex = 1)
Я сопоставляю proj4
строку из шейп-файла с моим data.frame
CRSobj <- CRS("+proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0 ")
df@proj4string <- CRSobj
over(df, sodo)
Это просто дает мне кучу NA
ценностей. Я пробовал этот ответ
spp <- SpatialPoints(df)
spp@proj4string <- CRSobj
over(spp, sodo)
но все равно получают только NA
значения. Есть идеи, что еще я должен попробовать?
Я использовал подобный подход к принятому ответу в этом посте, но никогда не был удовлетворен им, поэтому я искал альтернативы и нашел библиотеку sf .
И используя эту библиотеку, вы можете написать такой код:
Выход:
Я разместил этот код в другом посте, который был похож на этот вопрос, здесь: Определить точку, содержащую многоугольник, с пакетом R sf
источник