C# 如何从图像中绘制地图?

C# 如何从图像中绘制地图?,c#,algorithm,drawing,gis,C#,Algorithm,Drawing,Gis,我想写一个导航应用程序,从图像中绘制地图。地图需要根据用户的导航动态绘制。我的想法是将9幅图像加载到内存中,然后创建一个视图来显示所需的地图: 当用户导航时,视图将被移动。当需要时,不再可见的图像将被销毁,并加载新的图像 我的第一个问题是我不能让它工作)我的第二个问题是,它看起来太复杂,浪费资源。如果屏幕大小改变,它也很难扩展 你能给我演示一个绘制地图的有效算法吗?用C#编写的演示代码会很有帮助。欢迎使用开源库。:) 多谢各位 取决于你想做什么,这可能是一个相当困难的问题。e、 地理参考,投影

我想写一个导航应用程序,从图像中绘制地图。地图需要根据用户的导航动态绘制。我的想法是将9幅图像加载到内存中,然后创建一个视图来显示所需的地图:

当用户导航时,视图将被移动。当需要时,不再可见的图像将被销毁,并加载新的图像

我的第一个问题是我不能让它工作)我的第二个问题是,它看起来太复杂,浪费资源。如果屏幕大小改变,它也很难扩展

你能给我演示一个绘制地图的有效算法吗?用C#编写的演示代码会很有帮助。欢迎使用开源库。:)


多谢各位

取决于你想做什么,这可能是一个相当困难的问题。e、 地理参考,投影,地面军事系统,你不想玩你自己的

对于c#和开源,有很多gis工具已经可以做这类事情了 或者可能


还有各种商业LIB可用,例如ESRI或Luciad

我们实际上将其用作采访问题。我同意jk,你应该使用第三方库,但我会给你一个主意

首先将这些数据存储为图像是错误的方法。事实上,我们提出这个问题是为了立即引导人们远离这种方法。您确实希望将单个道路或特征存储为一系列点(最好使用样条曲线,以便有效地表示曲线),然后渲染正确的道路。现在,因为您使用的是矢量(而不是光栅)数据,所以缩放和旋转问题得到了解决

当你讨论把它分成更小的正方形时,你走的是正确的道路。每个广场都应该包含通过它的所有道路的数据。如果一条路穿过一条边,将其分成两条路,每个正方形一条。这样,每个正方形都有足够的数据来完全渲染自身

查找需要绘制的正方形可能有点痛苦,但并不比使用图像进行求解更糟糕。就我个人而言,我会将一组数据结构存储在一个二进制文件中,文件开头有一个索引,列出文件中每个正方形的起始位置和长度。这样,您可以非常高效地读取正方形的数据(跳转到TOC中的正确位置,读取TOC数据,跳转到正方形的开头,读取正方形数据)。您甚至可以优化共享空间的空方块

最后,您可能需要执行不同级别的缩放。就我个人而言,我会在几个不同的缩放级别上存储一组完全独立的块。这样,您可以根据需要改变块的大小

再次重申,使用现成的产品,但将其用作思维实验是没有问题的。

是在VB中制作的。NET使用OpenStreetMap平铺(图像)作为地图,并根据需要进行操作。来源是可用的。
如果你不喜欢VB,那么你可以在codeplex.com上搜索OpenStreetMap,查找c#

中制作的类似项目。我的要求很简单,不需要在地图上添加道路/点。只是地图,因为这个应用程序是在移动设备上运行的,这是有限的资源:)我想你会发现,通过这种方式你会得到更好的压缩。你的地图将达到什么样的比例?谷歌地图一直放大到1像素:~50厘米。即使你把它降到1像素:2百万,你仍然需要一吨像素(美国是9826675平方公里,这将是2456668750000像素)。在平均压缩率为982667500000字节(2456…像素*4*0.1)的PNG上。另外,我敢打赌,在知道缩放和旋转的情况下,从线段绘制地图比缩放和旋转现有图像更有效。实际上,我的地图数据大小约为11MB:)