Más

¿Cómo eliminar una columna / campo en PyQGIS?

¿Cómo eliminar una columna / campo en PyQGIS?


¿Cómo eliminar o eliminar campos de columna en un shapefile usando Python?


Si no obtiene ninguna alegría con QGSVectorLayer :: deleteAttribute como dicen los documentos: eliminar un campo de atributo (pero no lo confirma) eche un vistazo al proveedor de datos. Como QGIS se ocupa de muchos tipos de funciones con diferentes controladores, sospecho que depende del controlador si se puede eliminar o no un campo.

Aquí hay un código que descubrí que puede ayudar:

fields = vlayer.dataProvider (). fields () count = 0 for name, field in fields.iteritems (): if field.name () == fieldName: return count count + = 1

Para obtener el índice del campo a partir del nombre. En este caso no estoy usando.superior()pero lo recomendaría.

Después de obtener el índice del campo, (podría) eliminarlo utilizando el proveedor de datos.

fList = list () fList.append (count) vlayer.dataProvider (). deleteAttributes (fList)

Está esperando una lista, por lo que el número entero debe incluirse en una lista. No he usado este método; normalmente usaría ArcMap para eliminar el campo.

Como señaló RogerHuang, es posible que los campos de la capa deban actualizarse ahora que se han cambiado para actualizar la definición de los campos de las capas:

vlayer.updateFields ()

Hay varios métodos, pero mencionaré los que uso normalmente, ambos usando el Consola de Python.


Para archivos de forma ÚNICOS:

  • Método 1 - Usando un método que utiliza el algoritmo QGIS - Eliminar columna:

    output_0 = processing.runalg ('qgis: deletecolumn', myshapefile.shp, "myFirstField", None) output_1 = processing.runalg ('qgis: deletecolumn', output_0 ['OUTPUT'], "mySecondField", None) output_2 = procesamiento .runalg ('qgis: deletecolumn', output_1 ['OUTOUT'], "myThirdField", myoutput.shp)
  • Método 2: eliminar los campos directamente seleccionando la capa del Capas ventana (Tabla de contenido) y usando el siguiente código:

    layer = qgis.utils.iface.activeLayer () # Establece la capa seleccionada como la capa activa res = layer.dataProvider (). deleteAttributes ([0]) # El [0] representa el primer campo, por lo que [1] es el Segundo campo, etc. Para eliminar varios campos, use la coma para separarlos. P.ej. [0, 2, 4] layer.updateFields () # Actualiza la capa con los cambios

Para MÚLTIPLES shapefiles:

  • A continuación del Método 1, puede usar el siguiente script que se probó con 2 carpetas en el escritorio: "Pruebas" (que contenía los shapefiles) y "Resultados" (que contendrá los shapefiles de salida del script):

    import Processing, os, glob from os.path import expanduser home = expanduser ("~") result_path = home + " Desktop  Results " os.chdir (home + " Desktop  Testing ") para fname en glob.glob ("*. shp"): output_0 = processing.runalg ('qgis: deletecolumn', fname, "myFirstField", None) output_1 = processing.runalg ('qgis: deletecolumn', output_0 ['SALIDA'] "mySecondField", None) output_2 = processing.runalg ('qgis: deletecolumn', output_1 ['OUTPUT'], "myThirdField", result_path + fname) print "¡Todo listo!"
  • Siguiendo con el Método 2, puede usar el siguiente código si tiene múltiples shapefiles cargados en su Capas ventana sin tener que seleccionarlos individualmente.

    para la capa en QgsMapLayerRegistry.instance (). mapLayers (). values ​​(): res = layer.dataProvider (). deleteAttributes ([0]) layer.updateFields ()

¡Espero que esto ayude!


Para crear una instancia de capa vectorial, especifique el identificador de la fuente de datos de la capa, el nombre de la capa y el nombre del proveedor:

