QGIS'de Katman Veri Kaynağını Değiştirme


18

Bir ArcGIS katmanının özelliklerinde bunu nasıl yaptığınıza benzer şekilde, QGIS içindeki bir katman dosyasına bir shapefile kaynağı oluşturmanın bir yolu var mı? (ör. katman özelliklerine, kaynak sekmesine gidin ve ardından 'Set Dat Source'düğmeye basın )

Ben QGIS katman özellikleri her yerinde oldum ve ben hiçbir yerde görmüyorum ...

DÜZENLEME: Bunu şekil dosyaları ile yapamayacağınızı açıklayan yorumlar aldım, ancak bir şekil dosyasının adını değiştirecek ve daha sonra bu şekil dosyasını katman olarak içeren önceden var olan bir proje dosyasını açacaksam, Katmanda gezinmem ve yeniden istediğim şekil dosyasına yeniden kaynak yapmamı sağlayan Kötü Katmanlar iletişim kutusu. Bu senaryoda kaynak yapabileceğinizi garip buluyorum, ancak katman özellikleri iletişim kutusu aracılığıyla elle yapamazsınız.

Yanıtlar:


18

Bu artık bir eklenti ile kolayca yapılabilir:

changeDataSource

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

"Vektör veri kaynağını değiştir" vektör katmanına sağ tıkladığınızda Arc kadar kolay bir düğme ekler.


gret işlevselliği, temel işlev olsa dilerdim!
hilpers

güzel çözüm! bu CBS olmayan kişilerin kullanması için yeterince kolay olacaktır.
ak112358

Maalesef, geçiş yapmak istediğiniz veri kaynağı bir ESRI Dosya Coğrafi Veritabanındaysa (Open FileGDB aracılığıyla), bu veri türü sonraki açılır pencerede listelenmediği için çalışmaz.
user25644

10

Şu anda bu mümkün değil, ama bunun için bir bilet var. Ancak .qgs'deki (proje dosyası) veri kaynağını değiştirebilir ve projeyi yeniden açabilirsiniz.

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

<datasource>Hattı değiştir


4
Bilete bağlantı kurabilir misiniz?
RyanKDalton-OffTheGridMaps

Bir şey olduğunu söylediğinde her zaman iyi o zaman bir şey bulamıyorum :)
Nathan W

Teşekkürler, bu şekilde yapmaya baktım, ancak sahip olduğum sorun kullanıcılarım CBS insanı değil, sadece bazı verileri görüntülemek için projeye ihtiyaçları var. Bir proje dosyası ayarlamak ve tüm semboloji ve etiketleme ayarlamak ve sonra sadece farklı siteler için veri katmanı yeniden kaynak istedim. Bu yöntem yetenek setinin ötesindedir. Ben onu katmanları güncellemek için bir eklenti kullanmak için izin veren bir komut dosyası yazmak mümkün olabileceğini düşünüyorum.
Mike

1
Farklı şekil dosyalarından birini proje dosyasında başvurulan bir sahte dosyaya kopyalayan bir DOS toplu işine ne dersiniz, sonra proje dosyasını başlatın. Katman CRS veya uzantıları farklıysa ne olacağını bilmiyorum.
AndreJ

1
Verileri nasıl ekleyeceklerini, stillerini ve etiketlerini nasıl ekleyeceklerini öğretmek muhtemelen daha kolaydır. Stili kopyalayıp yapıştırabilirsiniz, böylece kolay olmalı, etiketler hakkında bilmiyorum. Tanımladığınız şey gerçekten CBS veya düzenleme olmadığı için bu kadar zor olmamalı. Alternatif bir kaynak qgs dosyası olarak sadece metin olarak değiştirmek için bağımsız bir program yapmak olabilir
Antonio Locandro

3

python'da QgsVectorLayer.writeLayerXML ve QgsVectorLayer.readLayerXML kullanarak veri kaynağını aşağıdaki örnekte olduğu gibi anında ve yeniden yükleme katmanında değiştirerek doğrudan değiştirmek mümkündür.

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)

Özellik, tıklanan katman ve özellik üzerinde işlem yapılmasına olanak tanıyan PickLayer eklentisine dahil edilmiştir


2

Sürüm 2.10 QGis Api, QgsVectorLayer :: setDataSource yöntemini içerir:

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

Şekil dosyaları ile çalışıyorsanız, hayır (formatın belirli özellikleri nedeniyle). PostGIS veya SpatiaLite katmanları kullanıyorsanız, tek bir vektör katmanı (geometry_columns tablosu) birden çok nitelik tablosuna ve tersine (yabancı tuşlar veya Görünümlerle) bağlanabilir.

GRASS GIS'de , bir vektör katmanı ve değişen veri kaynağı için birden çok tablo halinde yerel olarak uygulanır ( v.to.db

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.