Перейти к содержимому

Создание карт-тайлов

QCAD поставляется с двумя инструментами командной строки для создания карт-тайлов для использования с онлайн-картами, такими как Leaflet. Leaflet — это библиотека JavaScript для работы с интерактивными картами в браузере.

Простейший вариант использования онлайн-карты — предоставить посетителям веб-сайта интерактивный, масштабируемый просмотр чертежа.

Вот пример, который создаёт карты-тайлы для любого заданного файла чертежа:

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, высокого разрешения, retina) тайлы размером 512x512 пикселей наряду со стандартными тайлами разрешением 256x256 пикселей.

Для дальнейшего повышения качества мы также используем ключ -a для сглаживания.

Посмотреть пример с Leaflet онлайн

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" ]
}
]
}

После преобразования чертежа в координаты 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^zoomLevel тайлов. Это составило бы 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]».

Использование нескольких процессов (и ядер ЦП)

Заголовок раздела «Использование нескольких процессов (и ядер ЦП)»

Создание карт-тайлов может быть ресурсоёмкой задачей для ЦП, в зависимости от уровней масштабирования, сложности чертежа и других настроек.

Чтобы создавать карты-тайлы быстрее, вы можете распределить задачу между несколькими доступными ядрами ЦП. Для этой возможности 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

Разумеется, вы также можете разделить задачи по уровням масштабирования или использовать части только для более высоких уровней масштабирования и один процесс для всех более низких (более дешёвых) уровней масштабирования и т. д.

Интерактивный пример предоставляет два слоя наложения на карту швейцарского кантона Цюрих: охраняемая лесная зона и коридоры для дикой природы. Исходные данные были представлены в координатах EPSG:2056 (LV95) и преобразованы в EPSG:3857 с помощью dwgmapconvert.

Посмотреть пример с Leaflet онлайн