El identificador de la fuente de datos es una cadena y es específico de cada proveedor de datos vectoriales. El nombre de la capa se usa en el widget de lista de capas. Es importante comprobar si la capa se ha cargado correctamente. De lo contrario, se devuelve una instancia de capa no válida.

Para una capa vectorial de geopaquete:

La forma más rápida de abrir y mostrar una capa vectorial en QGIS es el método addVectorLayer () de QgisInterface:

Esto crea una nueva capa y la agrega al proyecto actual de QGIS (haciendo que aparezca en la lista de capas) en un solo paso. La función devuelve la instancia de la capa o None si la capa no se pudo cargar.

La siguiente lista muestra cómo acceder a varias fuentes de datos utilizando proveedores de datos vectoriales:

Biblioteca OGR (Shapefile y muchos otros formatos de archivo): la fuente de datos es la ruta al archivo:

para dxf (tenga en cuenta las opciones internas en la fuente de datos uri):

Base de datos PostGIS: la fuente de datos es una cadena con toda la información necesaria para crear una conexión a la base de datos PostgreSQL.

La clase QgsDataSourceUri puede generar esta cadena por usted. Tenga en cuenta que QGIS debe compilarse con el soporte de Postgres; de lo contrario, este proveedor no está disponible:

El argumento False pasado a uri.uri (False) evita la expansión de los parámetros de configuración de autenticación, si no está utilizando ninguna configuración de autenticación, este argumento no hace ninguna diferencia.

CSV u otros archivos de texto delimitados: para abrir un archivo con un punto y coma como delimitador, con el campo "x" para la coordenada X y el campo "y" para la coordenada Y, debe usar algo como esto:

La cadena del proveedor está estructurada como una URL, por lo que la ruta debe tener el prefijo file: //. También permite geometrías con formato WKT (texto conocido) como alternativa a los campos xey, y permite especificar el sistema de referencia de coordenadas. Por ejemplo:

Archivos GPX: el proveedor de datos “gpx” lee tracks, rutas y waypoints de archivos gpx. Para abrir un archivo, el tipo (track / ruta / waypoint) debe especificarse como parte de la URL:

Base de datos SpatiaLite: de manera similar a las bases de datos PostGIS, QgsDataSourceUri se puede utilizar para generar un identificador de fuente de datos:

Geometrías basadas en MySQL WKB, a través de OGR - la fuente de datos es la cadena de conexión a la tabla:

Conexión WFS :. la conexión se define con un URI y usando el proveedor WFS:

El uri se puede crear utilizando la biblioteca urllib estándar:

Puede cambiar la fuente de datos de una capa existente llamando a setDataSource () en una instancia de QgsVectorLayer, como en el siguiente ejemplo:


¿Cómo eliminar una columna / campo en PyQGIS? - Sistemas de Información Geográfica

Dejé que mi amor por los nuevos y brillantes complementos de QGIS se apoderara de mí, y me resulta difícil recordar en qué menú / submenú / panel se encuentra un complemento determinado. Estoy usando más de 100 ahora, y voy en una purga generalmente significa que encuentro otro uso para el complemento que acabo de eliminar.

Así que pensé en intentar escribir un complemento para obtener esa información y poder buscarla. Cosas que el administrador de complementos sabe, además (lo más importante) cómo ubicarlo en la GUI.

El procesamiento es excelente para encontrar gran parte de la funcionalidad qgis incorporada, pero no encuentra complementos que no fueron escritos para hacer uso de su marco.

Al ver la respuesta a la lista de complementos instalados a través de pyqgis, pude obtener una lista de nombres de complementos.

Parece haber una clase, QgsPluginRegistry, que parece prometedora en el código C ++, pero no puedo encontrar un archivo de definición SIP para eso, así que no creo que esta clase esté expuesta a Python.

Usando un poco de rastreo a través de la fuente de QGIS, pude escribir un breve fragmento para rastrear los archivos de configuración de los complementos

Esto me da acceso a la misma información que el administrador de complementos de qgis. registros de cambios, autoría, categoría, etc.

