ArcGIS Runtime SDK开发简单却又恼人的小问题之如何正确在同一mapview中加载多个图层

0
分享 2019-01-31
目的:

esri提供的官方帮助文档没有介绍在一个mapview中添加多个图层时需要注意的事项,这篇文章目的从实战出发,说明我们开发的时候加载多个图层的小技巧,阅读本文可以实现:
  • 确保正确初始化mapview;
  • 确保图层之间的加载不互受影响;
  • 了解影响图层加载的因素(方便快速排查加载失败原因)


储备知识:

了解 mapview, arcgismap, layers之间的关系。

代码:
//初始化切片图层并监听图层加载状态
final ArcGISTiledLayer arcGISTiledLayer = new ArcGISTiledLayer("https://domain.xxx.com/server/ ... 6quot;);
arcGISTiledLayer.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
if (arcGISTiledLayer.getLoadStatus()== LoadStatus.LOADED){
System.out.println(arcGISTiledLayer.getLoadStatus()+"loadasbasemap");
}else if (arcGISTiledLayer.getLoadStatus()==LoadStatus.FAILED_TO_LOAD){
System.out.println(arcGISTiledLayer.getLoadError().getCause());
}
}
});

//将上述图层作为底图传入
mMap.setBasemap(new Basemap(arcGISTiledLayer));

//初始化业务图层并监听图层加载状态
final ArcGISMapImageLayer arcGISMapImageLayer=new ArcGISMapImageLayer("https:///domain.xxx.com/server ... 6quot;);

arcGISMapImageLayer.addDoneLoadingListener(new Runnable() {
@Override
public void run() {
if (arcGISMapImageLayer.getLoadStatus()== LoadStatus.LOADED){
System.out.println(arcGISMapImageLayer.getLoadStatus()+"riverloadasbasemap");
}else if (arcGISMapImageLayer.getLoadStatus()==LoadStatus.FAILED_TO_LOAD){
System.out.println(arcGISMapImageLayer.getLoadError().getCause());
}
}
});

总结:

1. 查看测试结果:

QQ截图20181226174155.png



2. 测试过程说明:

2.1测试中一共加载三个图层,不变量为:
  • 始终确保业务图层2正常加载; 
  • 始终确保业务图层1无法加载;

 
2.2变量为:
  • 是否加载底图 
  • 如果加载底图,底图是否能正常加载测试

 
2.3结果总结:
 
  • 如果想要正常加载多个图层,需要确保mapview正常加载第一个图层;
  • 建议使用basemap类,并确保底图可成功加载;
  • 底图都选择静态,不经常变化且适合做地理背景的。


2.4图层加载失败可能的原因:
  • 无法访问域名
  • 使用自签名证书且没有信任自签名证书

(解决方法参考:http://zhihu.esrichina.com.cn/article/3862) 
  • 服务加密,未对外开放给每个人
  • 服务无法动态投影

(mapview的空间参考由第一个图层决定,如果后期加入切片图层,则无法动态投影)
  • 提供图层的服务出错:需要联系服务器运维人员介入。

 
原文链接:http://www.gougexueli.com/2019 ... 80ma/

0 个评论

要回复文章请先登录注册