วิธีละเว้น“ จัดการเลเยอร์ที่ไม่ดี” ใน QGIS ได้อย่างไร


11

ฉันมีโครงการ QGIS (2.14.3-Essen) ที่ฉันใช้ทั้งที่ทำงานและที่บ้าน ฉันเก็บทั้งหมด แต่สองชั้นกับโครงการ

เลเยอร์ที่เหลือทั้งสองนั้นใหญ่มาก - DEM และฮิลล์เชดรวมมากกว่า 20 GB - และพวกมันถูกเก็บไว้ในเส้นทางที่แตกต่างกันในที่ทำงานเทียบกับที่บ้าน

ฉันต้องการเพิกเฉยต่อHandle Bad Layersบทสนทนาและรักษาเส้นทางที่แตกสำหรับเลเยอร์เหล่านั้น ฉันมักจะไม่สนใจพวกเขาไม่ดี; ฉันต้องการเปลี่ยนแปลงส่วนอื่น ๆ ของโครงการ

มีวิธีทำเช่นนั้นเพื่อเพิกเฉยหรือข้ามบทสนทนาที่จับเลเยอร์ไม่ดีดังนั้นฉันจะไม่สูญเสียการอ้างอิงไปยังเลเยอร์หากฉันไม่อัปเดต


นี่คือสิ่งที่ควรแก้ไขต้นน้ำใน QGIS ไม่ยากเลยที่จะทำ ฉันขอแนะนำให้รับต้นน้ำคงที่นี้ (เช่นตัวเลือกเพิ่มเติมในกล่องโต้ตอบ:) ซ่อนในเซสชั่นนี้ข) เส้นทางแก้ไขแหล่งที่มาค) ลบเลเยอร์) มีบริษัท หลายแห่งที่ยินดีทำเช่นนี้ให้คุณ
แมทเธียสคุห์น

1
@ Matias Kuhn - นั่นเป็นความคิดที่ดีมากนั่นจะเป็นวิธีที่ดีในการไปข้างหน้า ฉันใช้หนึ่งในที่ปรึกษาในรายการนั้น (ไม่แน่ใจว่าเป็นชื่อที่ทำไปแล้วหรือไม่) ฉันจะสำรวจความเป็นไปได้กับพวกเขา ขอบคุณ
Martin Hügi

@ MartinHügiคุณทำอะไรเกี่ยวกับเรื่องนี้หรือไม่? สิ่งที่คล้ายกันทำให้การรับรู้บางอย่างในรายการส่งเมล listososo.org/pipermail/qgis-developer/2017-May/048450.html
Matthias Kuhn

ไม่ฉันไม่ได้ทำสิ่งนี้ฉันลืมไปแล้วว่ามันกลายเป็นหนึ่งในสิ่งที่เราอยู่ด้วย ขอบคุณสำหรับการเตือนฉันสามารถถามคำถามกับที่ปรึกษาของเราหรือเป็นสิ่งที่กำลังดำเนินการอยู่ @Aaron - สิ่งนี้ได้ผลสำหรับคุณอย่างไร
Martin Hügi

ฉันใช้งานต่อไปเรื่อย ๆ โครงการ QGIS แบบขนานสองโครงการ - โครงการหนึ่งสำหรับทำงานและอีกโครงการหนึ่งสำหรับบ้าน
แอรอน

คำตอบ:


4

เพียงทำสำเนาแยกต่างหากจากไฟล์โครงการของคุณเพื่อใช้ในบ้านและที่ทำงาน

ข้อมูลที่คุณบันทึกจะถูกเขียนไปยังไฟล์ต้นฉบับเลเยอร์ไม่ใช่ไปยังไฟล์โครงการ

เมื่อคุณทำการบ้านเสร็จแล้วคุณสามารถนำมันไปทำงานและเพิ่มเลเยอร์ที่ไม่ดีได้อีกครั้ง หากคุณมีสไตล์ที่ยากในเลเยอร์คุณอาจบันทึกแยกต่างหากและเพิ่มด้วย


