Автоматизоване маркування - це справді важка проблема, але геометрія функцій не така вже й погана.
Навіть якщо ви можете отримати влаштування на роботу адекватно більшу частину часу, є ймовірні винятки. Деякі з них ви помітите і, можливо, зможете вирішити. Інших, яких ви не помітите, роблячи велику карту чи набір плиток, оскільки ви не можете переливати кожен сантиметр карти в різних масштабах. Майже завжди у вас з’явиться бажання перемістити деякі автоматично розміщені етикетки вручну з картографічної точки зору.
Як я запропонував у своєму коментарі, я б полегшив проблему для двигуна маркування. У цьому випадку я зробив би це, визначивши свої річки як вид таблиці *, з різаною геометрією, щоб відповідати межам озера. Таким чином, в озерах, що підлягають маркуванню, немає річкових особливостей, а також зіткнення міток.
* Я припускаю використання тут 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;
Додайте перегляд у ваш макет:
Хоча проблема на моєму прикладі свідомо сфабрикована, стилі у двох шарах річки (оригінал та вид) однакові, і вони розміщуються на вершині озера в порядку малювання. Коли ви оновлюєте геометрію озер чи річок, вам не потрібно буде робити більше, ніж оновлювати візуалізацію.