首页 / 浏览问题 / 移动GIS / 问题详情
iclient for android 多图层显示
21EXP 2016年11月28日
使用产品:iclient 8c 810

操作系统:android-6.0

数据类型:前端使用iserver发布的wmts图层
问题详细描述:1、手机端加载图层(使用的是iserver发布的wmts图层),缩放等级变化后,部分图层显示不出来或者显示一下就消失 2、android端是否有跟web端类似的接口setAllOverlays
问题重现步骤: 打开地图,缓慢改变缩放等级,部分图层不显示或者只是显示一点点就消失

1个回答

你好,你可以在js客户端中打开你发布的wmts数据服务缩放时是否正常,如果也用这种问题,可能是数据发布的问题或者数据的问题;setAllOverlays方法在iclient for android中有对应的方法,可以将多个layerview添加到mapview中叠加显示。
2,042EXP 2016年11月28日

你好,感谢回复我的问题。对我提出的问题,我补充一下:

1、web端也是显示同一个iserver发布的wmts图层,没有任何问题,应该可以排除数据发布或者数据的问题。

2、另一种方式(不通过iserver,直接调第三方,如国家天地图的服务),iclient for android,调用addLayers将多个图层添加,发现出现地图显示比较卡,相互覆盖的情况,另外坐标边界BoundingBox layerBounds = new BoundingBox(new Point2D(-360.0D, 180.0D),new Point2D(360.0D, -180.0D));只能设置360与180,否则只能显示一半的地图,设置后,经纬度坐标也相应需要乘以2,如Point2D pc = new Point2D(119.6846*2,29.80042*2);

地图开始显示比较卡,是因为需要下载瓦片显示,这个和网速也有关系,下载的瓦片在本地有缓存,浏览地图同一级比例尺下的同一区域用的就是本地缓存;对地图的显示范围设置要根据你的数据是什么坐标系,如果是地理坐标系经纬度的范围是(-180,180)、(-90,90),如果是投影坐标系则根据iserver中地图的范围来设置。

采用的是地理坐标系(wgs84),设置(-180,180)、(-90,90)只能显示一半的世界地图,代码如下,调用的国家天地图服务,不经过iserver:

        //创建地图窗口 
         mapView = (MapView) this.findViewById(R.id.mapview); 
         //resolutions - 分辨率数组 
         double[] resolutions = {1.406250,0.703125,0.35156249999999994,0.17578124999999997, 0.08789062499999998, 0.04394531249999999,0.021972656249999996, 0.010986328125000003, 0.005493164062500002,0.002746582031250001, 0.0013732910156250004, 0.0006866455078125002,0.0003433227539062501, 0.00017166137695312505, 0.00008583068847656253,0.000042915344238281263, 0.000021457672119140632, 0.000010728836059570316,0.000005364418, 0.000002682209, 0.0000013411045};

         //构造WMTS图层,以构建wmts1.0.0为例 
         List<String> tileMatrixIds = new ArrayList<String>();
         for(int i=0;i<resolutions.length;i++){
        //     String matrixId = "identifier:"+(i+1);
             String matrixId = ""+(i+1);
             tileMatrixIds.add(matrixId);
         }

         WMTSLayerView wmtsLayerView1= new WMTSLayerView(this, "http://t0.tianditu.com/vec_c/wmts", "vec", "c",false,resolutions,tileMatrixIds); 
         WMTSLayerView wmtsLayerView2= new WMTSLayerView(this, "http://t0.tianditu.com/cva_c/wmts", "cva", "c",false,resolutions,tileMatrixIds); 
         WMTSLayerView wmtsLayerView3= new WMTSLayerView(this, "http://srv.zjditu.cn/ZJEMAP_2D/wmts", "ZJEMAP_2D", "esritilematirx",false,resolutions,tileMatrixIds); 
         WMTSLayerView wmtsLayerView4= new WMTSLayerView(this, "http://srv.zjditu.cn/ZJEMAPANNO_2D/wmts", "ZJEMAPANNO_2D", "esritilematirx",false,resolutions,tileMatrixIds); 
         WMTSLayerView wmtsLayerView5= new WMTSLayerView(this, "http://220.191.208.96/TLZONE/service/wmts", "TLZONE", "TileMatrixSet0",false,resolutions,tileMatrixIds); 
         WMTSLayerView wmtsLayerView6= new WMTSLayerView(this, "http://220.191.208.96/TLEMAP/service/wmts", "TLEMAP", "TileMatrixSet0",false,resolutions,tileMatrixIds); 
         WMTSLayerView wmtsLayerView7= new WMTSLayerView(this, "http://220.191.208.96/TLEMAPANNO/service/wmts", "TLEMAPANNO", "TileMatrixSet0",false,resolutions,tileMatrixIds); 

         //添加wmts1.0.0图层 按照7-1顺序能显示地图,1-7顺序地图出不来?什么原因
        WMTSLayerView[] wmtsLayerViews = {wmtsLayerView7,wmtsLayerView6
                 ,wmtsLayerView5,wmtsLayerView4,wmtsLayerView3,
                 wmtsLayerView2,wmtsLayerView1};

        //可以显示全地图
    //     BoundingBox layerBounds = new BoundingBox(new Point2D(-360.0D, 180.0D),new Point2D(360.0D, -180.0D));
            //只能显示一半地图
         BoundingBox layerBounds = new BoundingBox(new Point2D(-180.0D, 90.0D),new Point2D(180.0D, -90.0D));
 

