Làm thế nào để chỉ hiển thị nhãn cho một lựa chọn các mặt hàng tùy ý?


10

Tôi tò mò về cách người khác giải quyết vấn đề này: Bạn đã tạo một bản đồ cho một cái gì đó với một số lượng lớn các tính năng được dán nhãn. Khách hàng / khách hàng yêu cầu bạn chỉ hiển thị nhãn cho X, Y và Z, dựa trên một số quyết định dường như tùy tiện (ví dụ: những gì họ cho là các tính năng quan trọng). Làm thế nào bạn sẽ đi về làm điều này?

Một vài ý tưởng:

  • Tạo một cột chuỗi mới cho nhãn đặc biệt này và chỉ điền vào một giá trị cho các tính năng mà họ muốn xem (có thể dẫn đến thông tin trùng lặp)
  • Tạo một cột boolean mới và gắn cờ các tính năng mà họ muốn thấy bằng true, sau đó sử dụng nhãn có điều kiện trong QGIS 1.8 để chỉ hiển thị nhãn khi boolean là true

6
Ý tưởng thứ hai có nhiều ưu điểm: (i) nó ghi rõ những gì cần được dán nhãn, (ii) nó là vĩnh viễn và di động như tập dữ liệu cơ bản, (iii) nó cung cấp một cơ chế đơn giản và trực tiếp để xác định nhãn nào sẽ xuất hiện ( mà thậm chí còn có thể di chuyển sang gói GIS hoặc gói âm mưu khác), (iv) thậm chí có thể phân tích được trong trường hợp có câu hỏi về mối quan hệ giữa các lựa chọn nhãn này và bất kỳ biến nào khác và (v) bằng cách mã hóa kỹ lưỡng sự lựa chọn của khách hàng , nó tạo ra không có thông tin trùng lặp.
whuber

2
@whuber bạn có thể đưa ra câu trả lời để tôi có thể bình chọn không vì đó chính xác là cách tôi sẽ làm.
Nathan W

Câu trả lời:


11

Ý tưởng thứ hai (để tạo thuộc tính boolean cho lựa chọn) có nhiều ưu điểm :

(i) nó ghi rõ những gì cần được dán nhãn,

(ii) nó là vĩnh viễn và di động như bộ dữ liệu cơ bản,

(iii) nó cung cấp một cơ chế đơn giản và trực tiếp để xác định nhãn nào sẽ xuất hiện (thậm chí có thể di chuyển sang gói đồ họa hoặc gói đồ họa khác),

(iv) thậm chí có thể phân tích được trong trường hợp có câu hỏi về mối quan hệ giữa các lựa chọn nhãn này và bất kỳ biến nào khác, và

(v) bằng cách mã hóa kỹ lưỡng sự lựa chọn của khách hàng, nó không tạo ra thông tin trùng lặp.

Có một số nguyên tắc quản lý và xây dựng cơ sở dữ liệu chung tại nơi làm việc , như được đề xuất một cách khôn ngoan trong câu hỏi. Một trong số đó là bất kỳ mẩu thông tin mạch lạc nào cũng phải được trình bày duy nhất trong cơ sở dữ liệu nếu có thể. (Thông tin được sử dụng làm chìa khóa để thực hiện các phép nối và liên quan tất nhiên phải xuất hiện ở nhiều nơi nhờ chức năng của nó là xác định các bản ghi tương ứng trong các bảng khác nhau.) Có những lý do tuyệt vời cho nguyên tắc này, vì bất kỳ ai đã cố gắng duy trì trạng thái không chuẩn hóa cơ sở dữ liệu quan hệ có thể chứng thực: nếu bạn không nhớ cập nhật hoặc xóa hoặc thêm thông tin này vào mỗi trong đó nó xuất hiện, cơ sở dữ liệu của bạn sẽ sớm trở nên không nhất quán trong nội bộ: nó bị hỏng, thường là không thể khắc phục được.

Một nguyên tắc khác là trong một thiết kế cơ sở dữ liệu quan hệ tốt, mỗi bảng nên biểu thị một "thực thể" khái niệm duy nhất : thứ gì đó mà dữ liệu đang mô hình hóa hoặc mối quan hệ giữa những thứ đó. Khi một máy khách chỉ định một lựa chọn các tính năng dường như tùy ý, chúng sẽ chỉ định một cách hiệu quả một tập hợp con các hàng trong một bảng. Về mặt toán học, bằng tiên đề của sự phân tách, điều này giống như việc gắn cờ chúng với trường boolean. Do đó, bất kỳ tập hợp con "tùy ý" nào có ý nghĩa trong cơ sở dữ liệu đều có thể được biểu diễn bằng trường boolean và ngược lại, trường đó là một cách tốt để lưu trữ các tập hợp con tùy ý (hoặc các lựa chọn).

