如何在Windows Phone中自定义地图控制器以使用我的地图图像

时间:2012-09-19 12:20:24

标签: windows-phone-7

我正在为我们学校开发地图应用程序。我们学校为我提供了自己的地图图像和坐标信息。所以我想使用我的地图图像作为地图的来源,并根据用户的位置来显示地图图像中的一个点。有人可以给我一些建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

有两种方式:

  1. 可以更改Map Control的地图图块的来源(例如,从Bing到诺基亚或谷歌)。但是,要实现这一点,map-tiles源实现quadkeys等机制非常重要(例如,请参阅this)。因此,要回答您的问题,如果您希望将Bing地图控件与学校的地图一起使用,以便您可以利用控件的定位功能,则需要您正确设计地图平铺服务器才能实现此目的。并且,如果我没有弄错,可能会出现更改Bing Map控件的法律问题。

  2. 但是,考虑到你正在建议地图的图像然后进行定位,那么我建议你可以像在地图上用地理坐标系统校准像素XY坐标系一样容易。由地理观察者提供的坐标。然后,在您的代码中,您可以在这两个系统之间进行简单的映射,然后在图像上绘制一些内容。对于此部分,您可以使用writeablebitmap或仅使用可以使用silverlight覆盖UI控件的事实。因此,对于后者有一个画布,其中包含学校地图的图像,然后在该画布的顶部,您可以使用<image>表示设备,并将其左上角坐标wrt更改为画布。

    因此,总而言之,由于地理观察者为您的代码提供了地理xy坐标,因此存在映射函数到像素XY(您已预先计算)并使用该XY来定位叠加层<image>或者在writeablebitmap上绘制一些“图钉”,您之前绘制了学校地图的图像。当你想要进行缩放时,这种方法会变得复杂,但是这个解决方案很容易扩展。

  3. 这有助于清除一些事情吗?

    在下面的评论中回答第二个问题:

    是的,您可以放大和缩小画布,但是您必须自己编程。控件本身,画布没有这种能力。因此,您必须识别缩放操作的触发器(例如,单击(+)或( - )按钮,或者捏合和拉伸手势)并通过在画布上重新绘制区域的一部分来做出反应。画布,以便现在区域在整个画布上延伸。也就是说,缩放。例如,对于放大的情况:您必须确定与缩放系数对应的几何区域,并与画布对象的尺寸成比例。然后,您必须向上缩放该部分,以便表示它们之间的墙和空间的边和空格按比例增长。此外,您必须确定您在画布上修复的区域的中心点,以便一切都远离它。因此,您将获得适当的缩放效果。此时,您必须重新调整地理坐标到像素XY的映射函数,以便可以在新渲染的曲面上精确准确地绘制感兴趣的“引脚”或对象。

    我知道这可能看起来非常密集,但是一旦你自己理解了所需要的机制,它就会很简单。

    另一个更简单的选择可能是在Web浏览器控件中使用SVG(可缩放矢量图形)。请注意,您仍然需要像素xy系统的地理坐标。但是,通过这种方法,您可以通过SVG(具有向上和向下操作的转换功能)和Web浏览器的组合免费进行缩放,这使您可以渲染SVG并执行放大的手势处理地图。为此,我相信工作成本将重新创建学校的地图,这是SVG的位图。有Inkscape之类的工具,您可以使用这些工具加载地图的图像,然后在其上跟踪轮廓。然后,您可以将该大纲文档另存为SVG。事实上,在处理Canvas方法之前,我会建议你使用这种方法,因为我认为这将是满足您需求的最简单方法。