Làm cách nào để dễ dàng chỉnh sửa dữ liệu thuộc tính bằng Biểu thức chính quy?


30

Tôi đang viết một hướng dẫn cho sinh viên ThS sử dụng QGIS. Một trong những nhiệm vụ yêu cầu dữ liệu thuộc tính phải được sửa đổi (xem bản thảo hướng dẫn pdf ở đây nếu quan tâm).

Câu hỏi là làm thế nào để họ chỉnh sửa dữ liệu thuộc tính. Tôi biết câu hỏi này đã được hỏi trước đây và câu trả lời được sử dụng rất đơn giản: chỉ cần sử dụng LibreOffice calc để sửa đổi nó và sau đó lưu nó, đảm bảo thứ tự hàng và tiêu đề cột được giữ nguyên. Tôi đã sử dụng phương pháp này trước đây để có hiệu quả tuyệt vời.

Thật không may, giải pháp không còn hoạt động: lưu tệp .dbf, trong LibreOffice (5.4.2) hoặc OpenOffice (3.4.1) Calc xáo trộn dữ liệu từ phối cảnh của QGIS (chỉ các số nguyên ngẫu nhiên xuất hiện trong bảng thuộc tính) và tạo một tệp .dbt bổ sung thay thế.

Vì vậy, để có được câu hỏi: làm thế nào để tôi nói với một lớp sinh viên ThS làm điều này vào tuần tới? Tôi đã xem xét các tùy chọn sau:

  1. Sử dụng R thay thế (tuyệt vời cho tôi, nhưng đáng sợ cho sinh viên)
  2. Chỉnh sửa tệp dưới dạng .csv, sau đó tham gia dựa trên dấu thời gian (tốt, nhưng có vẻ quá phức tạp và có thể gây ra nhiều lỗi hơn trong thực tế 2 giờ)
  3. Sử dụng một chương trình thay thế: Tôi đã thử Gnumeric và Excel, cả hai đều không tạo ra kết quả tốt một cách nhanh chóng.

Để giúp trả lời câu hỏi này, tôi đã tạo một ví dụ có thể nhân rộng . Mở tệp "points.shp" trong QGIS, quan sát bảng thuộc tính rồi đóng lại. Chỉnh sửa một vài ô trong bảng thuộc tính "points.dbf" trong LibreOffice - lưu. Mở lại "points.shp" trong QGIS và quan sát bảng thuộc tính được xáo trộn. Các shapefile khác trong thư mục .zip đã bị LibreOffice và OpenOffice làm hỏng để minh họa vấn đề của tôi.

Tóm lại, làm thế nào để tôi giải quyết tốt nhất vấn đề này?


2
Chào mừng bạn đến với trang web, tôi muốn nói rằng đây là một câu hỏi thực sự hay và hy vọng chúng ta có thể có được một số giải pháp tốt. Tôi cho rằng một chút trăn đã ra khỏi câu hỏi dành cho những sinh viên này, vì đó là cách tôi sẽ tiếp cận vấn đề này trong trường hợp đầu tiên ...
xin chào

13
Chỉnh sửa trực tiếp phần .DBF của shapefile quá nguy hiểm để khuyến nghị sử dụng thường xuyên và hoàn toàn không nên sử dụng cho người mới - ít nhất là không nếu ai quan tâm đến dữ liệu. Tuy nhiên, có sẵn một giải pháp đáng tin cậy hơn có tính chất tương tự: duy trì trường định danh duy nhất trong shapefile. Không bao giờ chỉnh sửa nó. Thay vào đó, hãy giữ các thuộc tính trong một bảng có liên quan (ở bất kỳ định dạng nào mà GIS của bạn có thể đọc), được nối trên cùng một mã định danh. Bây giờ, ở một mức độ lớn, bạn có thể chỉnh sửa bảng thuộc tính một cách tự do mà không mất kết nối giữa hình dạng và thuộc tính - miễn là bạn bảo vệ trường định danh.
whuber

1
Các giải pháp Python sẽ ổn, miễn là chúng dễ thực hiện và hiểu ... Về việc giữ một số định danh là một lựa chọn tốt - (tùy chọn 2 trong câu hỏi của tôi) và có lẽ là câu trả lời mặc định của tôi. Tuy nhiên, hy vọng về một "sửa chữa nhanh" đơn giản hơn không liên quan đến các tệp bổ sung (5 cho mỗi shapefile là khá đủ IMO!)
RobinLigsace