Lo que no me dice es dónde, exactamente, está en la estructura del menú. ¿Se puede obtener esto de pyqgis de una manera limpia?

O para encontrar esto, ¿necesito comenzar a rastrear las clases de GUI de Qt o escribir analizadores de Python (factible, pero parece un poco exagerado?) El valor de la categoría (vector, ráster, etc.) ayuda a reducir la búsqueda, pero hay muchos de complementos (por ejemplo, MMqgis) que crean sus propios menús.

Solo una suposición desinformada, pero dado que los complementos solo se agregan a los menús / barras de herramientas cuando se cargan, es decir, parte de su proceso de instanciación de classFactory, y eliminado de la misma manera, probablemente no hay necesidad de tener ningún registro de los menús en los que se encuentran los complementos. Tendría que mirar las consultas de nivel inferior de las opciones completas del menú de QGIS, no solo los complementos. No tengo idea de si eso es posible.


1 respuesta 1

El simple hecho de saber el número de vértices y sus grados no es suficiente información para saber el número de ciclos hamiltonianos, o incluso si la gráfica tiene uno. El único gráfico de este tipo para $ n = 2 $, y los 16 ejemplos para $ n = 3 $, resultan ser todos hamiltonianos, pero para $ n = 4 $, siete de los 113 314 233 808 gráficos 6-regulares conectados en 16 los vértices no son hamiltonianos en absoluto *.

Entre los gráficos que son hamiltonianos, el número de ciclos distintos varía:

Para $ n = 2 $, la gráfica es de 4 ciclos, con un solo ciclo hamiltoniano.

Para $ n = 3 $, el número de ciclos hamiltonianos está entre 36 y 64 †.

Para $ n = 4 $, el número está entre 0 y al menos 1011 713 ‡.

Entonces, obviamente, ninguna fórmula que dependa solo de $ n $ puede decirle el número de ciclos hamiltonianos.

Sin embargo, hay es una fórmula para el número de ciclos hamiltonianos en cualquier gráfico. Sea $ N = n ^ 2 $ el número de vértices, $ bar$ ser $ <1, puntos, N > $, $ binom < bar>$ ser los subconjuntos de $ bar$ de tamaño $ i $, $ A $ la matriz de adyacencia del gráfico y $ A_S $ la submatriz con sus índices de fila y columna en el conjunto $ S $ (una submatriz principal).

Entonces el número de ciclos hamiltonianos es $ c_N = frac <1> <2N> sum_^ N (-1) ^ suma_>> nombre de operador(A_S ^ N) $ donde $ A_S ^ N $ significa la submatriz $ A_S $ a la $ N $ ésima potencia §.

Por supuesto, cada ciclo hamiltoniano pasa por todos los vértices, por lo que decir que "comienzan y terminan en un vértice específico" no cambia nada: puede considerar que cualquiera de los ciclos comienza y termina en cualquier vértice que elija.

El conteo de ciclos hamiltonianos que incluyen una arista desde un vértice específico $ u $ a un vértice específico $ v $ se puede lograr modificando la matriz de adyacencia utilizada en la fórmula. Esencialmente, lo tratamos como un gráfico dirigido, con cada borde que aparece en ambas direcciones (por lo que tenemos 1 tanto en $ a_$ y $ a_$, lo mismo que la matriz de adyacencia no dirigida), excepto que el único borde externo de $ u $ va a $ v $, y el único borde interno de $ v $ proviene de $ u $.

Esto equivale a cambiar cada entrada de $ A $ en la fila por $ u $ y la columna de $ v $ a 0, excepto en su intersección y también cambiando $ a_$ a 0. Luego use la misma fórmula, pero sin el factor $ frac <1> <2> $.

Para dar un ejemplo concreto, considere el gráfico de producto $ K_3 square K_3 $, también conocido como el gráfico de torre de $ 3 times3 $:

