Я ищу лучшее решение для маркировки для моих проектов. Это кажется трудным - но, может быть, я просто слепой?
Мои проекты: я создаю печатные велосипедные книги. Основной масштаб составляет 1: 75 КБ, есть городской масштаб 10 КБ и общий обзор 200 КБ. Поскольку мне нравится иметь «картографическое» качество размещения этикеток, я касаюсь каждой отдельной этикетки и перемещаю ее в лучшую позицию. Я должен сделать это для каждой отдельной шкалы, чтобы мои столбцы с метками для трех шкал выглядели так («шкала 1» обозначает 10k, «шкала 2» - 75k, а «шкала 3» - 200k):
Но прежде чем я попытаюсь объяснить подробно, я строю этот простой Пример-Проект, где вы можете увидеть и протестировать мое (старое) решение для маркировки для 3 шкал: http://www.map-site.de/tmp/LabelingExample.zip
Ну, это работает, но:
- Вам нужно маркировать столбцы для каждого масштаба
- Вам нужен слой для каждого масштаба
Я ищу гораздо лучшее решение без дублирующих слоев и множества столбцов. Я рассчитываю на ваши творческие умы!
РЕДАКТИРОВАТЬ: я добавил эти две очень плотные карты в качестве примеров:
Есть только одна возможная позиция для «Святого Павла Дом», и это не какой-то квадрант:
Каждый ярлык должен быть перемещен вручную. Некоторые из меток не в квадранте.
Ответы:
Я должен сказать, что то, что вы запрашиваете, немного сложнее, потому что вы хотите, чтобы маркировка была видна как в небольшом масштабе, так и в большом масштабе (лучше всего подходит). Итак, идея здесь в том, как разместить точку, которая может быть видна в разных масштабах.
После нескольких испытаний я обнаружил, что вместо создания нескольких столбцов для каждого диапазона шкалы и размещения координат для x и y в фиксированных точках, вы можете создать только один столбец для приоритетных позиций для каждой точки для лучшего местоположения, как вы можете видеть ниже (I следуйте местам в вашем файле):
Затем вы идете в
Layer propoerties -> Labels -> Placement -> Offset from point
илиAround point
оба в порядке, но я выбралOffset from point
.В
Quadrant
ВыберитеData defined override -> Edit
и введите следующую формулу:Здесь
"Priority"
- расположение точек, определенных в имени поляPriority
Вам нужно использовать смещение, чтобы сместить точки для лучшей видимости, и я использовал следующую формулу:
Вот вывод в разных масштабах:
Чтобы увидеть, что представляет каждое число [0-8], в каком месте, пожалуйста, посмотрите на следующее изображение:
Вы можете контролировать положение меток, добавляя значение, соответствующее каждой позиции. Но, к сожалению, вы не можете сделать это методом «нажми и двигай». Вы должны сделать это в таблице атрибутов.
Обновить:
Исходя из вашего требования, что 9 квадрантных позиций недостаточно, я обнаружил, что если вы выберете
Cartography
вместоOffset from point
и выберите приоритет, как на рисунке ниже, у вас будет 12 приоритетных позиций вместо 9. Вам нужно создать полеText
типа, затем ставьте только ту аббревиатуру, которую вы хотите для лучшей позиции 'TL', 'TSL', 'T' ... и т. д. Кроме того, вы можете ввести расстояние, чтобы метка не закрывала точку.источник
Вы можете избавиться от нескольких слоев, используя выражения.
Из того, что я мог видеть в вашем примере, основное различие между слоями - это
Data defined Coordinate X Y
определения, указывающие на различные значения масштаба x, y.Вы можете сделать это в одном слое, выбрав раскрывающиеся списки рядом с X и Y и выбрав edit ..., который вызовет построитель строки выражения.
Для X вы можете использовать что-то вроде
И для Y вы можете использовать что-то вроде
При этом следует использовать значения scale1 x, y, если масштаб карты меньше или равен 1: 10000, и масштаб 2 x, y, если масштаб карты меньше или равен 1: 75 000, и масштаб 3 x, y для всего, что выше ,
Если вам нужно вручную позиционировать для каждого масштаба, я не вижу, как вы можете отойти от столбцов scale # -x и scale # -y для каждого определенного вами уровня.
источник