3
Ý bạn là gì, 5 mỗi shapefile? Hãy thử 9! :-) (Các tệp chỉ mục có thể tích lũy, tùy thuộc vào việc sử dụng GIS nào.) Một khi bạn cần nhiều hơn một tệp liên quan để duy trì một tập hợp dữ liệu - và các shapefile yêu cầu tối thiểu ba - thực sự không có thêm rắc rối nào ném vào các tập tin bổ sung. Thêm một tệp siêu dữ liệu, trong khi bạn đang ở đó. :-) Và một khi bạn đã thiết lập tham gia, nó không tự động xảy ra? (Tuy nhiên, tôi không thấy cách dấu thời gian có thể được sử dụng để tham gia. Điều đó sẽ được sử dụng thay thế cho hệ thống kiểm soát phiên bản.)
whuber

3
Nếu bạn có bất kỳ thiên hướng nào để giới thiệu chúng với cơ sở dữ liệu, spatiaLite có GUI để chỉnh sửa trường và các công cụ dòng lệnh cho dữ liệu OSM. Sau đó, bạn có thể liên quan đến một ít SQL và sinh viên của bạn có thể sẽ đi trước đường cong.
Scro

Câu trả lời:


18

Câu trả lời đơn giản nhất mà tôi đã tìm thấy, dựa trên lời khuyên của Ryan Garnett để thực hiện nó trong QGIS:

Sử dụng biểu thức chính

Khả năng này đã được thêm vào máy tính hiện trường 1 năm trước bởi Jürgen Fischer (như được minh họa bởi báo cáo lỗi này ). Tôi đã cố gắng trong một thời gian để tìm hiểu làm thế nào để làm điều này, nhưng không tìm kiếm được "qgis regex" và các thuật ngữ mơ hồ khác.

Chức năng của nó có lẽ được minh họa rõ nhất bởi nhu cầu chuẩn hóa tất cả các giá trị trong cột "tên". Ví dụ: nếu chúng ta cần thay thế tất cả các ô có chứa mẫu "Tesc" bằng 'Tesco', loại bỏ thông tin thừa như "Tesco, đường bệnh xá" (mà những người đóng góp OSM thường xuyên thêm vào), có thể sử dụng chức năng sau:

regrec_Vplace ("tên", 'Tesc. *', 'Tesco')

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

Tôi đoán đây là chức năng biểu thức chính quy của Pythonic, vì nó hơi khác so với grep, mà tôi đã sử dụng trước đây.

Tôi nghĩ rằng cần thêm tài liệu (chi tiết trên trang web của QGIS chỉ giới hạn trong một vài từ) về cách thức hoạt động của nó, vì vậy tôi đã đánh dấu các trang sau để tham khảo trong tương lai:

