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 contenant
spovreat 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é.