Esto tiene una matriz de adyacencia $ begin 0 & amp 1 & amp 1 & amp 1 & amp 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 & amp 0 & amp 1 & amp 0 1 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 1 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 1 & amp 1 & amp 0 & amp 0 0 & amp 1 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 0 & amp 0 & amp 1 & amp 1 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 1 0 & amp 1 & amp 0 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 & amp 1 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 1 & amp 1 & amp 1 & amp 0 end $ Conectando esto a la fórmula para $ c_N $, encontramos que tiene 48 ciclos hamiltonianos.

Si queremos requerir una arista desde el primer al segundo vértice, modificamos la matriz de adyacencia a: $ begin 0 & amp 1 & amp 0 & amp 0 & amp 0 & amp 0 & amp 0 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 & amp 0 & amp 1 & amp 0 1 & amp 0 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 1 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 1 & amp 1 & amp 0 & amp 0 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 0 & amp 0 & amp 1 & amp 1 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 0 & amp 1 & amp 1 0 & amp 0 & amp 0 & amp 0 & amp 1 & amp 0 & amp 1 & amp 0 & amp 1 0 & amp 0 & amp 1 & amp 0 & amp 0 & amp 1 & amp 1 & amp 1 & amp 0 end $ (Observe los cambios en la primera fila, la segunda columna y la entrada $ a_ <21> $.) Al poner esta matriz en la fórmula, encontramos que hay 24 ciclos hamiltonianos que incluyen esa arista.

Para calcular la fórmula, utilicé este fragmento de código Python:

La función toma la matriz de adyacencia como una matriz Numpy.

Notas

* Por ejemplo, tome una copia de $ K_8 $ (el gráfico completo en 8 vértices) con los bordes antípodas eliminados: esto es 6-regular. También se conoce como gráfico circulante $ C_8 ^ <1,2,3> $. Ahora elimine dos aristas más, dejando cuatro vértices con grado 5. Agregue una copia de $ K_7 $ con una arista eliminada: esto tiene 2 vértices de grado 5 y 5 vértices de grado 6. Finalmente agregue un nuevo vértice adyacente a los seis grados -5 vértices. Esto no es hamiltoniano.

Originalmente, dije que había "muchos" de estos gráficos no hamiltonianos, ya que se me ocurrió el ejemplo anterior con bastante rapidez. Comencé a sospechar de esto y verifiqué con genreg y las gtools nauty: resulta que solo hay 7, todas ellas variaciones de lo anterior. Los dos bordes adicionales eliminados de $ C_8 ^ <1,2,3> $ se pueden elegir de 3 formas no isomórficas o se pueden eliminar dos bordes adicionales de $ K_7 $, y solo un borde de $ C_8 ^ <1,2 , 3> $ o el lado de 8 vértices puede ser este tipo:

(que tiene dos vértices de grado 5 y seis vértices de grado 6), o uno de sus subgrafos eliminando un borde.

† Hay dieciséis gráficos 4-regulares en 9 vértices, y tienen 36, 40 (2 casos), 41, 43, 44 (3 casos), 46, 47, 48 (3 casos), 52, 55 o 64 distintos Ciclos hamiltonianos, según Mathematica.

‡ Hay 113 314 233 808 gráficas 6 regulares conectadas en 16 vértices. Demostramos anteriormente que algunos de ellos no tienen ciclos hamiltonianos.

Mathematica tiene 17 de estos gráficos en su base de datos GraphData, y sus números de ciclos hamiltonianos distintos son:

(235 832, 279 293, 350 392, 351 953, 278 864, 278 616, 1 011 713, 347 037, 503 168, 1 010 528, 1 009 920, 276 768, 273 808, 350 484, 284 112, 281 232, 276 816).


