【发布时间】:2014-09-28 03:30:06
【问题描述】:
我正在为 Windows Phone 和 Windows 8 编写一个基于 Bing 地图的通用应用程序,它显示了一些相当大的地图层。
编写初始应用程序没有问题(我遵循的教程位于http://blogs.msdn.com/b/rbrundritt/archive/2014/06/24/how-to-make-use-of-maps-in-universal-apps.aspx),但是我现在在渲染包含数千条折线和数万个坐标的图层时遇到了重大问题。
数据太大 - 在 Windows 8.1 上,地图会导致应用程序崩溃,而在 Windows Phone 8.1 上,图层需要很长时间才能渲染。
根据http://blogs.msdn.com/b/bingdevcenter/archive/2014/04/23/visualize-large-complex-data-with-local-tile-layers-in-bing-maps-windows-store-apps-c.aspx,我应该通过将其转换为本地切片图层来加速它,但是,文章中提到的程序(MapCruncher)需要PNG作为输入。问题是,如何将我的地图数据转换为 PNG?我可以将数据保存为 shapefile、KML 文件或 CSV 文件。我应该这样做吗?我知道我可以通过 Geoserver 执行此操作,但是我的应用程序必须具有离线支持,因此无法根据需要从 Web 服务器下载适当的文件。
如果有人有其他方法可以解决大层的这个速度问题,那将不胜感激。我知道我可以通过四叉树加快 Bing 地图中图层的渲染速度,但是我发现的大部分内容都是理论上的。如果有人有一些我可以插入的代码,那将非常有帮助。
【问题讨论】:
-
我之前解决了这个问题,确保我只在地图上实际可见的情况下向地图添加折线(使用边界框),而不是添加太小而无法注意到的折线当前缩放级别。只需订阅地图的事件以检测视图中的变化,并相应地添加或删除折线。
-
@KrisVandermotten 你有使用这种方法的示例代码吗?
-
不幸的是,它是为客户工作的,我无法再访问源代码了。但实际上它相当简单。只需找出地图的哪一部分正在显示,无论是最初还是通过视图更改时的事件。比删除不可见的折线,并添加可见的折线。在四叉树中组织你的折线会提高性能,但我不确定它是否需要。不过,请预先计算和缓存它们的边界框。
标签: windows-runtime winrt-xaml windows-8.1 windows-phone-8.1 bing-maps