Estoy escribiendo un tutorial para estudiantes de MSc que utiliza QGIS. Una de las tareas requiere modificar los datos de atributos (consulte el borrador en PDF del tutorial aquí si está interesado).
La pregunta es cómo hacer que editen los datos de atributos. Sé que esta pregunta ha sido hecha antes, y la respuesta solía ser simple: solo use LibreOffice calc para modificarlo y luego guárdelo, asegurando que se mantenga el orden de las filas y los títulos de las columnas. He utilizado este enfoque antes con gran efecto.
Desafortunadamente, la solución ya no funciona: guardar el archivo .dbf en LibreOffice (5.4.2) o OpenOffice (3.2.1) Calc desordena los datos desde la perspectiva de QGIS (solo aparecen números enteros aleatorios en la tabla de atributos) y crea un archivo .dbt adicional en su lugar.
Entonces, para llegar a la pregunta: ¿cómo les digo a una clase de estudiantes de MSc que hagan esto la próxima semana? He considerado las siguientes opciones:
- Usar R en su lugar (genial para mí, pero aterrador para los estudiantes)
- Editar el archivo como .csv y luego unirlo basado en la marca de tiempo (bien, pero parece demasiado complejo y podría introducir más errores en la práctica de 2 horas)
- Usar un programa alternativo: he probado Gnumeric y Excel, ninguno de los cuales generó buenos resultados rápidamente.
Para ayudar a responder a esta pregunta, he creado un ejemplo replicable. Abra el archivo "points.shp" en QGIS, observe la tabla de atributos y luego cierre. Edite un par de celdas en la tabla de atributos "points.dbf" en LibreOffice, guarde. Vuelva a abrir "points.shp" en QGIS y observe la tabla de atributos desordenada. Los otros shapefiles en la carpeta .zip ya han sido corruptos por LibreOffice y OpenOffice para ilustrar cómo se ve el problema para mí.
En resumen, ¿cómo puedo resolver mejor este problema?
2 votos
Bienvenido al sitio, me gustaría decir que esta es una pregunta muy bien formulada y, con suerte, podemos encontrar algunas soluciones buenas. Supongo que un poco de python está fuera de discusión para estos estudiantes, ya que así es como abordaría este problema en primera instancia...
14 votos
Directamente editar la parte .DBF de un shapefile es demasiado peligroso para recomendar su uso rutinario y no debe ser utilizado por principiantes en absoluto, al menos no si a alguien le importan los datos. Sin embargo, hay una solución más fiable de naturaleza similar disponible: mantener un campo de identificador único en el shapefile. Nunca lo edites. En su lugar, guarda los atributos en una tabla relacionada (en cualquier formato que tu SIG pueda leer), unido mediante el mismo identificador. Ahora, en gran medida, puedes editar la tabla de atributos libremente sin perder la conexión entre la forma y el atributo, siempre y cuando protejas el campo de identificador.
1 votos
Las soluciones en Python estarían bien, siempre y cuando sean fáciles de implementar y entender ... En cuanto a mantener un número de identificación, esa es una buena opción (opción 2 en mi pregunta) y probablemente mi respuesta predeterminada. Sin embargo, esperaba una "solución rápida" más sencilla que no involucrara archivos adicionales (¡5 por archivo de forma ya son suficientes en mi opinión!)
3 votos
¿Qué quieres decir, 5 por shapefile? ¡Intenta con 9! :-) (Los archivos de índice pueden acumularse, dependiendo del SIG que se esté utilizando.) Una vez que necesitas más de un archivo relacionado para mantener un conjunto de datos, y los shapefiles requieren un mínimo de tres, realmente no es problema adicional incluir archivos adicionales. ¡Agrega también un archivo de metadatos mientras estás en eso! :-) Y una vez que hayas configurado la unión, ¿no ocurre automáticamente? (No veo cómo la marca de tiempo podría usarse para la unión, sin embargo. Eso se usaría en su lugar para un sistema de control de versiones.)
0 votos
Gracias whuber - no hay nada malo en tener muchos archivos, solo pensé que podría haber una solución de "unión" no relacionada con mmqgis (¿te refieres a esta, verdad?). Pero sí, las uniones resuelven el problema. Para ser específico, la razón por la que utilicé la marca de tiempo como Atributo de Capa de Unión en mis archivos de ejemplo fue porque parece ser la única que es realmente única. Las demás son "amenity", "user", etc., que no son únicas. Entonces supongo que la pregunta se convierte en "¿cuál es la mejor manera de crear una variable identificadora única para mis capas"? Disculpas si esto ya ha sido contestado, y muchas gracias por el comentario.
3 votos
Si tienes alguna inclinación para introducirlos a las bases de datos, spatiaLite tiene una interfaz gráfica para la edición de campos y herramientas de línea de comandos para los datos de OSM. Luego podrías involucrar un poco de SQL y tus estudiantes estarían, argumentablemente, muy avanzados respecto a la curva.
0 votos
De acuerdo, las bases de datos geográficas son el camino a seguir. Es una única sesión de 3 horas que introduce programas y datos de OS a personas capacitadas en ArcMap y acostumbradas a los shapefiles, por lo que quieren seguir con lo que conocen por ahora.