我在 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 视图?
您需要使用 Combine 方法将样式添加到现有样式(如 Aerial3D(。 设置样式将完全重置您之前设置的任何内容,这就是您的 JSON 覆盖 Aerial3D 的集合调用的原因。
MapStyleSheetEditor 中的示例代码应该向您展示如何执行此操作(小 i 按钮(
myMap.StyleSheet = MapStyleSheet.Combine(new List<MapStyleSheet>
{
MapStyleSheet.AerialWithOverlay(),
MapStyleSheet.ParseFromJson(jsonText)
});