อีกทางเลือกหนึ่งคือการตัดไฟล์ VRT รอบแหล่งภายนอก

ตัวอย่างตัวอย่างสำหรับไฟล์ Geotif raster สร้างโดยgdal_translate:

<VRTDataset rasterXSize="1656" rasterYSize="846">
  <GeoTransform> 2.0005201224994706e+005, 6.2653333397239589e+002, 0.0000000000000000e+000, 6.9906275735481549e+006, 0.0000000000000000e+000,-6.2653333397239589e+002</GeoTransform>
  <Metadata>
    <MDI key="TIFFTAG_RESOLUTIONUNIT">2 (pixels/inch)</MDI>
    <MDI key="TIFFTAG_XRESOLUTION">120</MDI>
    <MDI key="TIFFTAG_YRESOLUTION">120</MDI>
  </Metadata>
  <VRTRasterBand dataType="Byte" band="1">
    <ColorInterp>Red</ColorInterp>
    <SimpleSource>
      <SourceFilename relativeToVRT="1">testtif.tif</SourceFilename>
      <SourceBand>1</SourceBand>
      <SourceProperties RasterXSize="1656" RasterYSize="846" DataType="Byte" BlockXSize="1656" BlockYSize="1" />
      <SrcRect xOff="0" yOff="0" xSize="1656" ySize="846" />
      <DstRect xOff="0" yOff="0" xSize="1656" ySize="846" />
    </SimpleSource>
  </VRTRasterBand>
</VRTDataset>

และตัวอย่างสำหรับ shapefile:

<OGRVRTDataSource>
    <OGRVRTLayer name="testshp">
        <SrcDataSource>F:\Karten\vrt\testshp.shp</SrcDataSource>
            <SrcLayer>testshp</SrcLayer>
            <GeometryType>wkbPolygon</GeometryType>
            <LayerSRS>EPSG:31466</LayerSRS>
    </OGRVRTLayer>
</OGRVRTDataSource>

เมื่อไม่มีไฟล์ต้นฉบับแรสเตอร์จะปรากฏเป็นสี่เหลี่ยมสีดำ (คุณอาจเปลี่ยนเลเยอร์เป็นล่องหน) และเลเยอร์เวกเตอร์กลายเป็นตารางที่ไม่มีรูปทรงเรขาคณิตโดยไม่มีข้อความแสดงข้อผิดพลาด เลเยอร์ที่ไม่ใช่ vrt เพิ่มเติมพร้อมไฟล์ต้นฉบับที่ไม่ถูกลบจะยังคงอยู่และสามารถแก้ไขได้ หากคุณติดตั้งไฟล์ต้นฉบับใหม่ทุกอย่างจะกลับมาเป็นปกติแม้แต่การเปลี่ยนแปลงในเลเยอร์อื่น ๆ


1
การทำโปรเจ็กต์แยกต่างหากสำหรับบ้านและที่ทำงานเป็นงานที่เหมาะสมในกรณีนี้ อย่างไรก็ตามมีกรณีอื่น ๆ เช่นเมื่อบริการแผนที่หยุดให้บริการชั่วคราวเมื่อคุณต้องการเพิกเฉยต่อการแจ้งเตือนเลเยอร์ที่ไม่ดี ดังนั้นฉันถามอีกครั้งมีวิธีที่จะเพิกเฉยหรือข้ามบทสนทนาที่จับเลเยอร์ที่ไม่ดีเพื่อที่จะไม่สูญเสียการอ้างอิงบางชั้น?
Aaron

