In ra các thuộc tính của bảng thuộc tính trong qgis?


8

Tôi phải hợp nhất rất nhiều shapefile thành một shapefile tuyệt vời.
Vì vậy, tôi muốn so sánh các thuộc tính của các bảng thuộc tính để xem liệu có sự khác biệt giữa các bảng của từng hình dạng (loại, độ dài, độ chính xác, tên, v.v.) không. Với ý định chuẩn hóa tất cả các shapefiles

ví dụ:

nhập mô tả hình ảnh ở đây

Có cách nào để in ra một danh sách các thuộc tính bảng như được hiển thị trong tab 'các trường' hoặc để xuất các thuộc tính thành một .xls hoặc .dbf không?

Hoặc có một cách tự động để thực hiện tiêu chuẩn hóa? (Có lẽ đây là một chủ đề cho một chủ đề mới ...)

Tôi đang sử dụng QGIS 1.8 (QGIS 2.2 cũng có thể).

Cảm ơn


Thật vậy, tôi có nghĩa là in nó trên giấy. Nhưng nếu bạn có thể gợi ý cho tôi cách làm điều đó một cách dễ dàng hơn. Xin vui lòng cho tôi biết.
PieterB

Tôi chỉ có thể tìm thấy câu trả lời về Arc nhưng nó cũng làm việc tương tự cho QGIS: gis.stackexchange.com/questions/54034/...
tobias47n9e

Bạn có thể giải thích thêm một chút về ý nghĩa của "thuộc tính của bảng thuộc tính" không? Tốt hơn là một danh sách các thuộc tính mà bạn muốn so sánh - và cách bạn muốn so sánh chúng. Điều gì sẽ là kết quả cuối cùng của phân tích của bạn?
Matthias Kuhn

@ Matthias: Tôi đã thêm một số thông tin trong câu trả lời của mình
PieterB

@ Spießbürger Tôi đã tinh chỉnh thêm câu trả lời của mình cũng cung cấp giải pháp xử lý tập lệnh. Hi vọng điêu nay co ich.
Antonio Falciano

Câu trả lời:


7

Giải pháp vỏ OSGeo4W

IMHO cách đơn giản nhất để trích xuất các thuộc tính của bảng thuộc tính ( lược đồ ) bao gồm mở shell OSGeo4W (vì bạn đang dùng win os), thay đổi thư mục vào thư mục dữ liệu của bạn và chỉ cần nhập một cái gì đó như:

ogrinfo -so inputLayerName.shp inputLayerName

Nó sẽ hiển thị cho bạn các thông tin tóm tắt như phép chiếu, lược đồ , số lượng tính năng và phạm vi. Sau đó, vì bạn có một loạt các shapefile, bạn có thể thực hiện một FORchu trình như sau:

FOR %f IN (*.shp) DO ogrinfo -so %f %~nf >> properties.txt

Điều này trả về một tệp txt với các thuộc tính của tất cả các shapefiles trong một thư mục (vì chuyển hướng đầu ra với việc >>nối thêm từng đầu ra vào properties.txttệp).

Ngoài ra, nếu bạn quan tâm đến một tệp thuộc tính cho mỗi shapefile:

FOR %f IN (*.shp) DO ogrinfo -so %f %~nf > %~nf_properties.txt

Về tiêu chuẩn hóa, có một số kỹ thuật. Tôi khuyên bạn nên sử dụng RESIZEtùy chọn tạo lớp sau khi hợp nhất để thay đổi kích thước các trường thành kích thước tối ưu của chúng (ví dụ: các trường văn bản có độ dài quá mức sẽ được rút ngắn). Ví dụ:

ogr2ogr -lco RESIZE=yes merge_resized.shp merge.shp 

Xử lý giải pháp tập lệnh

Mở hộp công cụ Xử lý trong QGIS, tạo tập lệnh mới (nhấp vào Scripts-> Tools-> Create new script) và nhập:

##ogrinfo (summary only)=name
##input=vector
##output=output file

import os, subprocess

head, tail = os.path.split(input)
inputname = os.path.splitext(tail)[0]
cmd = 'ogrinfo -so ' + input + ' ' + inputname + ' > ' + output
subprocess.check_call(cmd, shell=True)

Lưu nó như bạn muốn, ví dụ ogrinfo_so.py. Sau đó, một tập lệnh mới ogrinfo (summary only)sẽ xuất hiện trong hộp công cụ Xử lý -> Scripts-> User scriptnhóm. Nó có thể được thực thi như nó là hoặc trong chế độ hàng loạt.

Hoạt động tương tự là có thể để thay đổi kích thước chiều dài trường, như được mô tả trước đây:

##Resize fields=name
##input=vector
##output=output vector

import subprocess

cmd = 'ogr2ogr -lco RESIZE=YES ' + output + ' ' + input 
subprocess.check_call(cmd, shell=True)

Một tập lệnh mới được gọi Resize fieldssẽ có sẵn trong hộp công cụ Xử lý -> Scripts-> User scriptsnhóm. Hãy tận hưởng nó!


Hấp dẫn! Và làm cách nào tôi có thể lấy thông tin ra khỏi trình vỏ OSGeo4W thành một văn bản hoặc excelldocument? ps: có người mới bắt đầu về cách sử dụng shell OSGeo4W đó không?
PieterB

Shell OSGeo4W là một đợt / DOS Shell, vì vậy bạn có thể chọn văn bản, sao chép và dán vào một tệp văn bản
Antonio Falciano


1
chỉnh sửa được thực hiện bởi @PieterB (nhờ anh ấy). Tôi chỉ sửa một lỗi đánh máy.
simo

1
@afalciano: Cảm ơn bạn đã giới thiệu tôi vào thế giới của OSGeo4W. Vẫn còn rất nhiều điều để tìm hiểu ...
PieterB

4

Shapefiles giữ các thuộc tính của chúng trong các tệp .dbf, bạn có thể không chỉ mở tệp .dbf trực tiếp trong một chương trình như libreoffice calc và sau đó in từ đó không? Nếu bạn không có quá nhiều tập tin thì nó sẽ hoạt động.

Một tùy chọn khác là viết một kịch bản python in ra (lên bàn điều khiển) các thuộc tính của các tính năng trực tiếp hoặc thậm chí so sánh chúng với bạn. Bạn có thể truy cập các thuộc tính của một tính năng như thế này:

it = vectorLayer.getFeatures()
for eachFeature in it:
    attributes = eachFeature.attributes()

Bạn sẽ cần phải làm điều này cho mỗi shapefile so sánh của bạn và xem nếu

eachFeature.attributes() == eachOtherFeature.attributes()

thêm thông tin ở đây: http://www.qgis.org/en/docs/pyqgis_developer_cookbook/


Nếu nhiều người quan tâm đến một công cụ như thế này thì có lẽ chúng ta có thể tài trợ cho sự phát triển.
tobias47n9e

Nghe có vẻ là một ý tưởng thú vị
user24956

Họ nên có một mẫu cho điều đó trên trang web của QGIS :)
tobias47n9e

1

Theo dõi chủ đề .dbf, bạn đã tìm kiếm các so sánh .dbf trực tiếp chưa? Tôi chưa tìm thấy giải pháp miễn phí ngay lập tức, nhưng đại loại như: dbfCompare



0

Chỉ cần mở tệp .dbf trong Libreoffice Calc hoặc Excel, chỉ cần lưu nó dưới dạng tệp mới. Tôi đã lưu nó một lần và shapefile không tốt.

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.