首页 > 解决方案 > 在带有 Aerial3D 视图的 UWP MapControl 中使用 json 样式表

问题描述

我在 Win 10 的 UWP MapControl 中绘制多边形。我看到您可以通过生成自定义样式表然后为元素分配样式来更改地图元素的外观。我找到了地图样式表编辑器并创建了一个带有扩展样式的新样式表:

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

如果我按照这个示例并在 2D 地图视图中分配“sxMapView.polyRemoveArea”,一切正常。

但是,如果我切换到 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 视图?

标签: c#uwpuwp-maps

解决方案


您需要使用 Combine 方法将您的样式添加到现有样式中,例如 Aerial3D。设置样式将完全重置您之前设置的任何内容,这就是您的 JSON 覆盖 Aerial3D 的设置调用的原因。

MapStyleSheetEditor 中的示例代码应该向您展示如何执行此操作(小 i 按钮)

myMap.StyleSheet = MapStyleSheet.Combine(new List<MapStyleSheet>
{
    MapStyleSheet.AerialWithOverlay(),
    MapStyleSheet.ParseFromJson(jsonText)
});

推荐阅读