Пример создания компонента MapChart

Для выполнения примера необходимо создать html-страницу и выполнить следующие действия:

1. Добавить ссылку на css-файл PP.css.

Также нужно добавить ссылки на следующие js-файлы:

2. В корневой папке проекта должны быть созданы следующие папки:

3. В теге <body> разместить блок с идентификатором «MapType» для хранения панели выбора топоосновы карты и блок «map» для хранения карты:

<body>
    <!-- Контейнер для панели выбора топоосновы карты -->
    <div id="MapType" style="float: right;"></div>
    <!-- Контейнер для мастера -->
    <div id="mapMaster" style="float: left;"></div>
    <!-- Контейнер для карты -->     <div id="map"style="float: left;"></div> </body>

3. Добавить сценарий, создающий карту:

(function() {
    // Создаём переменную, которая будет содержать карту
    map = null;
    // Указываем путь к корневой папке, содержащей файлы ресурсов
    PP.resourceManager.setRootResourcesFolder("../../../resources/");
    // Устанавливаем языковые настройки для ресурсов
    PP.setCurrentCulture(PP.Cultures.ru)
    // Определяем тип карты по умолчанию
    type = PP.MapChartType.SVG;
    // По умолчанию загружаем топооснову из файла Russia.svg в папке SVG
    var topobase = "Russia";
    var dir = "SVG";
    var ext = "svg";
    // Определяем папку с настройками карты
    var settingsDir = "Json/";
    // Определяем файл с настройками карты
    var currentUrl = "MapExample_Russia.js";
    // Функция для создания карты
    function createMap(mapData) {
        if (map) map.dispose();
        var mapContent = document.getElementById("map-content");
        // Получаем JSON-настройки карты
        var settings = JSON.parse(mapData);
        // Определяем путь к нужному файлу в зависимости от типа топоосновы
        switch (type) {
            case 'SVG':
                dir = "Topobase/SVG";
                topobase = "Russia";
                ext = "svg";
                break;
            case 'WebGL':
                dir = 'Topobase/WebGL';
                topobase = "Russia";
                ext = 'tr';
                break;
            case 'Sphere':
                dir = 'Topobase/WebGL';
                topobase = 'World';
                ext = 'trsp';
                break;
            default:
                settings.MapChart.Mode = "Drawing2D";
        };
        // Изменяем тип карты
        settings.MapChart.Type = type;
        // Запрещаем отрисовку элементов карты на канве
        settings.MapChart.RenderToCanvas = false;
        // Определяем топооснову
        settings.MapChart.Topobase = dir + "/" + topobase + "." + ext;
        settings.MapChart.ParentNode = document.getElementById("map");
        // Определяем путь к папке с картинками
        settings.MapChart.ImagePath = "../../../build/img/";
        PP.ImagePath = settings.MapChart.ImagePath;
        // Создаём карту
        map = new PP.MapChart(settings.MapChart ? settings.MapChart : settings);
        // Перерисовываем размеры карты
        updateSize();
    };
    // Выполняет Ajax-запрос для получения файла с JSON-настроками карты
    function getRequest(dataURL) {
        var Request = new PP.Ajax({
            Url: dataURL,
            Success: function(sender, args) {
                createMap(args.ResponseText); // Создаём карту
                Request.dispose();
            }
        });
        Request.send(); // Отправляем запрос
    }
    var idTime;
    // Обновляет размеры карты и удаляет ненужные слои
    function updateSize() {
        if (idTime) clearTimeout(idTime);
        idTime = setTimeout(function() {
            if (map) {
                if (map.getMapTerritoryTranscript()) {
                    map.getMapTerritoryTranscript().hide();
                };
                map.getMilestoneLayer().remove();
                map.getArrowLayer().remove();
            }
        }, 100);
    }
    // Загружает карту
    function loadMapChart() {
        getRequest(settingsDir + currentUrl);
        createToolBar(); // Создаём панель кнопок для переключения типа карты
    }
    // Создаёт панель с кнопками для переключения типа топоосновы карты
    function createToolBar() {
        MapType = new PP.Ui.ToolBar({
            ParentNode: "MapType",
            Items: [{
                Content: 'SVG',
                Id: 'SVG',
                IsChecked: true,
                GroupName: 'mode'
            }, {
                Content: 'WebGL',
                Id: 'WebGL',
                GroupName: 'mode',
                IsVisible: !PP.IsIE
            }, {
                Content: 'Sphere',
                Id: 'Sphere',
                GroupName: 'mode',
                IsVisible: !PP.IsIE
            }],
            IsVisible: false // Скрываем панель инструментов
        });
        MapType.Click.add(changeType);
    }
    /* Обрабатывает нажатия кнопок, расположенных на панели выбора 
    типа топоосновы карты */
    function changeType(s, a) {
        if (a.Item) {
            var aa = a.Item;
            if (aa instanceof PP.Ui.ToolBarButton) {
                changeMapType(a.Item.getContent());
            }
        }
    }
    // Изменяет тип карты
    changeMapType = function(type) {
        this.type = type;
        switch (type) {
            case 'SVG':
            case 'WebGL':
                currentUrl = "MapExample_Russia.js";
                getRequest(settingsDir + currentUrl);
                break;
            case 'Sphere':
                currentUrl = "MapExample_World.js";
                getRequest(settingsDir + currentUrl);
                break;
            default:
                map.setType(type);
        }
    }
    // Создаёт панель масштабирования миникарты
    function createMiniMap() {
            var miniMap = new PP.Ui.MiniMap({
                // Устанавливаем ширину панели масштабирования
                Width: 100,
                // Устанавливаем признак отображения карты
                ShowMap: true,
                // Устанавливаем признак отображения кнопок управления масштабом
                ShowButtons: true,
                // Устанавливаем признак изменения пропорций карты при изменении размера
                KeepProportions: false,
                // Устанавливаем признак сохранения начальных границ
                KeepInitialBounds: true,
                // Устанавливаем высоту кнопок управления масштабом
                ButtonsHeight: 20,
                FrameStyle: new PP.Style({
                    Background: new PP.SolidColorBrush({
                        Color: PP.Color.Colors.lightgreen
                    })
                })
            });
            // Добавляем панель масштабирования на карту
            map.setMiniMap(miniMap);
            // Устанавливаем управляющий элемент панели масштабирования
            miniMap._Control = map;
            // Отображаем панель масштабирования на карте
            map.setMiniMapEnabled(true, false);
            // Убираем значки погоды
            map._MilestoneLayer.remove();
        }
        // Загружаем карту
    loadMapChart();
})();

Примечание. Пользователь может указать свои пути к файлам сценариев, ресурсов и изображений.

4. Для отображения сферы необходимо в конфигурационном файле веб-приложения web.config внутри элемента <staticContent> добавить следующий элемент:

<mimemap fileextension=".trsp" mimetype="application/x-trsp">

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

В результате выполнения примера на html-странице будет размещен компонент PP.MapChart:

См. также:

MapChart