Zillow a un ensemble de fichiers de formes pour différents quartiers des grandes villes américaines. Je voulais vérifier si certains bâtiments étaient présents dans certains quartiers en utilisant 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", ]
Je peux tracer sans aucun problème
plot(sodo)
points(df$Latitude ~ df$Longitude, col = "red", cex = 1)
Je fais correspondre la proj4
chaîne du fichier de formes à mon data.frame
CRSobj <- CRS("+proj=longlat +datum=NAD83 +no_defs +ellps=GRS80 +towgs84=0,0,0 ")
df@proj4string <- CRSobj
over(df, sodo)
Cela me donne juste un tas de NA
valeurs. J'ai essayé cette réponse
spp <- SpatialPoints(df)
spp@proj4string <- CRSobj
over(spp, sodo)
mais n'obtiennent toujours que des NA
valeurs. Des idées quoi d'autre que je devrais essayer?
J'ai utilisé une approche similaire à la réponse acceptée dans ce post, mais je n'en ai jamais été vraiment satisfaite, j'ai donc cherché des alternatives et trouvé la bibliothèque sf .
Et en utilisant cette bibliothèque, vous pouvez ensuite écrire du code comme ceci:
Production:
J'ai posté ce code sur un autre post qui était une question similaire, ici: Identifier le polygone contenant le point avec le package R sf
la source