Giải pháp này có một vài lợi thế:

  1. Đơn giản: không cần thêm chương trình hoặc tiện ích bổ sung
  2. Giới thiệu cho học sinh sức mạnh của các biểu thức chính quy, sử dụng các hàm (Pythonic?) (Văn bản đại diện "'" rất thú vị. Cảnh báo: "hoặc không có biểu tượng nào thất bại) và các hàm dòng lệnh.

Xin lỗi vì đã trả lời câu hỏi của riêng tôi, và cảm ơn nhiều người khác vì đã hướng dẫn tôi hướng tới ánh sáng! Tôi hy vọng chủ đề câu hỏi này sẽ được sử dụng giáo dục cho những người khác phải đối mặt với các vấn đề tương tự.


3
Đừng lo lắng, trả lời câu hỏi của riêng bạn không phải là vấn đề.
underdark

Tôi rất vui vì bạn đã tìm thấy một cái gì đó sẽ giúp bạn. Cảm ơn bạn đã chia sẻ, tôi biết tôi sẽ sử dụng này.
Ryan Garnett

1
Tôi đã hỏi các nhà phát triển của QGIS, đó là Qt regex qt-project.org/doc/qt-4.8/qregapi.html
wildintellect

9

Đây có thể là một câu trả lời ngớ ngẩn, vì nó có thể là mục tiêu học tập cho học sinh lớp, nhưng có lý do tại sao bạn không chỉnh sửa các thuộc tính trong QGIS với việc sử dụng Máy tính Trường không? Trong các phiên bản trước đây của các thuộc tính chỉnh sửa QGIS (trước 1.7) trực tiếp trong QGIS là không thể; do đó cần chỉnh sửa các tệp .DBF trong OpenOffice, v.v.

Kể từ 1.7 và 1.8, bạn có thể chỉnh sửa dữ liệu thuộc tính trực tiếp trong Máy tính trường, với khả năng thực hiện các biểu thức có điều kiện. Ngoài ra còn có các plugin thuộc tính Python, có thể cung cấp các tùy chọn bổ sung để chỉnh sửa thuộc tính. Đây có thể là một giải pháp và hoặc, một tùy chọn cho hướng dẫn của bạn.

Là một sinh viên Thạc sĩ trước đây và bây giờ là một nhân viên đại học, tôi hiểu vấn đề này, yêu cầu trước đây để thực hiện nó bên ngoài QGIS và bây giờ đánh giá cao khả năng thực hiện tất cả các chỉnh sửa thuộc tính trong QGIS. Tôi sẽ rất vui khi được giúp bạn nhiều hơn, nếu bạn mong muốn.


1
Xin chào Ryan, vâng, đó sẽ là giải pháp lý tưởng. Đó là khả năng tìm kiếm và thay thế văn bản trong bảng thuộc tính, để chuẩn hóa các tên OSM lộn xộn, điều đó thúc đẩy tôi thử và chỉnh sửa trực tiếp tệp .dbf. Tôi thà chỉnh sửa nó trong QGIS. Sẽ thử plugin Python Attribution - có thể là giải pháp ý tưởng. Đáng lẽ phải làm cho thực tế tôi đang tìm kiếm khả năng tìm kiếm / thay thế regex rõ ràng hơn trong câu hỏi.
RobinLigsace

@ user1694378 bạn vẫn có thể làm rõ câu hỏi của mình.
underdark

Cảm ơn underdark đã thúc đẩy tôi làm điều đó - phản ánh tốt hơn những gì tôi thực sự muốn làm.
RobinLigsace

3

Bạn có thể sử dụng Cơ sở của LibreOffice để sửa đổi các tệp dbf của mình .

  1. Mở cơ sở (nhận Menu chính)
  2. Chọn "Kết nối với cơ sở dữ liệu hiện có" và chọn loại "dBASE".
  3. Chọn thư mục với các tệp dbf của bạn.
  4. Chọn tùy chọn cuối cùng như mong muốn và "Kết thúc".
  5. Đặt tên cho tệp kết nối cơ sở dữ liệu của bạn bất cứ điều gì bạn muốn (ví dụ: "MyxBasefiles.odb) và lưu nó ở đâu đó. Do đó, hãy truy cập các tệp cơ sở dữ liệu của bạn bằng cách nhấp vào tệp này. Ooooo, Nice.
  6. Chọn "Bảng" trên bảng điều khiển bên trái và có các tệp dữ liệu của bạn (được gọi là "bảng"). Lộn xộn với họ.

Bây giờ bạn có thể bắt đầu chỉnh sửa chúng. Hy vọng rằng nó sẽ đủ tốt cho mục đích của bạn.

Bạn cũng có thể dùng thử DBF Explorer mặc dù chỉ có Windows. Nó không có tìm kiếm và thay thế mặc dù.

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


1
Xin chào RK Cảm ơn câu trả lời nhanh chóng: dường như là một cách đáng tin cậy và an toàn để chỉnh sửa các tệp .dbf. Tôi chỉ thử những gì bạn nói và tôi rất vui khi nói nó hoạt động.
RobinLigsace

Tốt để biết. Bài học tốt đẹp bạn có đó. :)
RK

Nhưng ... tôi vừa thử những gì bạn nói và tôi rất vui khi nói nó hoạt động cho từng tế bào. Thật không may, đây không phải là giải pháp 100% cho ứng dụng cụ thể này, vì có vẻ như OOBase không có chức năng thay thế tìm kiếm cần thiết cho hướng dẫn do [bug] ( list.freedesktop.org/archives/libreoffice-bugs/2010 -Tháng 12 / Lọ ). Chắc chắn làm việc trên các tế bào riêng lẻ mặc dù: đã thử nghiệm. Vì vậy, đó là giải pháp 90% cho chỉnh sửa theo từng ô, trừ khi tôi đã bỏ lỡ chức năng tìm kiếm thay thế. Có ý tưởng nào để thay thế tất cả các mục "Tesc. *" Bằng "Tesco" không?
RobinLigsace

Liên kết tốt hơn cho lỗi OO Base: bug.freedesktop.org/show_orms.cgi?id=32506
RobinLigsace

Cập nhật câu trả lời của tôi.
RK
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.