Уникати функцій маркування, якщо вони перекриваються іншим шаром у QGIS?


16

Як за допомогою QGIS 2.12.2 я можу налаштувати маркування шарів, щоб уникнути розміщення міток там, де вже є функції іншого шару?

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

Ось приклад, де (я навмисно ставив лінії зверху для візуальних цілей), чого я сподіваюсь досягти, - це не етикетки по центру річки, показані всередині полігону озера: Лінії маркують всередині багатокутника


4
Як зберігаються та подаються ваші дані? Працюючи з PostGIS, я б спокусився визначити свої річки з видом, де частини річок, що перетинаються озера, викреслені повністю. Хороша автоматизована маркування - це важка проблема, геометрія - не так.
alphabetasoup

Це були форматні файли, але ваша ідея перейти до PostGIS та керувати питаннями даних на ходу - це справді гарна ідея. Я б запропонував вам перенести свій коментар до відповіді, оскільки я можу зробити досить вагомий аргумент, що це хороша резолюція.
RyanKDalton

Відповіді:


9

Автоматизоване маркування - це справді важка проблема, але геометрія функцій не така вже й погана.

Навіть якщо ви можете отримати влаштування на роботу адекватно більшу частину часу, є ймовірні винятки. Деякі з них ви помітите і, можливо, зможете вирішити. Інших, яких ви не помітите, роблячи велику карту чи набір плиток, оскільки ви не можете переливати кожен сантиметр карти в різних масштабах. Майже завжди у вас з’явиться бажання перемістити деякі автоматично розміщені етикетки вручну з картографічної точки зору.

Як я запропонував у своєму коментарі, я б полегшив проблему для двигуна маркування. У цьому випадку я зробив би це, визначивши свої річки як вид таблиці *, з різаною геометрією, щоб відповідати межам озера. Таким чином, в озерах, що підлягають маркуванню, немає річкових особливостей, а також зіткнення міток.

* Я припускаю використання тут RDBMS, як 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 :

CREATE OR REPLACE VIEW rivers_clipped AS
SELECT r.id, ST_Difference(r.geom, l.geom) AS geom, r.name
FROM public.rivers AS r, public.lakes AS l;

Додайте перегляд у ваш макет:

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

Хоча проблема на моєму прикладі свідомо сфабрикована, стилі у двох шарах річки (оригінал та вид) однакові, і вони розміщуються на вершині озера в порядку малювання. Коли ви оновлюєте геометрію озер чи річок, вам не потрібно буде робити більше, ніж оновлювати візуалізацію.

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


2
Хоча я не працював безпосередньо з шаром БД безпосередньо для мене, це рішення мало для мене найбільш сенс, оскільки воно не вимагало редагування геометрії початкових джерел даних (крім завантаження їх у БД). Це чудовий приклад роздумів поза межами форм-файлів та обмежень програми та пошуку креативного рішення проблеми, поєднуючи логіку додатків та БД.
RyanKDalton

13

У QGIS> = 2.12 ви можете встановити полігоновий шар «озеро» як перешкоду для мітки. Це робиться за допомогою властивостей шару шару «озеро», під розділом «Мітки». Змініть поле для комбінації вгорі з " Без міток " на " Забороніть інші мітки від покриття функцій цього шару ".


1
Спасибі. Я шукав щось подібне, і раніше не помічав цього випадаючого варіанту. Однак я б сказав, що це було лише помірно успішно. 1) Це лише "начебто-подібні" відлякувані етикетки від річкового шару (вони все ще з'являються в межах озера, але рідше), і 2) зараз у мене немає міток назви озера :( Я також спробував встановити етикетки на річці> перешкоди "Відмовляти міткам від покриття функцій" (немає успіху) та встановити ваги "Низький та високий" (без успіху) та встановлення "Розміщення> Пріоритет" = "Низький і високий" (немає успіху).
RyanKDalton

Ах, може, я зрозумів неправильно. Якщо у вас є мітки на шарі озера, тоді переконайтесь, що на вкладці візуалізації встановлено прапорець "Відмовити міткам від покриття функцій". Можливо, вам доведеться пограти з повзунком "вага" та іншими параметрами цієї групи, щоб отримати бажані результати.
ndawson

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

4
чому б не видалити (або розділити) ці рядки, коли мова йде про маркування? Вони все одно не корисні для вашої карти.
radouxju

4

Я вважаю маркування в цілому досить важким, принаймні, для створення етикеток, які радують почуття мого картографа. Незважаючи на те, що функція автоматичного маркування працює нормально 80% часу, є такі випадки, як проблема з маркуванням річки / озера, коли вона не створює приємного маркування. Автоматичне маркування часто прив’язується до геометрії функції, наприклад, скільки деталей знаходиться в рядку, щоб спочатку всі частини були марковані. Звичайно, QGIS має засоби для запобігання повторного маркування, що також залежить від масштабу поточного подання карти.

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

Ну, я боюся, що моя порада - це не те, чого ви очікували, але сподіваюся, що альтернативний підхід мені якось допоможе.


Ви заперечуєте, що я можу створити новий набір даних (що було б легко зробити в цьому випадку ... просто стерти функції рядків під полігонами), подвоєння наборів даних не здасться занадто привабливим або керованим, якщо ви не використовуєте такий метод, керований базою даних, як @Richard Law.
RyanKDalton

Я бачу вашу думку, і я розумію ваше вагання створити подібний набір даних двічі. На мій досвід, рівень міток часто більше відрізняється від початкового рівня даних. Наприклад, щоб дотримуватися прикладу річки, можливо, ви хочете додатково змінити геометрію річки, щоб приєднати або розділити елементи функції, щоб створити приємніше маркування, яке повторюється більш регулярно. Принаймні, це часто трапляється для мене, коли, наприклад, маються на увазі дороги ОСМ, які іноді досить довільно організовані.
Френк

3

є плагін під назвою " Маска ", який можна використовувати для фільтрації міток на основі багатокутників.

Як було сказано в моєму попередньому коментарі, проте було б набагато простіше, якби ви могли розділити свої лінії в перетині з озерами (див. Різні методи тут ). Тоді ви можете визначити мітку нульового розміру для сегментів, які знаходяться в озерах ("Шар"> "Маркування"> "Налаштування даних, визначених даними"> "Розмір", а потім виберіть стовпчик, де ви зберігаєте розмір мітки). Розщеплення зберігає більшість властивостей вашої річкової мережі і є оборотним при розчиненні, тому ви можете продовжувати роботу з одним шаром (зберігайте загальну довжину в конкретній таблиці атрибутів, якщо потрібно).


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