接上面:
         //定义一个坐标系参考类对象
            CoordinateReferenceSystem crs = new CoordinateReferenceSystem();
            crs.datumAxis = 6378137;
            crs.unit = "degree";
            wmtsLayerView1.setBounds(layerBounds);
            wmtsLayerView1.setGCSLayer(true);
            wmtsLayerView1.setCRS(crs);
            wmtsLayerView1.setRequestEncoding("KVP");
            wmtsLayerView1.setFormat("tiles");

            wmtsLayerView2.setBounds(layerBounds);
            wmtsLayerView2.setGCSLayer(true);
            wmtsLayerView2.setCRS(crs);
            wmtsLayerView2.setRequestEncoding("KVP");
            wmtsLayerView2.setFormat("tiles");
            
            wmtsLayerView3.setBounds(layerBounds);
            wmtsLayerView3.setGCSLayer(true);
            wmtsLayerView3.setCRS(crs);
            wmtsLayerView3.setRequestEncoding("KVP");
            wmtsLayerView3.setFormat("image/jpgpng");
            
            wmtsLayerView4.setBounds(layerBounds);
            wmtsLayerView4.setGCSLayer(true);
            wmtsLayerView4.setCRS(crs);
            wmtsLayerView4.setRequestEncoding("KVP");
            wmtsLayerView4.setFormat("image/jpgpng");
            
            wmtsLayerView5.setBounds(layerBounds);
            wmtsLayerView5.setGCSLayer(true);
            wmtsLayerView5.setCRS(crs);
            wmtsLayerView5.setRequestEncoding("KVP");
            wmtsLayerView5.setFormat("image/png");

            wmtsLayerView6.setBounds(layerBounds);
            wmtsLayerView6.setGCSLayer(true);
            wmtsLayerView6.setCRS(crs);
            wmtsLayerView6.setRequestEncoding("KVP");
            wmtsLayerView6.setFormat("image/png");
            
            wmtsLayerView7.setBounds(layerBounds);
            wmtsLayerView7.setGCSLayer(true);
            wmtsLayerView7.setCRS(crs);
            wmtsLayerView7.setRequestEncoding("KVP");
            wmtsLayerView7.setFormat("image/png");
             mapView.addLayers(wmtsLayerViews);

            //设置地图显示中心点
            Point2D pc = new Point2D(119.6846*2,29.80042*2);

            mapView.getController().setCenter(pc);
            mapView.getController().setZoom(12);
             //启用内置的缩放控件      
             mapView.setBuiltInZoomControls(true);

有两个问题:

1、WMTSLayerView[] wmtsLayerViews = {wmtsLayerView7,wmtsLayerView6
                 ,wmtsLayerView5,wmtsLayerView4,wmtsLayerView3,
                 wmtsLayerView2,wmtsLayerView1};加载顺序影响地图显示(看注释)

2、 BoundingBox layerBounds = new BoundingBox(new Point2D(-360.0D, 180.0D),new Point2D(360.0D, -180.0D));可以显示全图,180,90只能显示一半
可能你的数据有问题,地理坐标系全球的数据范围不会超出我上面说的那个范围,你发布是内网还是外网,如果是外网可以发我地址,你可以在iserver看一下这个地图的范围是多?
请问你有qq或者其他联系方式吗?我想具体请教一下
我这边在尝试用两种方式实现手机端(android)地图显示:

1、iserver发布的图层,这个是在内网上部署的,地图在手机端显示基本没有问题,坐标点标注上去也没问题,只是iserver端发布的叠加图层,有一个地图边界图层,手机端显示不了(而web端可以显示)

2、另一种不通过iserver,而是直接用iclient for android的api直接调用国家天地图服务(如上面代码所示),这种情况下,就出现我上面所说的地图范围出问题,以及地图显示不出来等问题
你可以打4008900866咨询或者留联系方式,我们这边给你打过去。
我的联系方式是0571-89838986,我姓陈,谢谢。
...