คุณช่วยให้รายละเอียดเพิ่มเติมเกี่ยวกับไฟล์ VRT สิ่งที่พวกเขาเป็นและวิธีการเริ่มต้น จากสิ่งที่ฉันคิดว่า VRT ใช้กับแรสเตอร์เท่านั้น? อะไรคือไฟล์เวคเตอร์หรือเลเยอร์ PostGIS ระยะไกลที่ไม่สามารถใช้งานได้หากไม่มีการเชื่อมต่อ คุณจะเพิกเฉยต่อ 'การจัดการเลเยอร์ที่ไม่ดี' ได้อย่างไร
Martin Hügi

@ MartinHügiคุณยังสามารถสร้าง VRT สำหรับไฟล์เวกเตอร์ แต่ที่ยังคงต้องการงานฝีมือ: gdal.org/drv_vrt.htmlและpaolocorti.net/2012/03/08/gdal_virtual_formats ฉันจะขยายคำตอบของฉันในไม่ช้าสำหรับบางตัวอย่าง
AndreJ

@AndreJ ขอบคุณดังนั้นเมื่อมองผ่านลิงก์เหล่านั้นความเข้าใจที่ จำกัด ของฉันก็คือไฟล์ประเภท xml จะทำหน้าที่เป็น inb ระหว่างแม็พกับแหล่งที่มาของข้อมูล ดังนั้น QGIS จึง 'คิด' อยู่ที่นั่นแม้ว่าแหล่งข้อมูลจะไม่พร้อมใช้งานหรือไม่ GDAL เป็นสิ่งที่ดูเหมือนว่าเป็นการดีที่จะเข้าร่วมหรืออย่างน้อยก็มีความเข้าใจ
Martin Hügi

ใช่คุณแค่หลอกผู้จัดการข้อผิดพลาด QGIS
AndreJ

3

การแก้ไขที่เป็นไปได้คือการแก้ไขไฟล์โครงการ qgs โดยใช้สคริปต์ ฉันพบว่าถ้าคุณแทนที่แหล่งข้อมูลด้วย<datasource>.</datsource>แล้วมันจะไม่สนใจ Handle Bad Layers ที่โผล่ขึ้นมา

สคริปต์ Python ทำงานหากคุณไม่ต้องการโหลดเลเยอร์บางอย่าง

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

สคริปต์ Python เพื่อเรียกใช้เพื่อแทรกเส้นทางของแหล่งข้อมูลที่เหมาะสม

import fileinput

replaceNextLine = False

for line in fileinput.input('path\to\your\project.qgs', inplace=True):
    if replaceNextLine:
        print '<datasource>.\path\to\your\datasource</datasource>'
        replaceNextLine = False
    else:
        print line,

    if '<id>layer_name_whos_datasource_needs_to_change' in line:
        replaceNextLine = True

การทำเช่นนี้คุณสามารถตั้งค่า a DoNotLoad.pyด้วยสคริปต์ด้านบนและ a home.pyด้วยพา ธ ไปยังแหล่งที่มาที่บ้านของคุณและ a work.pyพร้อมกับพา ธ ไปยังแหล่งงานของคุณโดยใช้สคริปต์ที่สองเป็นรูปแบบ

