arcgis移动客户端几种离线地图的加载方案

移动GIS中,通常将数据分为两大类:basemap layer和operational layer。前者是指漫游或导航时起参考作用的图层,这些图层内容通常不会变化,只起到视觉辅助作用,称为底图图层;后者是指存储GIS数据的图层,比如可通过这些图层来提供属性/空间查询操作,或者对其内容进行编辑,然后与服务器端进行同步,称为业务图层。
  目前ArcGIS移动产品有5种,基于Windows Mobile平台的ArcPad和ArcGIS Mobile,这两个产品已经很成熟了,都有各自的离线缓存格式,其中ArcGIS Mobile从10版本开始,可以直接读取ArcGIS Server缓存地图服务的切片文件做为basemap layer,支持exploded和compact两种格式。
自动拖把  相对于以上两个老牌移动产品,三个刚出道的小弟ArcGIS for iOS,ArcGIS for Android和ArcGIS for Windows Phone就走了不同路线:依赖于ArcGIS Server的REST服务。因此几乎所有操作,包括显示地图,都需要用到ArcGIS Server发布的各种服务。这三个产品的离线功能将来肯定是会有的,但具体的时间表还无法确定。
  针对ArcGIS for iOS/Android/Windows Phone,本文提出3种可行的离线底图(basemap layer)的解决方案,供各位参考。以ArcGIS for Windows Phone为例。
1、ArcGIS Server地图服务的Exploded格式缓存文件
  ArcGIS API for Windows Phone中,提供了ArcGISTiledMapServiceLayer用来加载ArcGIS Server发布的缓存地图服务,它的原理是Map控件计算好需要加载的切片的row,col,level参数,利用ArcGISTiledMapServiceLayer里的GetTileUrl方法提供如何获得指定参数的切片文件,最后拼接成完整的地图。
  因此我们可以通过继承ArcGISTiledMapServiceLayer的父类,TiledMapServiceLayerTiledLayer,来实现自己的自定义图层,比如用它来加载Google Maps天地图等各种地图。加载这些在线地图都是通过重写GetTileUrl()方法来实现的。
  对于已经存放在硬盘上的缓存文件,该如何加载呢?这几个图层还有一个方法,GetTileSource。这个方法有一个onComplete action,可以传入ImageSource类型的参数,它比GetTileUrl来的更直接。其实GetTileSource方法中调用了GetTileUrl方法的结果(一个获得tile的url字符串),利用这个字符串向服务器端发送请求,请求回来的结果就是切片图片的二进制流,再将这个二进制流形成ImageSource,通过onComplete方法返回。
  所以我们可以抛开GetTileUrl,直接重写GetTileSource方法,来根据row,col,level参数,读取地图服务的缓存文件。首先将Exploded格式的地图服务缓存文件拷贝到手机中:
  包含conf.cdi(ArcGIS Server 10版本中才有,记录了缓存的全图范围)和l文件的好处是,我们可以在代码中读取这两个文件来动态生成我们的Tiling Scheme,以完成图层初始化的工作。从配置文件中读取参数后,就可以重写GetTileSource方法了。部分代码如下:
  1:protectedoverridevoidGetTileSource(int level, int row, int col, Action<System.Windows.Media.ImageSource>onComplete)
  2:        {
  3:string f = string.Empty;
  4:if (_cacheTileFormat.ToLower().Contains("png"))
  5:                f = ".png";
  6:elseif (_cacheTileFormat.ToLower().Contains("jpeg") || _cacheTileFormat.ToLower().Contains("jpg"))
  7:                f = ".jpg";
  8:else
  9:thrownew Exception("切片格式不明:" + _cacheTileFormat);
  10:#region Exploded读取
  11:if (_storageFormat == StorageFormat.esriMapCacheStorageModeExploded)
  12:            {
  13:stringbaseUrl = _path;// "/WP_LocalCacheReader;component/Assets/usa_exploded/"
  14:baseUrl += @"/_alllayers";
  15:string l = "L";
  16:                l = level.ToString().PadLeft(2, '0');
  17:string r = "R";
  18:                r = String.Format("{0:X}", row).PadLeft(8, '0');
  19:string c = "C";
  20:                c = String.Format("{0:X}", col).PadLeft(8, '0');
延时冲水阀
  21:stringstr = baseUrl
  22:                    + @"/L" + l
物联网电池  23:                    + @"/R"物流导航 + r
  24:                    + @"/C" + c + f;
  25:BitmapImageimg = newBitmapImage(new Uri(str,UriKind.RelativeOrAbsolute))
  26:                {
  27:CreateOptions = BitmapCreateOptions.DelayCreation
  28:                };
  29:img.ImageFailed += (s, a) =>
全自动淘洗磁选机
  30:                {
  31:stringuri = _path + "/missing" + _tileRows.ToString() + f;
  32:BitmapImage image = newBitmapImage(new Uri(uri, UriKind.RelativeOrAbsolute))
  33:对接接头                    {

本文发布于:2024-09-22 19:40:56,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/4/246233.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图层   缓存   地图
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议