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.

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.


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


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


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 

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.