QGIS에서 레이어의 데이터 소스 변경


18

ArcGIS 레이어의 속성에서이 작업을 수행하는 것처럼 QGIS에서 레이어 파일에 셰이프 파일을 소싱하는 방법이 있습니까? (예 : 레이어 속성, 소스 탭으로 이동 한 다음 'Set Dat Source'버튼을 누르십시오)

QGIS의 레이어 속성을 모두 살펴 봤는데 어디에서도 보이지 않습니다 ...

편집 : shapefiles 로이 작업을 수행 할 수 없다는 설명을 받았지만 shapefile의 이름을 변경 한 다음이 shapefile이 포함 된 기존 프로젝트 파일을 레이어로 열면 '핸들'이 표시됩니다. Bad Layers 대화 상자를 사용하면 원하는 모양 파일로 레이어를 탐색하고 다시 가져올 수 있습니다. 해당 시나리오에서 리소스를 사용할 수있는 것이 이상하지만 레이어 속성 대화 상자를 통해 수동으로 처리 할 수는 없습니다.

답변:


18

이제 플러그인으로 쉽게 수행 할 수 있습니다.

changeDataSource

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

Arc와 마찬가지로 벡터 레이어 "Change vector datasource"를 마우스 오른쪽 버튼으로 클릭하면 버튼이 추가됩니다.


후회 기능, 나는 그것이 핵심 기능 이었으면 좋겠다.
hilpers

좋은 해결책! 이것은 비 GIS 사람들이 사용하기에 충분히 쉬울 것입니다.
ak112358

불행히도이 기능은 전환하려는 데이터 소스가 OpenFileGDB를 통해 ESRI 파일 지오 데이터베이스에있는 경우 해당 데이터 유형이 후속 팝업 창에 나열되지 않으므로 작동하지 않습니다.
user25644

10

현재는 불가능하지만 티켓이 있습니다. 그러나 .qgs (프로젝트 파일)에서 데이터 소스를 변경하고 프로젝트를 다시 열 수 있습니다.

<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>라인 변경


4
티켓이 완료된 경우 다른 사람이 알 수 있도록 티켓에 연결할 수 있습니까?
RyanKDalton-OffTheGridMaps 2016 년

당신이 하나가 있다고 말할 때 항상 좋은 다음 찾을 수 없습니다 :)
Nathan W

고마워, 나는이 방법으로 그것을 보았지만, 내가 가진 문제는 내 사용자가 GIS 사람들이 아니며, 일부 데이터를 보려면 프로젝트가 필요하다는 것입니다. 프로젝트 파일을 설정하고 모든 기호 및 레이블을 설정하고 다른 사이트의 데이터 계층을 다시 소스로 지정하려고했습니다. 이 방법은 그녀의 기술을 넘어선 것입니다. 플러그인을 사용하여 레이어를 업데이트 할 수있는 스크립트를 작성할 수 있다고 생각합니다.
Mike

1
다른 모양 파일 중 하나를 프로젝트 파일에서 참조되는 더미 파일에 복사 한 다음 프로젝트 파일을 시작하는 DOS 배치는 어떻습니까? 레이어 CRS 또는 범위가 다른 경우 어떻게되는지 모르겠습니다.
AndreJ

1
데이터를 추가하고 스타일을 지정하고 레이블을 지정하는 방법을 가르치기 쉬울 것입니다. 스타일을 복사하여 붙여 넣을 수 있으므로 레이블에 대해 잘 모를 수 있습니다. 당신이 묘사하는 것이 실제로 GIS 나 편집이 아니기 때문에 그렇게 어렵지 않아야합니다. 대안은 아마도 qgs 파일이 텍스트
Antonio Locandro 23시 48 분

3

파이썬에서는 QgsVectorLayer.writeLayerXML 및 QgsVectorLayer.readLayerXML을 사용하여 데이터 소스를 직접 수정하여 아래 예제와 같이 즉시 DOM 레이어를 수정하고 레이어를 다시로드 할 수 있습니다.

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)

클릭 레이어 및 기능에 대한 작업을 수행 할 수 있는 기능이 PickLayer 플러그인 에 포함되었습니다.


2

릴리스 2.10부터 QGis Api에는 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

shapefile로 작업하는 경우 형식의 특정 특성으로 인해 아니오입니다. PostGIS 또는 SpatiaLite 레이어를 사용하는 경우 단일 벡터 레이어 (geometry_columns 테이블)를 여러 속성 테이블에 연결하고 외래 키 또는 뷰를 사용하여 역으로 연결할 수 있습니다.

GRASS GIS, 하나의 벡터 레이어 및 변경 데이터 소스 ( v.to.db)에 대한 여러 테이블에서 기본적으로 구현됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.