2017-09-05 2 views
2

Je suis en train d'obtenir les coordonnées d'un ensemble de points définissant une grille au sein un polygone (que j'ai un shapefile pour). Il semblait que la chose la plus simple à faire serait de créer une grille de points, puis de filtrer ces points seulement à ceux du polygone. Je regardais là à https://gis.stackexchange.com/questions/133625/checking-if-points-fall-within-polygon-shapefile et Convert a shapefile from polygons to points?, et en fonction des réponses que j'ai essayé ceci:Trouver les coordonnées des points de la grille dans les polygones

library(rgdal) 
city_bdry <- readOGR("Boundaries - City", 
        "geo_export_32ded882-2eab-4eaa-b9da-a18889600a40") 
res <- 0.01 
bb <- bbox(city_bdry) 
gt <- GridTopology(cellcentre.offset = bb[,1], cellsize = c(res, res), 
        cells.dim = c(diff(bb[,1]), diff(bb[2,]))/res + 1) 
pts <- SpatialPoints(gt, proj4string = CRS(proj4string(city_bdry))) 
ov <- over(pts, city_bdry) 

Le résultat, cependant, ne comprend pas les coordonnées réelles des points qui se chevauchent le polygone, il est donc inutile de me. Comment puis-je obtenir cette information à inclure dans la base de données? Ou, y a-t-il une façon plus simple de faire ce que j'essaie de faire?

Le shapefile J'utilise peut être téléchargé à partir https://data.cityofchicago.org/Facilities-Geographic-Boundaries/Boundaries-City/ewy2-6yfk

+1

Utilisez 'splancs :: inout()'. Voir la dernière réponse sur ce sujet: https://stackoverflow.com/questions/43436466/create-grid-in-r-for-kriging-in-gstat/45948442#45948442 J'ai déjà traité ce problème, et 'inout()' est la solution la plus simple que j'ai trouvée. –

+1

@RichPauloo Cela a résolu mon problème, merci. Si vous en faites une réponse, je la marquerai comme acceptée. – Empiromancer

+0

Je suis content que ça a marché! C'est une tâche tellement courante avec les données géospatiales, et c'est un exemple où une réponse n'était pas aussi facile à trouver en ligne que je le pensais. Extraire le contour et ensuite utiliser inout() est un processus en deux étapes, et je me demande si quelqu'un (peut-être sur GIS SE) a une solution plus simple d'une ligne dans l'un des paquets spatiaux comme sp. N'importe qui? –

Répondre

2

Si je vous ai bien, vous pouvez essayer

library(rgdal) 
download.file("https://data.cityofchicago.org/api/geospatial/ewy2-6yfk?method=export&format=Shapefile", tf<-tempfile(fileext = ".zip"), mode="wb") 
unzip(tf, exdir=dir<-file.path(tempdir(), "Boundaries - City")) 
city_bdry <- readOGR(dir, tools::file_path_sans_ext((list.files(dir)[1]))) 
res <- 0.01 
bb <- bbox(city_bdry) 
gt <- GridTopology(cellcentre.offset = bb[,1], cellsize = c(res, res), 
        cells.dim = c(diff(bb[,1]), diff(bb[2,]))/res + 1) 
pts <- SpatialPoints(gt, proj4string = CRS(proj4string(city_bdry))) 

ov <- sp::over(pts, as(city_bdry, "SpatialPolygons")) 
pts_over <- pts[!is.na(ov)] 

plot(city_bdry) 
points(pts_over) 
coordinates(pts_over) 
+0

Est-ce qu'il n'y a pas de réorganisation des points faits par 'over', alors? – Empiromancer

+0

@Empiromancer Hm quel point est réorganisé? Je suppose que si l'ordre a été changé, 'plot (city_bdry); points (pts [! Is.na (ov)])' et 'plot (city_bdry); points (pts [is.na (ov)])' ne serait pas travail. – lukeA

+0

Je ne sais pas avec certitude qu'il réorganise quelque chose, il semble juste que l'ordre soit préservé et je me demande si ce comportement est garanti par les fonctions impliquées. – Empiromancer

0

Vous peut également atteindre cela en sous-sélectionnant simplement les données avec [ comme yourPoints[yourPolygons, ]:

library(raster) 
bra <- getData(country = "BRA", level = 1) 

pts <- makegrid(bra, 100) 
pts <- SpatialPoints(pts, proj4string = CRS(proj4string(bra))) 

coordinates(pts[bra, ])