27 votos

Cambio de la fuente de datos de la capa en el QGIS

¿Existe una manera de obtener un archivo de forma para un archivo de capa en QGIS muy parecida a como se hace en las propiedades de una capa de ArcGIS? (es decir, ir a las propiedades de la capa, a la pestaña de fuente y luego simplemente presionar el botón 'Set Dat Source')

He revisado las propiedades de las capas en QGIS y no veo esto en ninguna parte...

Gracias, Mike

EDITAR: He recibido comentarios explicando que no se puede hacer esto con los archivos de formas, pero si yo cambiara el nombre de un archivo de formas y luego abriera un archivo de proyecto preexistente que contiene este archivo de formas como una capa, obtendría el diálogo "Manejar malas capas", que me permite navegar y redireccionar la capa a cualquier archivo de formas que quiera. Me parece que impar que puede recurso en ese escenario, pero no puede hacerlo manualmente a través del cuadro de diálogo de propiedades de la capa.

26voto

Chris Puntos 128

Ahora se puede hacer fácilmente con un plugin:

changeDataSource

https://geogear.wordpress.com/2015/09/30/changedatasource-plugin-release-1-0/

Añade un botón cuando haces clic con el botón derecho en una capa vectorial "Cambiar fuente de datos vectorial", así que es tan fácil como Arc.

1 votos

Buena funcionalidad, aunque me gustaría que fuera una funcionalidad básica.

0 votos

buena solución! esto sería bastante fácil de usar para las personas que no son de SIG.

0 votos

Lamentablemente, esta función no funcionará si la fuente de datos a la que desea cambiar se encuentra en una geodatabase de archivos ESRI (a través de Open FileGDB), ya que ese tipo de datos no aparece en la ventana emergente posterior.

10voto

Jauder Ho Puntos 3172

Actualmente esto no es posible, pero hay una entrada 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 el <datasource> línea

5 votos

¿Puede poner un enlace a la entrada para que otros sepan si/cuando está completa?

0 votos

Siempre es bueno cuando se dice que hay uno y luego no se encuentra la cosa :)

0 votos

Gracias, miré de hacerlo así, pero el problema que tengo es que mis usuarios no son gente de SIG, sólo necesitan el proyecto para ver algunos datos. Yo quería configurar un archivo de proyecto y establecer toda la simbología y el etiquetado y luego sólo tienen que volver a la capa de datos para diferentes sitios. Este método está más allá de su conjunto de habilidades. Estoy pensando que podría ser capaz de escribir un script que le permite utilizar un plugin para actualizar las capas.

3voto

en python es posible modificar directamente el datasource usando QgsVectorLayer.writeLayerXML y QgsVectorLayer.readLayerXML modificando el documento DOM sobre la marcha y recargando la capa como en el ejemplo siguiente.

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 Plugin PickLayer que permite realizar acciones sobre la capa y la característica pulsada

2voto

A partir de la versión 2.10 QGis Api incluye QgsVectorLayer::setDataSource método:

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

1voto

GreyCat Puntos 146

Si se trabaja con shapefiles, no (debido a las características específicas del formato). Si utiliza capas PostGIS o SpatiaLite, una sola capa vectorial (tabla geometry_columns) puede conectarse a múltiples tablas de atributos, e inversamente (con claves foráneas o Views).

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

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X