0
votes

Erreur TMAP SF: les arguments impliquent un nombre différent de lignes lors de la visualisation de la carte

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 xxx

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 "?

merci !!


3 commentaires

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 , lequel je crois que vos données contenant spovreat . 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 () . 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é.


3 Réponses :


0
votes

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 


0 commentaires

0
votes

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 xxx

où p est le calque en question . J'espère que cela vous aidera.


0 commentaires

0
votes

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 à: xxx


0 commentaires