Генерування фрагментів карти
QCAD постачається з двома інструментами командного рядка для створення фрагментів карти (map tiles) для використання з онлайн-картами, такими як Leaflet. Leaflet — це бібліотека JavaScript для роботи з інтерактивними картами у браузері.
Представлення креслення онлайн
Section titled “Представлення креслення онлайн”Найпростіший сценарій використання онлайн-карти — надати відвідувачам вебсайту інтерактивний, масштабований вигляд креслення.
Ось приклад, який генерує фрагменти карти для будь-якого заданого файлу креслення:
dwg2maptiles -z 0-6 -c -b white -hq-postfix=@2x -a -o path/to/output/directory drawing.dxfПеремикач -z задає рівні масштабування для генерування, тут — від рівня 0 до рівня 6. Це означає, що починаючи з рівня 0 (усе креслення або автомасштаб) користувач може збільшити масштаб 6 разів, доки не буде досягнуто межі. Щоразу, коли користувач збільшує масштаб, креслення збільшується у 2 рази, тож з 6 рівнями масштабування користувач може збільшити масштаб у 2^6 (=64) разів. Генерування більшої кількості рівнів масштабування потребує більше часу та дискового простору. Кожен додатковий рівень масштабування зазвичай потребує вчетверо більше часу та дискового простору для генерування, ніж попередній.
Фрагменти генеруються в заданому вихідному каталозі (-o) зі стандартною структурою каталогів та іменами файлів для фрагментів карти (z/x/y.png).
У наведеному вище прикладі ми хочемо, щоб креслення відтворювалося на білому тлі (-b white). Білі лінії слід виправити на чорні, щоб гарантувати видимість усіх ліній (-c).
Аргумент -hq-postfix=@2x вказує dwg2maptiles генерувати високоякісні (hq, high-res, retina) фрагменти розміром 512x512 пікс. поряд зі стандартними фрагментами розміром 256x256 пікс.
Для подальшого підвищення якості ми також використовуємо перемикач -a для згладжування.
Переглянути приклад із Leaflet онлайн
Генерування георозташованих фрагментів карти
Section titled “Генерування георозташованих фрагментів карти”dwg2maptiles також можна використовувати для генерування точних накладень для карт світу. Для цього креслення зазвичай доводиться перетворювати з локальної системи координат у координати Web Mercator, які поширено використовуються онлайн-картами.
QCAD Professional постачається з окремим інструментом командного рядка для перетворення креслень з однієї системи координат (CRS) на іншу: dwgmapconvert.
dwgmapconvert зазвичай використовується для перетворення всіх координат у заданому файлі креслення з відомої, локальної системи координат у систему координат EPSG:3857 (яку іноді називають «Web Mercator»). Це система координат, яку використовує більшість онлайн-карт, наприклад Google Maps чи Mapbox. Щоб використати креслення як вхідні дані для dwg2maptiles і створити георозташовані фрагменти карти, креслення має бути в системі координат EPSG:3857.
У системі координат EPSG:3857 уся карта світу вміщується в квадрат зі стороною 20037508.3427892 м на рівні масштабування 0. Якщо креслення перетворюється в цю систему координат, воно трансформується таким чином, щоб уміститися в цей світовий квадрат і щоб креслення розташовувалося у правильних, спроєктованих світових координатах.
Наприклад, якщо креслення було створене в EPSG:2056 (також LV95, локальна швейцарська система координат), його можна перетворити на EPSG:3857 за допомогою dwgmapconvert так:
dwgmapconvert -segment-length=0.5 -crs-in=EPSG:2056 -crs-out=EPSG:3857 -f -o drawing_epsg3857.dxf drawing_epsg2056.dxfОскільки картографічні проєкції зазвичай нелінійні, криві та довші лінії потрібно розбити на невеликі сегменти ліній, які потім можна спроєктувати нелінійним способом. Якщо надано перемикач -segment-length, dwgmapconvert виконує цю сегментацію автоматично, використовуючи задану довжину сегмента. Довжина сегмента вказується в одиницях креслення оригінального креслення (тут — метрах).
-crs-in використовується для задання вхідної системи координат, тут EPSG:2056.
-crs-out використовується для задання вихідної системи координат, яка має бути EPSG:3857, якщо вивід згодом буде використано з dwg2maptiles.
dwgmapconvert постачається з підтримкою LV95 як вхідних даних та WebMercator як вихідних.
Інші системи координат буде додано в майбутніх випусках або їх може додати користувач.
Щоб додати підтримку нової системи координат, потрібно надати два рівняння для перетворення координат із нової системи координат у WGS84 (довгота/широта, як координати GPS).
Нові системи координат можна додати до конфігураційного файлу JSON під назвою CRS.json, розташованого в теці «scripts» використовуваного встановлення QCAD. Ось приклад файлу CRS.json, який налаштовує систему координат LV95. Щоб мати змогу використовувати LV95 як вхідні дані для інструмента dwgmapconvert, нам потрібно надати розділ «toWgs84» із рівняннями для перетворення координат x та y. Тут ми також використовуємо дві допоміжні змінні, x_ та y_, які потрібно ініціалізувати в рівнянні x, щоб вони були доступні в обох рівняннях.
Ми могли б також надати розділ «fromWgs84», щоб дозволити перетворення з інших систем координат у LV95. Обидва розділи є необов’язковими, залежно від напрямку перетворення, який ви хочете підтримувати.
{ "CRS" : [ { "id" : "EPSG:2056 CH1903+ / LV95", "toWgs84" : { "x": "x_ = (y-1200000)/1000000; y_ = (x-2600000)/1000000; (2.6779094 + 4.728982*y_ + 0.791484*y_*x_ + 0.1306*y_*x_*x_ - 0.0436*y_*y_*y_) * 100 / 3", "y": "(16.9023892 + 3.238272*x_ - 0.270978*y_*y_ - 0.002528*x_*x_ - 0.0447*y_*y_*x_ - 0.0140*x_*x_*x_) * 100 / 36" }, "aliases" : [ "LV95", "Swiss" ] } ]}Генерування фрагментів карти
Section titled “Генерування фрагментів карти”Щойно ми перетворили креслення в координати EPSG:3857, ми можемо скористатися dwg2maptiles для генерування фрагментів для шару накладення в leaflet:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -b transparent -o path/to/output/directory drawing_epsg3857.dxfЗауважте, що нам потрібно передати перемикач -web-mercator до dwg2maptiles, щоб він знав, що не повинен виконувати автомасштаб, а має генерувати накладення карти в точних координатах EPSG:3857, наявних у файлі.
-skip-empty вказує dwg2maptiles не генерувати фрагменти, які не містять жодної частини креслення. Без цього перемикача на кожен рівень масштабування буде згенеровано 2^рівеньМасштабування фрагментів. Це було б 4’194’304 фрагменти для рівня масштабування 22. Оскільки креслення-накладення дуже ймовірно охоплює лише дуже малу частину карти світу, цей перемикач слід завжди використовувати під час створення карт-накладень.
-b transparent встановлює тло прозорим, тож карту можна використовувати як накладення на наявну карту світу (наприклад, Google Map, Mapbox тощо). Щоб керувати кольором, у якому відображаються чорні чи білі лінії, тло можна встановити прозорим чорним або прозорим білим за допомогою -b "#00ffffff" (прозоре біле тло, чорні лінії) або -b "#00000000" (прозоре чорне тло, білі лінії) відповідно. У цьому випадку обов’язково також передайте перемикач -c, щоб примусово застосувати автоматичне виправлення кольору.
Аргумент -hq-postfix=@2x можна використати для генерування фрагментів високої роздільності (512 пікс.) на додаток до звичайних фрагментів 256 пікс. Значення «@2x» рекомендоване й широко використовується для фрагментів високої роздільності, зокрема в leaflet. З цим перемикачем для кожного фрагмента низької роздільності «N.png» створюється фрагмент високої роздільності «[email protected]».
Використання кількох процесів (та ядер ЦП)
Section titled “Використання кількох процесів (та ядер ЦП)”Генерування фрагментів карти може бути завданням, інтенсивним для ЦП, залежно від рівнів масштабування, складності креслення та інших параметрів.
Щоб генерувати фрагменти карти швидше, ви можете розподілити завдання між кількома доступними ядрами ЦП. Для цієї можливості dwg2maptiles пропонує перемикач -s для генерування лише частини потрібних фрагментів. Перемикач -s очікує два параметри, розділені комами: частину для генерування та загальну кількість використаних частин. Наприклад, -s 1,4 згенерував би першу частину з чотирьох частин загалом. Щоб згенерувати всі фрагменти наведеного вище прикладу за допомогою чотирьох ядер ЦП, ви можете запустити:
dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 1,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 2,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 3,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &dwg2maptiles -web-mercator -skip-empty -hq-postfix=@2x -z 22 -s 4,4 -b transparent -o path/to/output/directory drawing_epsg3857.dxf &waitЗвісно, ви також могли б розподілити завдання за рівнями масштабування або використовувати частини лише для вищих рівнів масштабування та один процес для всіх нижчих (дешевших) рівнів масштабування тощо.
Приклад
Section titled “Приклад”Інтерактивний приклад надає два шари накладення для карти швейцарського кантону Цюрих: захищену лісову зону та коридори дикої природи. Оригінальні дані надійшли в координатах EPSG:2056 (LV95) і були перетворені на EPSG:3857 за допомогою dwgmapconvert.