Android GIS开发系列-- 入门季(15) 网络图层加载
一、首先我们来看一个网络图层:
http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer,这是全球街道图。加载的代码也很简单:
![](/assets/blank.gif)
private static final String WORLD_STREETS_URL = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";private MapView mMapView = null;private ArcGISTiledMapServiceLayer mWorldStreetsLayer = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMapView = (MapView) findViewById(R.id.map_view);mWorldStreetsLayer = new ArcGISTiledMapServiceLayer(WORLD_STREETS_URL);mMapView.addLayer(mWorldStreetsLayer);mWorldStreetsLayer.setOnStatusChangedListener(new OnStatusChangedListener() {@Overridepublic void onStatusChanged(Object o, STATUS status) {if (status==STATUS.INITIALIZED){Log.i("huang","加载成功");}else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){Log.i("huang","加载失败");}}});}
![](/assets/blank.gif)
效果图
问:为什么用ArcGISTiledMapServiceLayer 加载而不用其他图层加载呢?
用浏览器打开
http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer,可以看到详细信息。
它的子图层只有一个:
下面是坐标信息,注意Single Fused Map Cache: true,支持缓存。
与Tile Info信息,
通过信息说明这是一个TiledLayer,而ArcGISTiledMapServiceLayer是TiledLayer子类的子类,看一下ArcGISTiledMapServiceLayer的介绍
。
点开World Street Map链接,
http://services.arcgisonline.com/arcgis/rest/services/World_Street_Map/MapServer/0,这是它的唯一子图层。真正加载的也是这个图层
Type虽然说是FeatureLayer,但它得用ArcGISFeatureLayer加载。
![](/assets/blank.gif)
ArcGISFeatureLayer arcGISFeatureLayer = new ArcGISFeatureLayer(WORLD_STREETS_URL+"/0", ArcGISFeatureLayer.MODE.ONDEMAND);SimpleFillSymbol simpleFillSymbol = new SimpleFillSymbol(Color.argb(0,0,0,0),SimpleFillSymbol.STYLE.SOLID);mMapView.addLayer(arcGISFeatureLayer);arcGISFeatureLayer.setRenderer(new SimpleRenderer(simpleFillSymbol));arcGISFeatureLayer.setOnStatusChangedListener(new OnStatusChangedListener() {@Overridepublic void onStatusChanged(Object o, STATUS status) {if (status==STATUS.INITIALIZED){Log.i("huang","加载成功");}else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){Log.i("huang","加载失败");}}});
![](/assets/blank.gif)
上面虽然加载成功,但并看不到图层,而且报错:
FeatureSetCallback.onError
com.esri.core.io.EsriServiceException: Requested operation is not supported by this service. The requested capability is not supported.
仔细再看网络信息,
大体上知道为什么报 The requested capability is not supported。也就是不能用这种方法加载,而得用前面的代码加载!!!
ArcGISDynamicMapServiceLayer
服务地址:
http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer,这是美国的高铁图。
用浏览器打开,有三个子图层,Single Fused Map Cache: false!
下面是ArcGISDynamicMapServiceLayer的介绍:
加载代码 :
![](/assets/blank.gif)
private static final String DYNAMIC_USA_HIGHWAY_URL = "http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer";private ArcGISDynamicMapServiceLayer usaHighwayLayer = null;private MapView mMapView = null;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMapView = (MapView) findViewById(R.id.map_view);usaHighwayLayer = new ArcGISDynamicMapServiceLayer(DYNAMIC_USA_HIGHWAY_URL);mMapView.addLayer(usaHighwayLayer);usaHighwayLayer.setOnStatusChangedListener(new OnStatusChangedListener() {@Overridepublic void onStatusChanged(Object o, STATUS status) {if (status==STATUS.INITIALIZED){Log.i("huang","加载成功");}else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){Log.i("huang","加载失败");}}});}
![](/assets/blank.gif)
效果图
二、ArcGISFeatureLayer加载图层
服务地图
http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0,也就是上面服务的子图层。
ArcGISFeatureLayer arcGISFeatureLayer = new ArcGISFeatureLayer("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0", ArcGISFeatureLayer.MODE.ONDEMAND);mMapView.addLayer(arcGISFeatureLayer);arcGISFeatureLayer.setRenderer(new SimpleRenderer(new SimpleLineSymbol(Color.argb(250, 52, 17, 255),2))); arcGISFeatureLayer.setOnStatusChangedListener(new OnStatusChangedListener() { @Override public void onStatusChanged(Object o, STATUS status) { if (status==STATUS.INITIALIZED){ Log.i("huang","加载成功"); }else if(status==STATUS.INITIALIZATION_FAILED||status==STATUS.LAYER_LOADING_FAILED){ Log.i("huang","加载失败"); } } });
注意要设置setRenderer,效果
ArcGISFeatureLayer 具有FeatureLayer的一些查询方法,与前面几讲里FeatureLayer查询相似,这里不再讲了。
//查询要素方法
queryIds(Query query, CallbackListener<int[]> callback)
queryFeatures(Query query, CallbackListener<FeatureSet> callback)
在http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StateCityHighway_USA/MapServer/0,页面底部,
点击Query进入查询要素界面,可直接 查询要素
where 1=1,点击Query(GET),可得到以下结果集
Android GIS开发系列-- 入门季(15) 网络图层加载相关推荐
- Android GIS开发系列-- 入门季(13)Gdal简单写个shp文件
Gdal是用来读写栅格与矢量数据的,在Gdal官网,可以下载相关的资源进行平台的编译.其实Arcgis底层也是用Gdal来读取shp文件的,那在Android中可以直接读写shp文件吗,是可以的.这里 ...
- Android GIS开发系列-- 入门季(11) Callout气泡的显示
一.气泡的简单显示 首先我们要获取MapView中的气泡,通过MapView的getCallout()方法获取一个气泡.看一下Callout的简单介绍: 大体的意思是通过MapView获取Callou ...
- Android GIS开发系列-- 入门季(5) FeatureLayer加载本地shp文件与要素查询
FeatureLayer是要素图层,也是Arcgis的主要图层.用这个图层可以加载本地的shp文件.下面我们看怎样加载shp文件到MapView中.查看ArcGis API可知FeatureLayer ...
- android 之ListView分页效果以及从网络上加载数据一系列的综合运用
数据分页策略: <1>:用多少查多少 <2>:全部查询出来,再进行分页处理 数据分页的有关算法: (1):起始索引值 = (当前页-1)*每页显示的记录数 (2):结束索引值 ...
- android MVP连接服务器,Android之MVP模式实现登陆和网络数据加载
MVP简介 相信你们对 MVC 都是比较熟悉了:M-Model-模型.V-View-视图.C-Controller-控制器,MVP做为MVC的演化版本,也是做为用户界面(用户层)的实现模式,那么相似的 ...
- 《 Android物联网开发从入门到实战》
今天小编分享的这本书是国内第一本Android物联网开发书籍,由42个全真实战案例,环环相扣,深入解析Android物联网开发. <Android物联网开发从入门到实战>内容分为 5篇,共 ...
- 《 Android物联网开发从入门到实战》国内第一本开发书籍!
今天小编分享的这本书是国内第一本Android物联网开发书籍,由42个全真实战案例,环环相扣,深入解析Android物联网开发. <Android物联网开发从入门到实战>内容分为 5篇,共 ...
- Android游戏开发的入门实例
在Android系统上开发游戏是Android开发学习者所向往的,有成就感也有乐趣,还能取得经济上的报酬.那怎样开发Android游戏呢?下面介绍一个简单的入门实例. 一.创建 ...
- Android商城开发系列
Android商城开发系列(一)--开篇 Android商城开发系列(二)--App启动欢迎页面制作 Android商城开发系列(三)--使用Fragment+RadioButton实现商城底部导航栏 ...
- Android自定义控件开发系列(零)——基础原理篇
在后边的文章中发现在说Android自定义时,有时候要重复解释很多东西,所以想想返回来增加一篇"基础原理篇",直接进入正题吧-- 首先的问题是:在Android项目开发中,什么时候 ...
最新文章
- SAP WMSD集成之Copy WM Quantity
- SD-WAN5年增长率超过40%,为什么越来越受到企业欢迎?
- 伪距定位算法(matlab版)
- UA MATH574M 统计学习II 二元分类例子与高维问题
- C++中的运算符优先级
- ES权威指南[官方文档学习笔记]-8
- struts 2中为什么抽象包不能包含action?
- hazelcast入门教程_Hazelcast入门指南第6部分
- 记录A component required a bean named ‘studentService‘ that could not be found.
- 对标Postman的ApiPost创始人:用户,是ApiPost唯一的信仰
- Oracle与MySQL使用区别
- protobuf3 自定义option_ProtoBuf3语法指南(Protocol Buffers)_下
- 图的表示:如何存储微博、微信等社交网络中的好友关系
- docker 进入停止的容器_在Docker中运行一个Ubuntu镜像
- 数字时代的必经之路,汽车经销商(4S)行业的信息化特点
- 《机械工程测试技术基础》教学大纲
- 软件文档的类型有哪些?
- Android N 程序适配要点
- 中国电信向小米释放善意,高度认可它的5G性能领先而不是华为
- 互联网无插件直播流媒体服务器方案EasyNVR下载新的软件执行程序,出现“invalid license”字样是什么意思?