Cambio de fuente de datos de capa en QGIS

18

¿Hay alguna forma de generar un archivo de forma en un archivo de capa en QGIS de forma similar a cómo se hace esto en las propiedades de una capa de ArcGIS? (es decir, ir a las propiedades de capa, pestaña de fuente y luego simplemente presionar el 'Set Dat Source'botón)

He estado en todas las propiedades de capa en QGIS y no veo esto en ningún lado ...

EDITAR: He recibido comentarios que explican que no se puede hacer esto con archivos de forma, pero si tuviera que cambiar el nombre de un archivo de forma y luego abrir un archivo de proyecto preexistente que contiene este archivo de forma como una capa, obtendré el 'Manejador Diálogo de Bad Layers, que me permite navegar y volver a utilizar la capa en cualquier shapefile que desee. Me resulta extraño que pueda utilizar recursos en ese escenario, pero no puede hacerlo manualmente a través del cuadro de diálogo de propiedades de capa.

Miguel
fuente

Respuestas:

18

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

changeDataSource

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

Agrega un botón cuando hace clic derecho en una capa vectorial "Cambiar fuente de datos de vector", por lo que es tan fácil como Arc.

HeikkiVesanto
fuente
Sin embargo, ¡desearía que esa fuera la funcionalidad principal!
hilpers
¡buena solución! Esto sería bastante fácil de usar para personas que no son SIG.
ak112358
Desafortunadamente, esta característica no funcionará si la fuente de datos a la que desea cambiar está 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.
usuario25644
10

Actualmente esto no es posible, pero hay un boleto para ello. Sin embargo, puede cambiar el origen de datos en .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 <datasource>linea

Nathan W
fuente
44
¿Se puede vincular al boleto para que otros sepan si / cuando está completo?
RyanKDalton-OffTheGridMaps
Siempre es bueno cuando dices que hay uno y luego no puedes encontrar la cosa :)
Nathan W
Gracias, busqué hacerlo de esta manera, pero el problema que tengo es que mis usuarios no son personas con SIG, solo necesitan el proyecto para ver algunos datos. Quería configurar un archivo de proyecto y establecer toda la simbología y el etiquetado y luego simplemente hacer que vuelvan a obtener la capa de datos para diferentes sitios. Este método está más allá de su conjunto de habilidades. Estoy pensando que podría escribir un script que le permita usar un complemento para actualizar las capas.
Mike
1
¿Qué pasa con un lote de DOS que simplemente copia uno de los diferentes archivos de forma a uno ficticio al que se hace referencia en el archivo del proyecto, luego inicia el archivo del proyecto? No sé qué sucede si la capa CRS o las extensiones son diferentes.
AndreJ
1
Probablemente sea más fácil enseñarles cómo agregar los datos, diseñarlos y etiquetarlos. Puede copiar el estilo y pegarlo para que sea fácil, no conozca las etiquetas. Dado que lo que está describiendo no es realmente SIG o edición, no debería ser tan difícil. La alternativa puede ser hacer un programa independiente para reemplazar la fuente, ya que un archivo qgs es solo texto
Antonio Locandro
3

en python es posible modificar directamente la fuente de datos usando QgsVectorLayer.writeLayerXML y QgsVectorLayer.readLayerXML modificando el documento DOM sobre la marcha y recargando la capa como 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 el complemento PickLayer que permite realizar acciones en la capa y la función clicadas

Enrico Ferreguti
fuente
2

Desde la versión 2.10, QGis Api incluye el método QgsVectorLayer :: setDataSource :

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 
Enrico Ferreguti
fuente
1

Si trabaja con shapefiles, no (debido a las características específicas del formato). Si utiliza las capas PostGIS o SpatiaLite, se puede conectar una sola capa vectorial (tabla geometry_columns) a varias tablas de atributos, y viceversa (con claves externas o Vistas).

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

gene
fuente