Cambio del origen de datos de la capa en QGIS

14

¿Existe una manera de obtener un archivo de forma en un archivo de capa en QGIS de manera similar a como lo hace en las propiedades de una capa de ArcGIS? (es decir, vaya a las propiedades de capa, la pestaña de fuente y luego simplemente presione el botón 'Establecer fuente de datos')

He estado en todas las propiedades de capa en QGIS y no veo esto en ninguna parte ...

Gracias, Mike

EDITAR: He recibido comentarios que explican que no puedes hacer esto con los shapefiles, pero si tuviera que cambiar el nombre de un shapefile y luego abrir un archivo de proyecto preexistente que contenga este shapefile como una capa, obtendré el diálogo 'Manejar capas incorrectas', que me permite navegar y volver a crear la capa en cualquier shapefile que desee. Me parece extraño que pueda encontrar recursos en ese escenario, pero no puede hacerlo manualmente a través del cuadro de diálogo de propiedades de capa.

    
pregunta Mike 03.06.2013 - 21:46

5 respuestas

14

Esto ahora se puede hacer fácilmente con un complemento:

changeDataSource

enlace

Agrega un botón cuando haces clic derecho en una capa vectorial "Cambiar fuente de datos vectoriales", tan fácil como Arc.

    
respondido por el HeikkiVesanto 29.10.2015 - 12:08
9

Actualmente esto no es posible, pero hay un ticket para ello. Sin embargo, puede cambiar la fuente de datos en el archivo .qgs (archivo de proyecto) y volver a abrir el proyecto.

<projectlayers layercount="1">
    <maplayer minimumScale="-4.65661e-10" maximumScale="1e+08" minLabelScale="0" maxLabelScale="1e+08" geometry="Point" type="vector" hasScaleBasedVisibilityFlag="0" scaleBasedLabelVisibilityFlag="0">
        <id>graduated_classes20130603233806207</id>
        <datasource>../Downloads/Grauated_classes_test_sample/graduated_classes.shp</datasource>
        <title></title>
        <abstract></abstract>

Cambiar la línea <datasource>

    
respondido por el Nathan W 04.06.2013 - 01:00
3

en python es posible modificar directamente el origen de datos usando QgsVectorLayer.writeLayerXML y QgsVectorLayer.readLayerXML modificando el documento DOM al instante y recargando la capa como se muestra en el ejemplo a continuación.

from PyQt4.QtXml import *
from qgis.core import *
from PyQt4.QtXml import *

layer = self.iface.legendInterface().currentLayer()
newDatasource = "NEW DATASOURCE STRING" # get datasource from layer properties general     tab
newDatasourceProvider = "ogr" # possible values: (ogr, )

# read layer DOM definition
XMLDocument = QDomDocument("style")
XMLMapLayers = QDomElement()
XMLMapLayers = XMLDocument.createElement("maplayers")
XMLMapLayer = QDomElement()
XMLMapLayer = XMLDocument.createElement("maplayer")
layer.writeLayerXML(XMLMapLayer,XMLDocument)

# modify DOM element with new layer reference
XMLMapLayer.firstChildElement("datasource").firstChild().setNodeValue(newDatasource)
XMLMapLayer.firstChildElement("provider").firstChild().setNodeValue(newDatasourceProvider)
XMLMapLayers.appendChild(XMLMapLayer)
XMLDocument.appendChild(XMLMapLayers)

# reload layer definition
self.layer.readLayerXML(XMLMapLayer)
self.layer.reload()

# apply to canvas and legend
self.iface.actionDraw().trigger()
self.iface.legendInterface().refreshLayerSymbology(self.layer)

La función se ha incluido en complemento PickLayer que permite realizar acciones en la capa y característica pulsada

    
respondido por el Enrico Ferreguti 15.05.2015 - 18:55
2

De la versión 2.10 QGis Api incluye QgsVectorLayer :: setDataSource method:

void QgsVectorLayer::setDataSource  (   QString     dataSource,
        QString     baseName,
        QString     provider,
        bool    loadDefaultStyleFlag = false 
    )       

Update the data source of the layer.

The layer's renderer and legend will be preserved only if the geometry type of the new data source matches the current geometry type of the layer.

Parameters
    dataSource  new layer data source
    baseName    base name of the layer
    provider    provider string
    loadDefaultStyleFlag    set to true to reset the layer's style to the default for the data source 
    
respondido por el Enrico Ferreguti 21.09.2015 - 12:03
1

Si trabaja con shapefiles, no (debido a las características específicas del formato). Si usa las capas PostGIS o SpatiaLite, se puede conectar una sola capa vectorial (tabla geometry_columns) a múltiples tablas de atributos, e inversa (con claves externas o vistas).

Se implementa de forma nativa en GRASS GIS, varias tablas para una capa vectorial y una fuente de datos cambiante ( v.to.db

    
respondido por el gene 03.06.2013 - 22:26

Lea otras preguntas en las etiquetas