Reclamación (es

1. Un sistema de entretenimiento para automóvil para su uso en un automóvil, en el que el sistema de entretenimiento para automóvil está configurado para llevar a cabo un proceso implementado por computadora, utilizando instrucciones grabadas en una memoria no transitoria, que comprende:

recibir una señal de radio terrestre usando un primer receptor de radio, una señal de radio satelital usando un segundo receptor de radio y una señal de radio de Internet usando un tercer receptor de radio seleccionando al menos una parte de una señal de radio recibida para la salida de sincronización de los ajustes del sistema de entretenimiento del automóvil con un dispositivo electrónico y emitiendo la parte de la señal de radio recibida a los altavoces del sistema de entretenimiento según la configuración sincronizada.

2. El sistema de entretenimiento para automóvil de la reivindicación 1, en el que la señal de radio recibida comprende elementos de contenido de audio individuales y las instrucciones comprenden además determinar qué elementos de contenido de audio individuales emitir basándose al menos en parte en los ajustes sincronizados.

3. El sistema de entretenimiento para automóvil de la reivindicación 1, en el que las instrucciones comprenden además permitir que un usuario seleccione reproducir o controlar la reproducción del contenido de audio recibido, en el que el contenido de audio recibido se almacena en una estación virtual que el usuario puede seleccionar para escuchar mientras el automóvil es móvil y permite al usuario avanzar o retroceder el contenido de audio recibido.

4. El sistema de entretenimiento para automóvil de la reivindicación 1, que comprende además una interfaz gráfica de usuario que permite la interacción con el sistema de entretenimiento para automóvil.

5. El sistema de entretenimiento para automóvil de la reivindicación 1, en el que el dispositivo electrónico es un dispositivo móvil.

6. El sistema de entretenimiento para automóvil de la reivindicación 1, en el que el dispositivo electrónico es otro sistema de entretenimiento para automóvil.

7. El sistema de entretenimiento para automóvil de la reivindicación 1, que comprende además recibir una entrada del usuario para modificar la configuración del sistema de entretenimiento para el automóvil, comprendiendo la entrada del usuario un comando de voz.

8. El sistema de entretenimiento para automóvil de la reivindicación 1, que comprende además recibir la entrada del usuario para modificar la configuración del sistema de entretenimiento para el automóvil, comprendiendo la entrada del usuario la entrada por gestos.

9. Un sistema de entretenimiento para automóvil configurado para ser utilizado en un automóvil y que comprende:

un primer receptor de radio configurado para recibir señales de radio de difusión, un segundo receptor de radio configurado para recibir señales de radio por satélite y un tercer receptor de radio configurado para recibir señales de radio de Internet un controlador que tiene un esquema de selección programable para controlar funciones que incluyen señales de radio recibidas y partes de las mismas , y una salida de las señales de radio recibidas y partes de las mismas donde un usuario puede seleccionar al menos una parte de una señal de radio recibida para la salida, y donde el sistema de entretenimiento del automóvil está configurado además para sincronizar los ajustes del sistema de entretenimiento con los ajustes de un dispositivo electrónico y emite la parte de la señal de radio recibida a los altavoces del sistema de entretenimiento según la configuración sincronizada.

10. El sistema de entretenimiento para automóvil de la reivindicación 9, en el que la señal de radio recibida comprende elementos de contenido de audio individuales y las instrucciones comprenden además determinar qué elementos de contenido de audio individuales emitir basándose al menos en parte en los ajustes sincronizados.

11. El sistema de entretenimiento para automóvil de la reivindicación 9, configurado además para permitir que un usuario seleccione reproducir o controlar la reproducción del contenido de audio recibido, en el que el contenido de audio recibido se almacena en una estación virtual que el usuario puede seleccionar para escuchar mientras el automóvil es móvil y permite al usuario saltar hacia adelante o hacia atrás el contenido de audio recibido.

12. El sistema de entretenimiento para automóvil de la reivindicación 9, que comprende además una interfaz gráfica de usuario que permite la interacción con el sistema de entretenimiento para automóvil.

13. El sistema de entretenimiento para automóvil de la reivindicación 9, en el que el dispositivo electrónico es un dispositivo móvil.

14. El sistema de entretenimiento para automóvil de la reivindicación 9, en el que el dispositivo electrónico es otro sistema de entretenimiento para automóvil.

15. El sistema de entretenimiento para automóvil de la reivindicación 9, configurado además para recibir entrada del usuario para modificar los ajustes del sistema de entretenimiento para automóvil, comprendiendo la entrada del usuario un comando de voz.

16. El sistema de entretenimiento para automóvil de la reivindicación 9, configurado además para recibir la entrada del usuario para modificar los ajustes del sistema de entretenimiento para el automóvil, comprendiendo la entrada del usuario la entrada por gestos.

17. Un método para operar un sistema de entretenimiento para automóviles, que comprende:

recibir una señal de radio terrestre usando un primer receptor de radio, una señal de radio satelital usando un segundo receptor de radio y una señal de radio de Internet usando un tercer receptor de radio seleccionando al menos una parte de una señal de radio recibida para la salida de sincronización de los ajustes del sistema de entretenimiento del automóvil con un dispositivo electrónico y emitiendo la parte de la señal de radio recibida a los altavoces del sistema de entretenimiento según la configuración sincronizada.

18. El sistema de entretenimiento para automóvil de la reivindicación 17, en el que la señal de radio recibida comprende elementos de contenido de audio individuales y las instrucciones comprenden además determinar qué elementos de contenido de audio individuales se emitirán basándose al menos en parte en los ajustes sincronizados.

19. El sistema de entretenimiento para automóvil de la reivindicación 17, que comprende además permitir que un usuario seleccione reproducir o controlar la reproducción del contenido de audio recibido, en el que el contenido de audio recibido se almacena en una estación virtual que el usuario puede seleccionar para escuchar mientras el automóvil está en funcionamiento. móvil y permitir al usuario saltar hacia adelante o hacia atrás el contenido de audio recibido.

20. El sistema de entretenimiento para automóvil de la reivindicación 17, en el que el dispositivo electrónico es uno de entre un dispositivo móvil y otro sistema de entretenimiento para automóvil.

21. Un medio legible por computadora no transitorio que tiene instrucciones ejecutables por computadora almacenadas en el mismo para hacer que un sistema de entretenimiento para automóviles realice operaciones que comprenden:

recibir una señal de radio terrestre usando un primer receptor de radio, una señal de radio satelital usando un segundo receptor de radio y una señal de radio de Internet usando un tercer receptor de radio seleccionando al menos una parte de una señal de radio recibida para la salida de sincronización de los ajustes del sistema de entretenimiento del automóvil con un dispositivo electrónico y emitiendo la parte de la señal de radio recibida a los altavoces del sistema de entretenimiento según la configuración sincronizada.

22. El medio legible por ordenador no transitorio de la reivindicación 21, en el que la señal de radio recibida comprende elementos de contenido de audio individuales y las operaciones comprenden además determinar qué elementos de contenido de audio individuales emitir basándose al menos en parte en los ajustes sincronizados.

23. El medio legible por ordenador no transitorio de la reivindicación 21, en el que las operaciones comprenden además permitir que un usuario seleccione reproducir o controlar la reproducción del contenido de audio recibido, en el que el contenido de audio recibido se almacena en una estación virtual que el usuario puede seleccionar escuchar mientras el automóvil está en movimiento y permitir al usuario saltar hacia adelante o hacia atrás el contenido de audio recibido.

24. El medio legible por ordenador no transitorio de la reivindicación 21, que comprende además una interfaz gráfica de usuario que permite la interacción con el sistema de entretenimiento del automóvil.

25. El medio legible por ordenador no transitorio de la reivindicación 21, en el que el dispositivo electrónico es un dispositivo móvil u otro sistema de entretenimiento de automóvil.

26. El medio legible por ordenador no transitorio de la reivindicación 21, en el que las operaciones comprenden además recibir la entrada del usuario para modificar la configuración del sistema de entretenimiento del automóvil, comprendiendo la entrada del usuario un comando de voz o una entrada por gestos.