С QGIS 2.12.2, как я могу настроить маркировку слоя, чтобы избежать размещения меток там, где объекты из другого слоя уже существуют?
Например, если у меня есть слой полилинии потока / реки, который содержит «центральные линии» озера, и я размещаю слой многоугольника «озеро» над ним в порядке рисования, я не хочу, чтобы слой реки размещал метку внутри озера. , Вместо этого я бы предпочел, чтобы река была помечена за пределами озера (по мере необходимости). Таким образом, я могу размещать метки из слоя озер и не сталкиваться с коллизиями меток.
Вот пример, где (я намеренно поместил линии сверху для визуальных целей), чего я надеюсь достичь, это отсутствие меток центральной линии реки, показанных внутри многоугольника озера:
Ответы:
Автоматическая маркировка - действительно сложная проблема, но геометрия объектов не так уж и плоха.
Даже если вы в большинстве случаев можете заставить работать должным образом, возможны исключения. Некоторые из них вы заметите и, возможно, сможете решить. Другие вы не заметите, когда создаете большую карту или набор плиток, потому что вы не можете пролить каждый дюйм вашей карты в различных масштабах. Почти всегда у вас будет желание переместить некоторые автоматически размещенные метки вручную с картографической точки зрения.
Как я предложил в своем комментарии, я бы облегчил задачу для механизма маркировки. В этом случае я бы сделал это, определив мои реки как табличное представление *, с геометрией реки, обрезанной с учетом границ озера. Таким образом, в озерах нет речных объектов, которые будут помечены, и нет столкновений.
* Я предполагаю использование здесь СУБД, такой как PostgreSQL / PostGIS, для удобства и возможности обновлять только ваш авторитетный источник данных и получать представление самостоятельно без вашего вмешательства. Но вы также можете заранее поработать со статическими файлами, чтобы обрезать и удалить объекты, но я не рекомендую это делать, если вы когда-нибудь планируете вернуться к карте.
Пример:
Начиная с двух шейп-файлов (может быть таблиц базы данных) рек и озер, когда реки пересекают озера и вызывают проблемы с маркировкой, которые трудно решить полностью и уверенно:
Добавьте их в Postgres, если вам нужно с shp2pgsql :
shp2pgsql -s 4326 /data/lake public.lakes | psql -d mydb
shp2pgsql -s 4326 /data/river public.rivers | psql -d mydb
Затем определите представление с помощью ST_Difference :
Добавьте вид к вашему макету:
Хотя проблема в моем примере специально сфабрикована, стили в двух слоях реки (исходный и вид) одинаковы, и они расположены на вершине озера в порядке рисования. Когда вы обновляете геометрию озер или рек, вам не нужно будет делать гораздо больше, чем обновлять рендеринг.
источник
В QGIS> = 2.12 вы можете установить слой многоугольника «озеро» в качестве препятствия для метки. Это делается через свойства слоя «lake» в разделе «Метки». Измените поле со списком в верхней части с « Без меток » на «Не позволяйте другим меткам закрывать объекты в этом слое ».
источник
Я нахожу маркировку в целом довольно сложной, по крайней мере, для создания меток, которые удовлетворяют чувства моего картографа. Хотя функция автоматической маркировки работает нормально в 80% случаев, в некоторых случаях, таких как проблема с маркировкой реки / озера, не возникает хорошая маркировка. Автоматическая маркировка часто связана с геометрией элемента, например, сколько деталей находится в одной линии, так что сначала все детали маркируются. Конечно, в QGIS есть средства для предотвращения повторной маркировки, что также зависит от масштаба текущего вида карты.
Ну, в любом случае, мой совет не быстрое решение. Я часто создаю специализированный слой только для надписей, чтобы мои надписи легче контролировать. И часто геометрия элементов для картографического представления может столкнуться с хорошей геометрией для маркировки. Поэтому я бы предложил создать новый слой, где потоки не пересекают озера, чтобы вы могли обойти проблему в целом. Наличие дополнительного слоя надписи также может помочь предотвратить проблемы, когда направление надписи не соответствует предполагаемому, поскольку оно связано с тем, как была создана геометрия.
Ну, я боюсь, что мой совет не соответствует вашим ожиданиям, но я надеюсь, что мой альтернативный подход поможет вам как-то.
источник
есть плагин под названием « Маска », который можно использовать для фильтрации меток на основе полигонов.
Однако, как упоминалось в моем предыдущем комментарии, было бы намного проще, если бы вы могли разделить свои линии на пересечении с озерами (см. Различные методы здесь ). Затем вы можете определить метку нулевого размера для сегментов, которые находятся внутри озер («Слой»> «Маркировка»> «Определенные данные настройки»> «Размер», затем выберите столбец, в котором вы храните размер метки). Разделение сохраняет большинство свойств вашей речной сети и является обратимым при растворении, поэтому вы можете продолжить работу с одним слоем (при необходимости сохраните общую длину в определенной таблице атрибутов).
источник