Mengubah Sumber Data Lapisan dalam QGIS

18

Apakah ada cara untuk sumber shapefile ke file lapisan di QGIS seperti bagaimana Anda melakukan ini di properti lapisan ArcGIS? (Yaitu Pergi ke properti lapisan, tab sumber dan kemudian cukup tekan 'Set Dat Source'tombol)

Saya telah menjelajahi seluruh properti layer di QGIS dan saya tidak melihat ini di mana pun ...

EDIT: Saya telah menerima komentar yang menjelaskan bahwa Anda tidak dapat melakukan ini dengan shapefile, tetapi jika saya mengubah nama shapefile dan kemudian membuka file proyek yang sudah ada sebelumnya yang berisi shapefile ini sebagai layer, saya akan mendapatkan 'Pegangan Dialog Bad Layers, yang memungkinkan saya untuk menavigasi dan sumber ulang layer ke setiap shapefile yang saya inginkan. Saya merasa aneh bahwa Anda dapat sumber daya dalam skenario itu, tetapi Anda tidak dapat melakukannya secara manual melalui kotak dialog properti layer.

Mike
sumber

Jawaban:

18

Ini sekarang dapat dilakukan dengan mudah dengan sebuah plugin:

changeDataSource

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

Ini menambahkan tombol ketika Anda mengklik kanan pada layer vektor "Ubah sumber data vektor", jadi semudah Arc.

HeikkiVesanto
sumber
fungsionalitas gret, saya berharap itu fungsionalitas inti!
Hilper
solusi bagus! ini akan cukup mudah untuk digunakan orang non-GIS.
ak112358
Sayangnya fitur ini tidak akan berfungsi jika sumber data yang ingin Anda alihkan berada dalam ESRI File Geodatabase (melalui Open FileGDB) karena tipe data itu tidak terdaftar di jendela sembulan berikutnya.
user25644
10

Saat ini tidak mungkin, tetapi ada tiket untuk itu. Namun Anda dapat mengubah sumber data dalam .qgs (file proyek) dan membuka kembali proyek.

<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>

Ubah <datasource>jalurnya

Nathan W
sumber
4
Bisakah Anda menautkan ke tiket sehingga orang lain akan tahu apakah / kapan itu selesai?
RyanKDalton-OffTheGridMaps
Selalu baik ketika Anda mengatakan ada satu maka tidak dapat menemukan hal itu :)
Nathan W
Terima kasih, saya melihat melakukannya dengan cara ini, tetapi masalah yang saya miliki adalah bahwa pengguna saya bukan orang-orang GIS, mereka hanya perlu proyek untuk melihat beberapa data. Saya ingin mengatur file proyek dan mengatur semua simbologi dan pelabelan dan kemudian hanya sumber mereka lapisan sumber data untuk situs yang berbeda. Metode ini di luar keahliannya. Saya pikir saya mungkin bisa menulis skrip yang memungkinkan dia menggunakan plugin untuk memperbarui lapisan.
Mike
1
Bagaimana dengan batch DOS yang hanya menyalin salah satu dari shapefile yang berbeda ke yang dummy yang dirujuk dalam file proyek, kemudian mulai file proyek. Saya tidak tahu apa yang terjadi jika layer CRS atau luasan berbeda.
AndreJ
1
Mungkin lebih mudah untuk mengajari mereka cara menambahkan data, gaya, dan label. Anda dapat menyalin gaya dan menempelkannya agar mudah, tidak tahu tentang label. Karena apa yang Anda gambarkan bukan benar-benar SIG atau pengeditan, seharusnya tidak terlalu sulit. Alternatif mungkin dengan membuat program mandiri untuk mengganti sumber karena file qgs hanya berupa teks
Antonio Locandro
3

dalam python adalah mungkin untuk memodifikasi sumber data secara langsung menggunakan QgsVectorLayer.writeLayerXML dan QgsVectorLayer.readLayerXML memodifikasi dokumen DOM dengan cepat dan memuat ulang layer seperti dari contoh di bawah ini.

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)

Fitur ini telah dimasukkan dalam plugin PickLayer yang memungkinkan untuk melakukan tindakan pada lapisan dan fitur yang diklik

Enrico Ferreguti
sumber
2

Dari rilis 2.10 QGis Api termasuk metode 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
sumber
1

Jika Anda bekerja dengan shapefile, tidak (karena karakteristik spesifik format). Jika Anda menggunakan layer PostGIS atau SpatiaLite, layer vektor tunggal (tabel geometry_columns) dapat dihubungkan ke beberapa tabel atribut, dan terbalik (dengan kunci asing atau Views).

Ini diimplementasikan secara native di GRASS GIS, beberapa tabel untuk satu layer vektor dan mengubah sumber data ( v.to.db

gen
sumber