监控安装 ERP

系统集成论坛

 找回密码
 注册通行证

QQ登录

只需一步,快速开始

路由器交换机防火墙系统集成商城 优质产品采购平台
查看: 3793|回复: 0
打印 上一主题 下一主题

水经注离线影像地图读取控件的二次开发教程

[复制链接]

11

主题

14

帖子

39

积分

实习生

跳转到指定楼层
1
发表于 2016-1-14 13:40:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
华为金牌代理
1.说明
9月1日,水经注官网发布了离线影像缓存包读取控件,顾名思义,利用水经注地图下载器下载的.dat缓存文件,可以直接被该控件读取。这对于广大地图应用开发的工作者来说,无疑是个很方便的控件。笔者决定亲自尝试下该控件加载超大离线地图的快感。
源码下载地址:http://www.rivermap.cn/download/DatFileReader.rar
该DEMO下载之后包含三个文件夹,水经注离线影像地图缓存包读取控件,水经注离线影像地图缓存包读取控件_调用示例,水经注离线影像地图缓存包读取控件_调用示例源码。开发者需要的只是第一个:水经注离线影像地图缓存包读取控件。




2.离线地图读取实现
既然要读取离线地图,我们得先下载。再在开发平台中搭建好框架,利用离线地图读取控件,来调用我们的离线地图。


    2.1下载离线地图包
    启动水经注万能地图下载器X2,这里我们下载成都1-15级的影像地图。




设置下载的级数为1-15级,勾选卫星地图和标签。请记录下新建任务时的最小坐标和最大坐标,有什么用后面再详细说明。




然后等待下载完成。在等待的时候我们是不是该做点什么?对了,刚刚不是记录了两个点吗,我们在进行地图开发的时候常常用到web墨卡托的坐标,这里我们演示一下,怎么得到这两个点的墨卡托坐标,来作为加载离线地图的开始范围。
用excel保存刚刚得到的最小坐标和最大坐标,如下:




启动arcmap,按照顺序分别点击【文件】-【添加数据】-【添加xy数据】,在弹出的对话框中选择我们保存的excel,x字段选择x,y字段选择y,编辑投影左边为web墨卡托投影,如下:




确定之后,我们就把两个点添加到了地图中,把他们转成shp文件之后,添加两个字段xM,yM,然后利用几何计算分别算出这两个点的墨卡托坐标,如下:




    2.2 离线地图读取
    在看了水经注官网的DEMO实例源码之后,可以知道,该控件的原理很简单,利用读取控件将离线影像中的图片向外推出,再用地图显示控件显示出来。在这里,笔者使用的是ARCGIS_RUNTIME_SDK_forWPF开发包,并使用其map控件来显示离线影像。
启动vs2010,【文件】-【新建】-【WPF应用程序】,根据自己需要改变window的风格。在开始编写代码之前,我们将下载的离线地图缓存包读取控件和离线的.dat、.idx一并拷贝到解决方案的bin/Debug目录下:








向window控件中加入map控件,删除map的默认显示地图源,设置map的显示风格为stretch最大,这里我们将控件取名为Bmap:




在MainWindow.xaml.cs中写入我们的map加载事件,并在这里将我们刚刚下载的地图的墨卡托坐标范围作为map的显示范围。




为解决方案添加三个类,取名为TileLoader.cs、LabelLayer.cs、MapLayer.cs.




TileLoader.cs里面我们定义.dat的读取方法,在Debug根目录里面调用下载的.dat读取控件DatFileReader.dll,并通过LabelLayer.cs、MapLayer.cs这两个类中方法将图片显示到map控件中,其详细代码如下:

到这里,代码编写工作基本完成,我们来编译运行一下:











    2.3 总结
    成都1-15级的离线影像通过离线缓存包读取控件可以轻松的显示在前端,并且能流畅地放缩自如,相比在线地图,完全不用担心网速原因带来的卡顿。相信水经注离线地图缓存包读取控件会给地图开发者在今后的工作带来很大方便!
有任何疑问,请加 QQ4000280050

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册通行证

x
您需要登录后才可以回帖 登录 | 注册通行证

本版积分规则

联系我们| 手机版|系统集成论坛 ( 京ICP备11008917号 )

GMT+8, 2024-11-26 00:06 , Processed in 0.062555 second(s), 24 queries .

系统集成论坛

BBS.XTJC.COM

快速回复 返回顶部 返回列表