Як показати мітки лише для довільного вибору предметів?


10

Мені цікаво, як інші вирішують цю проблему: Ви створили карту для чогось із великою кількістю функцій, які позначені міткою. Клієнт / клієнт просить, щоб ви показували лише мітки для X, Y і Z, спираючись на якесь, здавалося б, довільне рішення (наприклад, те, що вони вважають важливими ознаками). Як би ти зробив це зробити?

Деякі ідеї:

  • Створіть новий стовпчик рядка для цієї спеціальної мітки та заповніть лише значення для функцій, які вони хочуть бачити (це може призвести до повторної інформації)
  • Створіть новий булевий стовпець і позначте функції, які вони хочуть бачити з істинними, а потім використовуйте умовне маркування у QGIS 1.8, щоб відображати мітку лише тоді, коли булева правда

6
Друга ідея має багато переваг: (i) вона чітко документує те, що потрібно маркувати, (ii) вона є такою ж постійною і портативною, як і базовий набір даних, (iii) вона забезпечує простий і прямий механізм визначення того, які мітки будуть відображатися ( який навіть переноситься на інший пакет ГІС або планування), (iv) він навіть піддається аналізу, якщо виникають питання щодо взаємозв'язку між цими виборами міток та будь-якими іншими змінними та (v) парсимонізованим кодуванням вибору клієнта , це не створює дублюючої інформації.
whuber

2
@whuber Ви можете зробити цю відповідь, щоб я міг її проголосувати, тому що саме так я б це зробив.
Натан Ш

Відповіді:


11

Друга ідея (створити бульний атрибут для вибору) має багато переваг :

(i) він чітко документує, що потрібно маркувати,

(ii) він такий же постійний і портативний, як базовий набір даних,

(iii) він пропонує простий і прямий механізм визначення того, які мітки будуть відображатися (який навіть переноситься на інший ГІС або графічний пакет),

(iv) це навіть піддається аналізу, якщо виникають питання щодо взаємозв'язку між цими виборами міток та будь-якими іншими змінними, і

(v) парсимонічно кодуючи вибір клієнта, він не створює дублюючої інформації.

Тут працюють деякі загальні принципи побудови та управління базами даних , як це мудро запропоновано в питанні. Один з них полягає в тому, що будь-яка узгоджена інформація повинна бути унікально представлена ​​в базі даних, якщо це можливо. (Інформація, яка використовується як ключі для здійснення з'єднань, і, звичайно, повинна з'являтися в декількох місцях в силу її функції визначення ідентифікацій відповідних записів у різних таблицях.) Для цього принципу є чудові причини, як і кожен, хто намагався підтримувати ненормовану норму. реляційна база даних може засвідчити: якщо ви не послідовно пам'ятаєте оновлювати чи видаляти або додавати цю інформацію до кожного таблиці, в якій вона описується, ваша база даних незабаром стає внутрішньо непослідовною: вона пошкоджена, часто безповоротно.

Інший принцип полягає в тому, що при гарному дизайні реляційних баз даних кожна таблиця повинна представляти єдину концептуальну "сутність" : те, що дані моделюють, або взаємозв'язок між цими речами. Коли клієнт визначає, здавалося б, довільний вибір функцій, вони ефективно вказують підмножину рядків у таблиці. Математично за аксіомою поділу це те саме, що позначати їх булевим полем. Таким чином, будь-яке значуще "довільне" набір речей у базі даних може бути представлене булевим полем і, навпаки, таке поле є хорошим способом зберігання довільних підмножин (або виділень).

Ще один принцип полягає в тому, що вам слід віддавати перевагу використанню базових можливостей управління даними ГІС для зберігання інформації . Альтернатива - деяка спеціальна роботаметод, заснований на здатності ГІС зберігати інформацію в межах своїх «файлів проектів» або іншим незалежним способом. Типовим прикладом цього є практика ручного вибору та розміщення потрібних міток. Часто це зробити швидко і просто. Проблеми виникають щоразу, коли потрібна будь-яка зміна або робота має бути відтворена; та чи інша з цих ситуацій практично неминуча. Розміщення міток вручну є рівнозначним для зберігання інформації (а саме того, який підмножина функцій слід маркувати) поза RDBMS надзвичайно еліптично. А саме, вибрано лише те, за допомогою яких міток з’являються, а які - ні. Подумайте, як би ви вирішили ці подальші проблеми:

  • Клієнт хоче, щоб ті самі мітки відображалися на пов'язаній, але різній карті, частині іншого проекту.

  • Виникає питання, чи пов’язані мітки з якимось іншим атрибутом.

  • Після впровадження декількох змін на етикетках, вас попросять повернути до початкової версії.

У цих випадках робота над вирішенням проблеми може бути величезною: вам доведеться повторно маркувати етикетки або виконувати вручну перехресні перевірки таблиць баз даних, або знайти та відновити старий архівований файл проекту. Якби замість міток було представлено булеве поле в базі даних, робота натомість була б майже тривіальною.


1
Я лише розпочинаю роботу з ГІС, але маю певні знання в базі даних щодо розробки програмного забезпечення. Я підозрюю, що незабаром у мене виникне додаткове запитання щодо збереження вихідного набору даних, створивши окрему, специфічну для клієнта таблицю, яка з'єднується 1-до-1 з оригінальним набором даних і, можливо, надається як PostgreSQL View для прозорості.
Брайан Келлі

Так, і це хороше рішення. З знання вашої бази даних ви знаєте, що рідко є одна ідеальна відповідь; завжди є компроміси. Таблиця пошуку елегантна і ідеальна для деяких ситуацій. Насправді, часто вам просто потрібна нова таблиця, в якій перераховані ідентифікатори функцій, які будуть позначені міткою: приєднання до таблиці атрибутів шару створює нове (зовнішнє) поле, яке є нульовим для того, щоб функції не були марковані, і ви можеш йти. Але тепер у вас є нова таблиця для управління в базі даних: є компроміс.
whuber

8

Можливо, ви можете просто встановити правило в новій маркування на основі виразів. Правило буде працювати як документація того, що ви робили, щоб отримати отримані мітки.

Перевага перед підходом до "булевого прапора" полягає в тому, що це більш гнучко під час роботи над правильним правилом. Змінити та вдосконалити правило легко, не змінюючи базовий набір даних. З іншого боку, він не переноситься для інших пакетів GIS.

Це приклад, коли я маркую лише функції з іменами довше шести символів та з певним класом:

введіть тут опис зображення


1
Але правило в цьому випадку таке: "Я вважаю ці особливості важливими, а інші - не важливими". Я не думаю, що для цього є функція :-)
Брайан Келлі

1
Крім того, це питання пов'язане з "Коли я повинен змінити набір даних і коли я повинен копіювати його?" Я підозрюю, що це набагато більша розмова.
Брайан Келлі

Я просто припустив, що у цих важливих функцій принаймні буде ідентифікатор, який ви можете використовувати, як я використовував атрибут clazz. Для обох рішень є плюси.
нижня смуга
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.