J'essaie de créer une carte de tous les districts scolaires de chaque État. Le code ci-dessous fonctionne pour tous les États, sauf en Floride, je reçois cette erreur:
Erreur dans data.frame (..., check.names = false):
Les arguments impliquent un nombre différent de lignes: 67, 121 la longueur de TM_Shape $ SHP et START_SHAPE sont à la fois 67. Est-ce que quelqu'un sait ce qui pourrait causer les "arguments impliquant un nombre différent de lignes: 67, 121 "? P> merci !! p> p>
3 Réponses :
Je n'ai pas pu obtenir ces formes à imprimer à l'aide de TMAP, mais j'ai pu supprimer manuellement les points de problèmes et les lignes de manière à ne pas déclencher des erreurs dans TMAP. La Floride et le Nebraska avaient à la fois des collections de géométrie. J'ai donc utilisé le script suivant pour supprimer toutes les lignes ou les points et modifier les collections de géométrie en plusieurs-concentrés. Je suis sûr qu'il y a une meilleure façon, et serait heureux de les entendre si d'autres ont une solution plus élégante. Cela me permet au moins de passer à autre chose!
### Create an st_is function that works for many types
st_is = function(x, type) UseMethod("st_is")
st_is.sf = function(x, type)
st_is(st_geometry(x), type)
st_is.sfc = function(x, type)
vapply(x, sf:::st_is.sfg, type, FUN.VALUE = logical(1))
st_is.sfg = function(x, type)
class(x)[2L] %in% type
####### Correct Florida #########
#### import my florida file
temp <- tempfile() ### create a temporary file to download zip file to
temp2 <- tempfile() ### create a temporary file to put unzipped files in
download.file("https://s3.amazonaws.com/data.edbuild.org/public/Processed+Data/SD+shapes/2018/shapefile_1718.zip", temp) # downloading the data into the tempfile
unzip(zipfile = temp, exdir = temp2) # unzipping the temp file and putting unzipped data in temp2
filename <- list.files(temp2, full.names = TRUE) # getting the filename of the downloaded data
shp_file <- filename %>%
subset(grepl("*.shp$", filename)) ## selecting only the .shp file to read in
florida <- sf::st_read(shp_file) %>% ## reading in the downloaded data
filter(State == "Florida")
#### extract polygon shapes from any geometry collection
solution <- for (i in florida) {
for(j in seq_along(i)) {
if (class(i[[j]]) != "character" & class(i[[j]]) != "double" & class(i[[j]]) != "numeric") {
if (st_is.sf(i[[j]], c("GEOMETRYCOLLECTION"))) {
i[[j]] <- st_collection_extract(i[[j]], type = c("POLYGON"))
}
else {
next
}
}
else {
next
}
}
}
florida_clean <- florida
st_geometry(florida_clean) <- NULL #### remove geometry from original florida
sfc_geo <- sf::st_sfc(i) #### define i as an sfc
florida_clean$geometry <- sfc_geo #### attach i to florida
florida_clean <- sf::st_set_geometry( florida_clean, sfc_geo ) ### set florida's geometry as i, with the points and lines removed
Je viens d'avoir un problème similaire et j'ai réussi à y remédier à l'astuce expliquée ici https://www.r-spial.org/r/ 2017/03/19 / invalide.html
Nommerez un tampon de 0,0 sur les formes invalides p> où p est le calque en question . J'espère que cela vous aidera. P> p>
J'ai eu un problème similaire relatif à la géométryrecteur mélangé avec d'autres types de géométrie (dans mon cas, multiolygons), produisant la même erreur RE: un nombre différent de lignes. En déballant les géométrycollections sur des polygones, puis jetant sur Multiplolygon, j'ai reçu un fichier spatial uniforme comprenant uniquement des multiplocolygones sans laisser tomber les fonctions contenues dans les géométrysolections et sans l'erreur TMAP. Quelque chose de ressemblant à:
Bienvenue dans le débordement de pile. Lorsque vous posez des questions, vous souhaitez fournir toutes les données avec votre code. En ce moment, vous manquez
Shape.Clean Code>, lequel je crois que vos données contenantspovreat code>. Veuillez fournir ces données. Sinon, personne ne peut reproduire votre situation et penser à vous aider.La géométrie de l'état_shape est une géométrie invalide; Cela peut être corrigé par
lwgeom :: st_make_valid () code>. Toutefois: le fichier téléchargé (qui est 28 Mo pour quiconque tente d'une connexion faible) ne contient pas de champ "STPOVRATE".J'ai édité ma question pour ajouter des excuses STPOVRATEM pour la supervision. Jindra, vous êtes correct que state_shape a une géométrie invalide mais malheureusement st_make_valid ne le répare pas. Je l'ai ajouté à l'exemple de clarté.