Làm thế nào để bỏ qua xử lý các lớp xấu xử lý các lớp xấu trong QGIS?


11

Tôi có một dự án QGIS (2.14.3-Essen) mà tôi sử dụng cả ở nơi làm việc và ở nhà. Tôi giữ tất cả trừ hai lớp với dự án.

Hai lớp còn lại rất lớn - một DEM và hillshade có tổng dung lượng hơn 20 GB - và chúng được lưu trữ trong các đường dẫn khác nhau tại nơi làm việc so với ở nhà.

Tôi muốn bỏ qua Handle Bad Layerscuộc đối thoại và giữ các đường dẫn bị hỏng cho các lớp đó. Tôi thường không quan tâm họ xấu; Tôi muốn thay đổi các phần khác của dự án.

Có cách nào để làm như vậy không, bỏ qua hoặc bỏ qua đoạn hội thoại Xử lý các lớp xấu để tôi không bị mất tham chiếu đến các lớp nếu tôi không cập nhật chúng?


Đây là điều cần được giải quyết ngược dòng trong QGIS. Nó sẽ không rất khó để làm. Tôi khuyên bạn nên lấy dòng này cố định (ví dụ: tùy chọn bổ sung trong hộp thoại: a) ẩn trong phiên này b) sửa đường dẫn nguồn c) xóa lớp). Có rất nhiều công ty xung quanh sẽ rất vui khi làm điều này cho bạn.
Matthias Kuhn

1
@Matthias Kuhn - Đó là một ý tưởng rất hay, đó sẽ là một cách tốt về phía trước. Tôi sử dụng một trong những chuyên gia tư vấn trong danh sách đó (không chắc đó có phải là điều được thực hiện để đặt tên cho chúng không?). Tôi sẽ khám phá khả năng với họ. Cảm ơn
Martin Hügi

@ MartinHügi bạn đã có tiến triển gì về điều này chưa? Một cái gì đó tương tự đã đưa ra một số xác nhận trong danh sách gửi thư liệt kê.osgeo.org/pipermail/qgis
Matthias Kuhn

Không, tôi đã không tiến bộ điều này, tôi thực sự đã quên vì nó vừa trở thành một trong những điều chúng ta sống cùng. Cảm ơn đã nhắc nhở, tôi có thể đặt câu hỏi cho tư vấn của chúng tôi hoặc đó là một cái gì đó đã được tiến hành? @Aaron - Làm thế nào điều này đã làm việc cho bạn?
Martin Hügi

Tôi tiếp tục sử dụng công việc của tôi. Hai dự án QGIS song song - một cho công việc và một cho gia đình.
Aaron

Câu trả lời:


4

Chỉ cần tạo các bản sao riêng biệt từ tệp dự án của bạn để sử dụng tại nhà và nơi làm việc.

Dữ liệu bạn lưu sẽ được ghi vào tệp nguồn lớp chứ không phải tệp dự án.

Một khi bạn đã hoàn thành phần bài tập về nhà, bạn có thể mang nó đi làm và thêm lại các lớp xấu. Nếu bạn có một kiểu dáng khó khăn trên các lớp, bạn có thể lưu nó một cách riêng biệt và thêm nó vào.


Một lựa chọn khác là bọc một tệp VRT xung quanh nguồn bên ngoài.

Một ví dụ mẫu cho tệp raster Geotif, được tạo bằng 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>

và một mẫu cho một shapefile:

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

Khi không có tệp nguồn, raster được hiển thị dưới dạng hình vuông màu đen (bạn có thể biến lớp này thành vô hình) và lớp vectơ trở thành bảng phi hình học, không có bất kỳ thông báo lỗi nào. Các lớp không phải vrt bổ sung với các tệp nguồn không bị xóa sẽ ở lại và có thể được chỉnh sửa. Nếu bạn cài đặt lại các tệp nguồn, mọi thứ sẽ trở lại bình thường, thậm chí thay đổi các lớp khác.


1
Làm các dự án riêng biệt cho gia đình và văn phòng là một công việc tốt trong trường hợp cụ thể này. Tuy nhiên, có những trường hợp khác, chẳng hạn như khi dịch vụ bản đồ tạm thời ngừng hoạt động, khi bạn muốn bỏ qua thông báo lớp xấu. Vì vậy, một lần nữa tôi hỏi, có cách nào để bỏ qua hoặc bỏ qua đoạn hội thoại Xử lý các lớp xấu để người ta không mất tham chiếu các lớp nhất định không?
Aaron

Bạn có thể cung cấp thêm một số chi tiết về các tệp VRT, chúng là gì và làm thế nào để bắt đầu. Từ những gì tôi đã xem xét làm VRT chỉ áp dụng cho các raster? Điều gì về các tệp vectơ hoặc các lớp PostGIS từ xa không có sẵn nếu không có kết nối. Làm thế nào bạn có thể bỏ qua những 'Xử lý các lớp xấu' này?
Martin Hügi

@ MartinHügi bạn cũng có thể xây dựng VRT cho các tệp vectơ, nhưng vẫn cần thủ công: gdal.org/drv_vrt.htmlpaolocorti.net/2012/03/08/gdal_virtual_formats . Tôi sẽ mở rộng câu trả lời của tôi sớm cho một số ví dụ.
AndreJ

