c# - 在带有 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 视图?
解决方案
您需要使用 Combine 方法将您的样式添加到现有样式中,例如 Aerial3D。设置样式将完全重置您之前设置的任何内容,这就是您的 JSON 覆盖 Aerial3D 的设置调用的原因。
MapStyleSheetEditor 中的示例代码应该向您展示如何执行此操作(小 i 按钮)
myMap.StyleSheet = MapStyleSheet.Combine(new List<MapStyleSheet>
{
MapStyleSheet.AerialWithOverlay(),
MapStyleSheet.ParseFromJson(jsonText)
});
推荐阅读
- python - 如何解决“-:'str'和'str'不支持的操作数类型”错误
- npm - 当我尝试使用“npx 包裹文件名”进行预览时 > 它不起作用
- vba - 在 Mac 上的 powerpoint 幻灯片中添加可点击的复选框
- python - 如何使用beautifulsoup 抓取网站上的数据以查看更多信息
- git - Anaconda/Git:git branch 命令是静默的,尽管它在 WSL Ubuntu 中工作
- google-sheets-formula - 用于匹配公司 URL 的 GoogleSheet 公式
- php - Codeception project can't find AcceptanceTester
- github - 如何获取 Github 管理员操作的 Slack 通知?
- php - Phalcon 停止视图在 dispatch() 后回显
- laravel - Laravel:如何将 pdf 文件直接上传到 Google Cloud Storage 存储桶而无需先保存在本地