Tuy nhiên, một nguyên tắc khác là bạn nên sử dụng các khả năng quản lý dữ liệu cơ bản của GIS để lưu trữ thông tin . Thay thế là một số ad hocphương pháp dựa trên khả năng của GIS để lưu trữ thông tin trong "tệp dự án" hoặc theo một số cách độc lập khác. Một ví dụ điển hình của việc này là thực hành chọn thủ công và đặt các nhãn mong muốn. Thường thì nó nhanh chóng và dễ dàng để làm điều này. Các vấn đề phát sinh bất cứ khi nào cần thay đổi hoặc công việc cần được sao chép; một hoặc một trong những tình huống này là thực tế không thể tránh khỏi. Việc đặt nhãn thủ công tương đương với việc lưu trữ thông tin (cụ thể là tập hợp các tính năng nào sẽ được gắn nhãn) bên ngoài RDBMS theo kiểu elip cực kỳ. Cụ thể, lựa chọn chỉ được chỉ định bởi nhãn nào xuất hiện và nhãn nào không. Hãy suy nghĩ về cách bạn sẽ giải quyết các vấn đề tiếp theo sau:

  • Khách hàng muốn các nhãn giống nhau xuất hiện trong một bản đồ có liên quan nhưng khác nhau, một phần của dự án khác.

  • Một câu hỏi đặt ra là liệu các nhãn có được liên kết với một số thuộc tính khác không.

  • Sau khi thực hiện một số thay đổi cho nhãn theo thời gian, bạn được yêu cầu hoàn nguyên về phiên bản gốc.

Trong những trường hợp này, công việc liên quan để giải quyết vấn đề có thể rất lớn: bạn phải làm lại việc dán nhãn lại hoặc thực hiện kiểm tra chéo thủ công đối với các bảng cơ sở dữ liệu hoặc tìm và khôi phục tệp dự án lưu trữ cũ. Nếu các nhãn thay vào đó được đại diện bởi một trường boolean trong cơ sở dữ liệu, thì công việc thay vào đó sẽ gần như không đáng kể.


1
Tôi chỉ mới bắt đầu với GIS nhưng có một số kiến ​​thức cơ sở dữ liệu từ việc phát triển phần mềm. Tôi nghi ngờ rằng tôi sẽ sớm có câu hỏi tiếp theo về việc lưu giữ tập dữ liệu gốc bằng cách tạo một bảng riêng biệt, dành riêng cho khách hàng được nối 1-1 với tập dữ liệu gốc và có thể được cung cấp dưới dạng Chế độ xem PostgreQuery.
Brian Kelly

Vâng, đó là một giải pháp tốt quá. Với kiến ​​thức cơ sở dữ liệu của bạn, bạn biết rằng hiếm khi có một câu trả lời hoàn hảo; luôn có sự đánh đổi. Một bảng tra cứu là thanh lịch và hoàn hảo cho một số tình huống. Trong thực tế, thường thì bạn chỉ cần một bảng mới liệt kê id của các tính năng sẽ được gắn nhãn: một phép nối với bảng thuộc tính lớp tạo ra một trường (nước ngoài) mới không có nhãn cho các tính năng không được gắn nhãn và bạn tốt để đi. Nhưng bây giờ bạn có một bảng mới để quản lý trong cơ sở dữ liệu: có sự đánh đổi.
whuber

8

Bạn có thể chỉ cần đặt quy tắc trong ghi nhãn dựa trên biểu thức mới. Quy tắc sẽ hoạt động như tài liệu về những gì bạn đã và đang làm để có được các nhãn kết quả.

Ưu điểm của phương pháp "cờ boolean" là điều này linh hoạt hơn trong khi làm việc theo đúng quy tắc. Thật dễ dàng để thay đổi và cải thiện quy tắc mà không thay đổi tập dữ liệu cơ bản. Mặt khác, nó không khả dụng cho các gói GIS khác.

Đây là một ví dụ trong đó tôi chỉ dán nhãn các tính năng có tên dài hơn sáu ký tự và với một lớp nhất định:

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


1
Nhưng quy tắc trong trường hợp này là "Tôi coi các tính năng này là quan trọng và các tính năng khác không quan trọng". Tôi không nghĩ rằng có một chức năng cho điều đó :-)
Brian Kelly

1
Ngoài ra, câu hỏi này liên quan đến "Khi nào tôi nên thay đổi tập dữ liệu và khi nào tôi nên sao chép nó?" Tôi nghi ngờ đó là một cuộc trò chuyện lớn hơn nhiều.
Brian Kelly

Tôi chỉ giả sử những tính năng quan trọng đó ít nhất sẽ có một ID mà bạn có thể sử dụng như tôi đã sử dụng thuộc tính clazz. Có một ưu điểm cho cả hai giải pháp.
underdark
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.