Использование таблиц стилей json в UWP MapControl с представлением Aerial3D

Я рисую многоугольники в UWP MapControl в Win 10. Я видел, что вы можете изменить внешний вид элементов карты, создав собственную таблицу стилей и назначив стили элементам. Я нашел таблицу стилей карты Editor и создал новую таблицу стилей со стилями расширения:

{
    "version": "1.*",
    "settings": {
    },
    "elements": {
    },
    "extensions": {
        "sxMapView": {
            "polyRemoveArea": {
                "fillColor": "#80FF0000", 
                "strokeColor": "#FFFF0000", 
                "strokeWidthScale": 5, 
                "visible": true
            },
            "polyProcessArea": {
                "strokeColor": "#FF00FFFF", 
                "strokeWidthScale": 5, 
                "visible": true
            },
            "ptRemoveArea": {
                "visible": true
            },
            "ptProcessArea": {
                "visible": true
            }
        }
    }
}

Если я последую за этот пример и назначьте "sxMapView.polyRemoveArea" в режиме 2D-карты, все работает нормально.

Однако, если я переключусь на просмотр 3D-карты с помощью:

myMapControl.Style = MapStyle.Aerial3D;

Кажется, что стиль игнорируется, и по умолчанию используется синий цвет (я тестировал это, не применяя стиль к многоугольнику, и он был залит синим цветом).

Кроме того, если вы попытаетесь установить карту в 3D перед назначением пользовательской таблицы стилей, пользовательская таблица стилей вернет карту обратно в 2D-вид, даже если нет описывающих это стилей.

myMapControl.Style = MapStyle.Aerial3D; // <- Set map to 3D
string styleSheetJson = "{...json style sheet from above ...}"
...
myMapControl.StyleSheet = MapStyleSheet.ParseFromJson(styleSheetJson); // <-  Map reverts to 2D

Как определить стили расширения для элементов карты в таблице стилей управления картами и использовать представление Aerial3D?


person Geordie    schedule 01.06.2020    source источник


Ответы (1)


Вам нужно использовать метод Combine, чтобы добавить свой стиль к существующему стилю, например Aerial3D. Установка стиля полностью сбросит все, что вы ранее установили, поэтому ваш JSON переопределяет установленный вызов для Aerial3D.

Пример кода в MapStyleSheetEditor должен показать вам, как это сделать (маленькая кнопка i).

myMap.StyleSheet = MapStyleSheet.Combine(new List<MapStyleSheet>
{
    MapStyleSheet.AerialWithOverlay(),
    MapStyleSheet.ParseFromJson(jsonText)
});
person Duncan Lawler    schedule 01.06.2020