А вы знали, что в Конструкторе CoGIS можно сформировать шаблон веб-карты и её растиражировать с разными параметрами в виде отдельных карт-ссылок на основе URL-параметров?

В картографии бывает необходимо решать задачу горизонтального масштабирования, что подразумевает необходимость дублирования одной и той же по функционалу карты, но на разные территории или на разные временные отрезки. И чтобы все эти карты были представлены в каталоге карт как разные элементы, каждый со своим собственным красивым URL.

Рассмотрим папку с набором карт по ремонту теплосетей в разных городах:

https://cogisdemo.dataeast.com/portal/customers/sgk

Очевидно, надо всячески избегать принципа copy-paste, ведь клонировать карту с множеством настроек хоть не сложно, но потом поддерживать изменения во множестве однотипных карт практически невозможно.

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

Эту задачу можно решить в Конструкторе CoGIS:

1. Шаблонная карта.
Создаёте обычную веб-карту, но скрываете её из каталога. Добавляете в эту карту мап-сервисы, определяете виджеты и всё остальное. Всё как обычно, будто это карта охватывает все данные.

2. Параметризация шаблонной карты.

Определяете, что именно будет параметризировано. Например, для фильтра по идентификатору города. Предположим, у вас в данных есть поле "city_id", поэтому типичный фильтр на конкретный город выглядел бы так:
city_id = 'novosibirsk'

Для параметризации значения выберем любой подходящий идентификатор, например, "city". Макрос будет с этим же именем, только в фигурных кавычках, т.е. "{city}". Этот макрос можно использовать в Конструкторе, в том числе где указывается sql-фильтр на слой - во вкладке "Данные" добавленного мап-сервиса и в фильтрации в статистических блоках виджетов. После этого, если вы откроете карту с url-параметром ?city_id=novosibirsk, то используемый вами в конструкторе макрос {city} будет "на лету" автоматически заменён на значение "novosibirsk". Что подставите в URL, на то и заменится.

3. Тиражирование карт.

В конструкторе для каждого города создаёте элемент каталога уже не как Карту, а Ссылку. Задаёте параметризированную ссылку с идентификатором города (та самая приписка "?city=novosibirsk"), и заодно параметры отображения ссылки в каталоге карт как полноценной плашки (название, картинка и пр.). Вот и получаются однотипные карты-ссылки вида

https://cogisdemo.dataeast.com/portal/customers/sgk/map?city=novosibirsk

https://cogisdemo.dataeast.com/portal/customers/sgk/map?city=krasnoyarsk

При этом каждой Ссылке как элементу каталога в Конструкторе можно как обычно определить доступ по группе пользователей, чтобы "лишние" плашки территориально-заточенному пользователю вашей организации были не видны.

4. Карта без фильтров.

Если ваша карта предполагает вариант открытия шаблонной карты без фильтров, то просто не указывайте url-параметр, а sql-фильтр в Конструкторе на слои немного усложните, чтобы "и нашим и вашим":

'{city}' = '' OR city_id = '{city}'

тогда можно открывать и без параметра:

https://cogisdemo.dataeast.com/portal/customers/sgk/map

5. Значения по умолчанию для параметров.

Представим, что вы хотите использовать год для выбора или фильтрации. Это логично реализовать как возможность явной передачи номера года (например, 2025) в URL, так и автоматическое назначение текущего года при отсутствии параметра. Для этого в вертикальной вкладке "Права доступа и фильтрация" у шаблонной карты в Конструкторе определите "Значения по умолчанию для макросов". Например, параметр year по умолчанию будет равен "{CurrentYear}" (есть такой в CoGIS, как и {CurrentUser}, {CurrentDate-5d} и другие), что преобразуется в номер текущего года на момент открытия карты, и это будет режим по умолчанию. Но при этом остаётся возможность переопределить год через url-параметр:

https://cogisdemo.dataeast.com/portal/customers/sgk/map?city=novosibirsk&year=2022

6. Определение дополнительных макросов на основе url-параметров.

Каждая ссылка-плашка открывает шаблонную карту с идентификатором города. Но захочется же написать красивое русское название в открывшейся карте. Конечно, можно для этого определить и второй параметр - city_name, но ссылка будет длинная, к тому же русские символы придётся кодировать для передачи как часть URL, и наш "Новосибирск" станет нелицеприятного вида строкой "%D0%9D%D0%BE%D0%B2%D0%BE%D1%81%D0%B8%D0%B1%D0%B8%D1%80%D1%81%D0%BA". Поэтому в шаблонной карте, в той же вкладке "Права доступа и фильтрация" надо определить блок "Назначение дополнительных макросов по параметрам, передаваемым через URL", где на основе одного параметра можно задать значение других параметров, которые можно использовать в Конструкторе в шаблонной карте.

7. Красивый URL без параметров, но с параметризацией.

Согласитесь, что ссылка вида https://cogisdemo.dataeast.com/portal/customers/sgk/map?city=novosibirsk

уступает более лаконичной https://cogisdemo.dataeast.com/portal/customers/sgk/city/novosibirsk

При этом опциональное указание года по-прежнему должно работать через url-параметр:
https://cogisdemo.dataeast.com/portal/customers/sgk/city/novosibirsk?year=2022

Для этого лишь можно использовать галочку "Скрывать редирект на карту из этого же Портала" из вертикальной вкладки "Общая информация". В этом случае переброска от ссылки на шаблонную карту произойдёт, но только по сути, а не для браузерной строки. Заодно "внутренняя кухня" с URL-параметрами просто будет никому не известна, ведь для обывателя клик на обычную с виду плашку с городом будет приводить к открытию карты этого города. А если вы уже имеете отксерокопированные карты, то легко сможете подменить такие карты-клоны на ссылки, оставив прежние URL, к которым привыкли пользователи!

Бонус. Параметры можно использовать даже в URL сервисах, добавленных в карту в Конструкторе!

Например, такую возможность мы используем для прототипа "Портала пространственный данных"

https://cogisdemo.dataeast.com/portal/samples/geoportal

на нашем демонстрационном портале. Карта с просмотром выбранного набора данных - единая, шаблонная, а мап-сервис для каждого набора - свой (хоть и автоматически публикуемый в ГИС-сервере по файлу пользователя, но это уже другая история). Поэтому дубляжа настроек в Конструкторе не происходит, даже когда надо предоставить интерфейсный доступ до несколько однотипных мап-сервисов!

P.S. Описанные выши возможности не про права доступа, а именно про удобное представление единой карты в виде "кусочков" в вашем каталоге карт. Про полноценные права доступа на данные мы ещё напишем, там тоже всё очень интересно.