จากนั้นคุณจะมีโครงการเดียวที่จะทำงาน แต่คุณสามารถเปลี่ยนเส้นทางของคุณได้ง่ายขึ้นอยู่กับสภาพแวดล้อมที่คุณอยู่หรือเปลี่ยนเส้นทางเพื่อไม่ให้เลเยอร์ แต่ยังอยู่ในโครงการของคุณ (สไตล์ของคุณทั้งหมดจะถูกบันทึกไว้ และฉันคิดว่าคุณสามารถปรับเปลี่ยนสไตล์ได้ตามต้องการ


ขอบคุณ ฉันได้รับแนวคิดฉันค่อนข้างชัดเจนแล้วตอนนี้ต้องใช้เวลาที่ฉันได้รับความหมายที่จะได้รับรอบเพื่อเริ่มทำความเข้าใจการใช้งานพื้นฐานของงูหลาม ตอนนี้ฉันได้รับแนวคิดเพราะฉันแก้ไข project.qgs ด้วย WordPad ด้วยตนเองเพื่อเปลี่ยนแหล่งข้อมูลและเปลี่ยนกลับ QGIS ไม่ได้เพิกเฉยกับเลเยอร์ที่ไม่ดี แต่เมื่อ <ID> ทำหน้าที่เป็นตัวยึดตำแหน่งฉันสามารถย้อนกลับและเปลี่ยนการเปลี่ยนแปลงกลับคืนได้ ใช่แล้วฉันเข้าใจ - ฉันคิดว่า
Martin Hügi

ฉันเดาว่านี่เป็นสถานที่ที่ดีในการเริ่มwiki.python.org/moin/BeginnersGuide
Martin Hügi

@ MartinHügiถ้าช่วยฉันได้รูปแบบหลักสำหรับสคริปต์ของฉันจาก stackoverflow คำตอบstackoverflow.com/a/290494/4708150นี้อธิบายตรรกะของสคริปต์อย่างละเอียดมากขึ้น ตรวจสอบให้แน่ใจเพื่อดูความคิดเห็น มีความคิดเห็นยอดนิยมที่อธิบายว่าทำไมมีเครื่องหมายจุลภาคอยู่ท้ายคำสั่งการพิมพ์
TJ Rockefeller

1

ปลั๊กอิน ChangeDataSource เก็บเลเยอร์ในไฟล์ไว้ด้วยการย้ายไปยังกลุ่มเลเยอร์ที่ไม่ดีได้ชั่วคราว https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ควรทำสิ่งที่คุณต้องการ ปีที่แล้วฉันมีปัญหาที่คล้ายกันและพบว่ามีปลั๊กอิน ChangeDataSource ที่ทำงานกับเลเยอร์ แต่ไม่ได้จัดการเลเยอร์ที่ไม่ดี ฉันพูดถึงว่าการจัดการเลเยอร์ที่ไม่ดีจะเป็นคุณสมบัติที่ยอดเยี่ยมในข้อคิดเห็นของผู้พัฒนาบล็อก (Enrico Ferreguti) ภายในหนึ่งสัปดาห์เขาได้เพิ่มมัน!


ปลั๊กอินนี้ไม่ทำงานสำหรับฉันที่จะจัดการเลเยอร์ที่ไม่ดี ฉันลองใช้แล็ปท็อปสองเครื่อง - ตัวหนึ่งรัน Win7 และ Win10 ตัวอื่น ทั้งสองติดตั้ง QGIS 2.18.0 ฉันทำเครื่องหมายที่ "จัดการเลเยอร์ที่ไม่ดี" และเริ่ม QGIS ใหม่หลังจากติดตั้ง QGIS เริ่มต้นของการจัดการเลเยอร์ที่ไม่ดียังคงปรากฏขึ้นอย่างต่อเนื่องไม่ใช่การแจ้งเตือนของปลั๊กอินที่พบและจัดการแหล่งข้อมูลที่ไม่ถูกต้อง
แอรอน

ไม่ทำงานสำหรับฉันตอนนี้เช่นกัน ฉันจะให้นักพัฒนาทราบ
Baswein

ฉันตรวจสอบแล้วว่าปลั๊กอิน changeDataSource ทำงานได้โดยไม่มีปัญหา ฉันแก้ไขเงื่อนไขที่ไม่ได้ตรวจสอบซึ่งมีข้อยกเว้นหรือรายงานข้อผิดพลาดที่ผิดพลาดและส่งไปยังที่เก็บเวอร์ชันใหม่ [หากปัญหาของคุณยังคงมีอยู่โปรดรายงาน] ( github.com/enricofer/changeDataSource/issues ) ระบุชุดข้อมูลหรือขั้นตอนการปฏิบัติการเพื่อทำซ้ำ
Enrico Ferreguti

เพื่อให้ปลั๊กอินปรากฏขึ้นคุณต้องเปิดใช้งาน Qgis จากนั้นจึงเปิดโครงการ
Baswein
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.