Как показывать только ярлыки для произвольного выбора предметов?

10

Мне любопытно, как другие решают эту проблему: вы создали карту для чего-то с большим количеством отмеченных объектов. Клиент / клиент просит, чтобы вы отображали только метки для X, Y и Z, основываясь на каком-то, казалось бы, произвольном решении (например, что они считают важными функциями). Как бы вы поступили так?

Некоторые идеи:

  • Создайте новый строковый столбец для этой специальной метки и заполните только значение для объектов, которые они хотят видеть (может привести к дублированию информации)
  • Создайте новый логический столбец и пометьте объекты, которые они хотят видеть, с помощью true, затем используйте условные метки в QGIS 1.8, чтобы отображать метку только тогда, когда логическое значение истинно
Брайан Келли
источник
6
Вторая идея имеет много преимуществ: (i) она четко документирует то, что нужно пометить, (ii) она является такой же постоянной и переносимой, как и базовый набор данных, (iii) она обеспечивает простой и прямой механизм для определения того, какие метки появятся ( который даже переносим в другую ГИС или пакет печати), (iv) он даже поддается анализу в случае возникновения вопросов о взаимосвязи между этими вариантами выбора меток и любыми другими переменными, и (v) экономно кодируя выбор клиента , он не создает дублирующую информацию.
whuber
2
@whuber, можешь ли ты дать такой ответ, чтобы я мог проголосовать за него, потому что именно так я и поступил бы.
Натан W

Ответы:

11

Вторая идея (создать логический атрибут для выбора) имеет много преимуществ :

(Я) он четко документирует, что должно быть помечено,

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

(iii) он предоставляет простой и прямой механизм для определения того, какие ярлыки появятся (который даже переносится в другую ГИС или пакет печати),

(iv) он даже поддается анализу в случае возникновения вопросов о взаимосвязи между этим выбором меток и любыми другими переменными, и

(v) экономно кодируя выбор клиента, он не создает дублирующую информацию.

Здесь есть некоторые общие принципы построения базы данных и принципы управления , как мудро предложено в этом вопросе. Одним из них является то, что любая связная часть информации должна быть уникально представлена ​​в базе данных, если это возможно. (Разумеется, информация, используемая в качестве ключей для реализации объединений и связей, должна появляться в нескольких местах в силу своей функции идентификации соответствующих записей в разных таблицах.) Для этого принципа есть веские причины, так как любой, кто пытался поддерживать ненормализованный Реляционная база данных может засвидетельствовать: если вы не помните, чтобы постоянно обновляли, удаляли или добавляли эту информацию к каждому В таблице, в которой она появляется, ваша база данных вскоре становится внутренне непоследовательной: она повреждена, часто безвозвратно.

Другой принцип заключается в том, что в хорошем дизайне реляционной базы данных каждая таблица должна представлять одну концептуальную «сущность» : нечто, что моделируют данные, или взаимосвязь между этими вещами. Когда клиент указывает, казалось бы, произвольный выбор функций, он фактически указывает подмножество строк в таблице. Математически, по аксиоме разделения это то же самое, что помечать их логическим полем. Таким образом, любое значимое «произвольное» подмножество вещей в базе данных может быть представлено логическим полем, и, наоборот, такое поле является хорошим способом хранения произвольных подмножеств (или выборов).

Еще один принцип заключается в том, что вы предпочитаете использовать базовые возможности управления данными ГИС для хранения информации . Альтернатива какая-то специальнаяметод, основанный на способности ГИС хранить информацию в своих «файлах проекта» или каким-либо другим независимым способом. Типичным примером этого является практика ручного выбора и размещения нужных ярлыков. Часто это быстро и легко сделать. Проблемы возникают всякий раз, когда требуется изменение или работа должна быть воспроизведена; та или другая из этих ситуаций практически неизбежна. Ручное размещение меток равносильно хранению информации (а именно, какое подмножество признаков должно быть помечено) вне СУРБД в чрезвычайно эллиптической форме. А именно, выбор определяется только тем, какие ярлыки появляются, а какие нет. Подумайте, как бы вы могли решить следующие проблемы:

  • Клиент хочет, чтобы одинаковые метки появлялись на связанной, но другой карте, являющейся частью другого проекта.

  • Возникает вопрос, связаны ли метки с каким-либо другим атрибутом.

  • После внесения нескольких изменений в ярлыки с течением времени вас попросят вернуться к исходной версии.

В этих случаях работа по решению проблемы может быть огромной: вам нужно заново повторить маркировку, или выполнить ручную перекрестную проверку таблиц базы данных, или найти и восстановить старый заархивированный файл проекта. Если бы вместо этого метки были представлены логическим полем в базе данных, работа была бы почти тривиальной.

Whuber
источник
1
Я только начинаю работать с ГИС, но у меня есть кое-какие знания в области разработки программного обеспечения. Я подозреваю, что вскоре у меня возникнет дополнительный вопрос о сохранении исходного набора данных путем создания отдельной клиент-специфичной таблицы, которая соединяется 1-к-1 с исходным набором данных и, возможно, предоставляется в виде представления PostgreSQL для прозрачности.
Брайан Келли
Да, это тоже хорошее решение. Зная свои базы данных, вы знаете, что редко бывает один идеальный ответ; всегда есть компромиссы. Таблица поиска элегантна и идеально подходит для некоторых ситуаций. На самом деле, часто вам просто нужна новая таблица, в которой перечислены идентификаторы объектов, которые должны быть помечены: соединение с таблицей атрибутов слоя создает новое (внешнее) поле, которое является нулевым, чтобы объекты не были помечены, и вы хорошо пойти. Но теперь у вас есть новая таблица для управления в базе данных: есть компромисс.
whuber
8

Вероятно, вы можете просто установить правило в новой маркировке на основе выражений. Правило будет работать как документация того, что вы делали, чтобы получить получившиеся ярлыки.

Преимущество по сравнению с подходом «логический флаг» состоит в том, что он более гибок при работе с правильным правилом. Легко изменить и улучшить правило без изменения базового набора данных. С другой стороны, он не переносим на другие пакеты ГИС.

Это пример, где я помечаю объекты только именами длиной более шести символов и определенным классом:

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

Подземье
источник
1
Но правило в этом случае таково: «Я считаю, что эти функции важны, а другие не важны». Я не думаю, что есть функция для этого :-)
Брайан Келли
1
Кроме того, этот вопрос связан с "Когда я должен изменить набор данных и когда я должен скопировать его?" Я подозреваю, что это гораздо более широкий разговор.
Брайан Келли
Я просто предположил, что эти важные функции будут иметь по крайней мере идентификатор, который вы можете использовать, как я использовал атрибут clazz. Есть плюсы для обоих решений.
Подземье