我想编写一个从图像中绘制地图的导航器应用程序。需要根据用户的导航动态绘制地图。我的想法是将9个图像加载到内存中,然后创建一个视图来显示所需的地图:
alt text http://img526.imageshack.us/img526/2574/screento.png
当用户导航时,移动视图。在需要时,不再看到的图像将被破坏,并且将加载新的图像。
我的第一个问题是我无法让它发挥作用。 :(。我的第二个问题是它看起来太复杂和资源浪费。如果屏幕尺寸发生变化,也很难扩展。
你能告诉我一个绘制地图的有效算法吗? C#中的演示代码将有很大帮助。非常感谢开源库。 :)
谢谢。
答案 0 :(得分:3)
取决于你想要做什么,这可能是一个非常难的问题。例如地理配准,投影,GCS,你不想自己滚动
有许多可用的gis工具已经做过这类事情,对于c#和开源来说 SharpMap或可能google maps/earth
还有各种商业库,例如ESRI或Luciad
答案 1 :(得分:3)
我们实际上将此作为面试问题。我同意jk,你应该使用第三方库,但我会给你一个想法
首先将此数据存储为图像是错误的方法。我们实际上是在提出问题,立即引导人们远离这种方法。您确实希望将单个道路或特征存储为一系列点(最好使用样条曲线,以便您可以有效地表示曲线),然后渲染正确的道路。现在因为你正在使用矢量(而不是光栅)数据,你的缩放和旋转问题就解决了。
当你讨论将它分成较小的方块时,你走的是正确的道路。每个方格应包含有关通过它的所有道路的数据。如果道路穿过边缘,则将其分成两个路段,每个方块一个。这样每个方块都有足够的数据来完全呈现自己。
查看你需要绘制的方块可能有点痛苦,但并不比你用图像解决的更糟糕。我个人将一堆数据结构存储在一个二进制文件中,索引在开头,列出每个方块在文件中的开始位置以及它的长度。这样你就可以非常有效地读取方形数据(跳转到TOC中的正确位置,读取TOC数据,跳转到方形开始,读取方形数据)。您甚至可以优化空方块共享空间。
最后,您可能希望进行不同级别的缩放。就个人而言,我会在几个不同的缩放级别存储一组完全独立的块。这样,您可以根据需要改变块的大小。
同样,重申一下,使用现成的产品,但使用它作为思想实验没有问题。
答案 2 :(得分:1)
OSMTracker是在VB.NET中使用OpenStreetMap tile(images)作为map和dos你想要的。来源可用。 如果您不喜欢VB,那么您可以在codeplex.com上搜索OpenStreetMap,以获取在c#中制作的类似项目