@AndreJ Cảm ơn, vì vậy khi xem qua các liên kết đó, sự hiểu biết hạn chế của tôi là một loại tệp xml hoạt động như một bản đồ giữa các bản đồ với nguồn dữ liệu. Vì vậy, QGIS 'nghĩ' nó ở đó, ngay cả khi nguồn dữ liệu không có sẵn? GDAL là một cái gì đó có vẻ như sẽ tốt để nắm bắt hoặc ít nhất là có một sự hiểu biết về.
Martin Hügi

Vâng, bạn chỉ đang đánh lừa trình xử lý lỗi QGIS.
AndreJ

3

Một công việc khả thi xung quanh sẽ là sửa đổi tệp dự án qss của bạn bằng cách sử dụng tập lệnh. Tôi thấy rằng nếu bạn thay thế nguồn dữ liệu bằng <datasource>.</datsource>thì nó sẽ bỏ qua Xử lý các lớp xấu bật lên.

Tập lệnh Python sẽ chạy nếu bạn không muốn tải một số lớp nhất định.

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

Tập lệnh Python để chạy để chèn đường dẫn nguồn dữ liệu thích hợp.

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

Làm điều này, bạn có thể thiết lập một DoNotLoad.pytập lệnh hàng đầu và một home.pyđường dẫn đến nguồn nhà của bạn và một work.pyđường dẫn đến nguồn công việc của bạn bằng cách sử dụng tập lệnh thứ hai làm mẫu.

Sau đó, bạn sẽ có một dự án duy nhất để làm việc nhưng bạn có thể dễ dàng thay đổi đường dẫn của mình tùy thuộc vào môi trường bạn đang ở hoặc thay đổi đường dẫn để các lớp không được tải, nhưng vẫn trong dự án của bạn (tất cả kiểu dáng của bạn được lưu và tôi nghĩ bạn thậm chí có thể sửa đổi kiểu dáng nếu bạn muốn. Chỉ là không có gì sẽ hiển thị trên bản đồ).


Cảm ơn. Tôi có được khái niệm này, bây giờ tôi khá rõ ràng cần phải dành thời gian đó để có ý định đi lại để bắt đầu hiểu cách sử dụng Python cơ bản. Bây giờ tôi có được khái niệm này vì tôi đã chỉnh sửa thủ công dự án.qss bằng Wordman để thay đổi nguồn dữ liệu và thay đổi lại. QGIS đã không bỏ qua việc xử lý các lớp xấu nhưng vì <ID> đóng vai trò giữ chỗ, tôi đã có thể quay lại và hoàn nguyên thay đổi của mình. Vì vậy, có, tôi nhận được điều đó - tôi nghĩ.
Martin Hügi

Tôi đoán đây là một nơi tốt để bắt đầu wiki.python.org/moin/BeginnersGuide
Martin Hügi

@ MartinHügi nếu nó giúp, tôi đã có được mẫu chính cho tập lệnh của mình từ câu trả lời stackoverflow stackoverflow.com/a/290494/4708150 Điều này giải thích logic của kịch bản kỹ hơn. Hãy chắc chắn để xem các ý kiến. Có một nhận xét được xếp hạng hàng đầu giải thích tại sao có dấu phẩy ở cuối câu lệnh in.
TJ Rockefeller

1

Plugin ChangeDataSource giữ các lớp trong tệp bằng cách di chuyển chúng tạm thời sang một nhóm lớp xấu. https://geogear.wordpress.com/2016/01/29/changedatasourceplugin-plugin-release-2-0/ Nó nên làm những gì bạn muốn. Năm ngoái tôi đã gặp một vấn đề tương tự và nhận thấy rằng có plugin ChangeDataSource hoạt động với các lớp nhưng không xử lý các lớp xấu. Tôi đã đề cập rằng xử lý các lớp xấu sẽ là một tính năng tuyệt vời trong các nhận xét trên blog của nhà phát triển (Enrico Ferreguti). Trong vòng một tuần anh đã thêm nó!


Plugin này không hoạt động đối với tôi để xử lý các lớp xấu. Tôi đã thử trên hai máy tính xách tay khác nhau - một chạy Win7 và Win10 khác. Cả hai đều có cài đặt QGIS 2.18.0. Tôi đã kiểm tra "Xử lý các lớp xấu" và khởi động lại QGIS sau khi cài đặt. Mặc định của QGIS xử lý các lớp xấu tiếp tục bật lên, không phải thông báo của plugin mà nó tìm thấy và xử lý các nguồn dữ liệu không hợp lệ.
Aaron

Không làm việc cho tôi ngay bây giờ. Tôi sẽ cho nhà phát triển biết.
Baswein

Tôi đã xác minh rằng plugin ChangeDataSource chạy mà không gặp vấn đề gì. Tôi sửa một số điều kiện chưa được phát hiện ném ngoại lệ hoặc báo cáo lỗi sai và cam kết lưu trữ một phiên bản mới. [Nếu vấn đề của bạn vẫn còn, vui lòng báo cáo] ( github.com/enricofer/changeDataSource/issues ) chỉ định bộ dữ liệu hoặc các bước vận hành để sao chép chúng.
Enrico Ferreguti

Để có được plugin bật lên, bạn cần chạy Qgis và sau đó mở dự án.
Baswein
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.