安卓智能地图开发与实施七:在线业务图层(浏览查询)
来源:互联网 发布:淘宝订单体检不清洗 编辑:程序博客网 时间:2024/05/01 18:55
业务图层(OperationalLayers)
业务图层(OperationalLayers)旨在可视化变化频繁的数据,可以通过ArcGISMapImageLayer加载现有的可视化成果,可以通过FeatureLayer来可视化要素,甚至查询、编辑。
对业务图层(OperationalLayers)的加载,针对移动端的处理方式分为在线和离线方式。在线方式主要通过ArcGIS Server 、ArcGIS Online、Portal for ArcGIS发布的地图服务(Map Service、 Feature Service)进行调用。离线方式主要通过ArcGIS Desktop(Geodatabase文件)、ArcGIS Pro(MMPK文件)生产的离线数据包进行访问。
在线业务图层 - 要素服务(Feature Service)
在线FeatureLayer通过ServiceFeatureTable来解析Feature Service。添加FeatureLayer,理论上或者说代码层面是可以不需要基础底图(Basemap),展示的结果就只是业务图层。但是ArcGISMap对象是需要新建出来的。例如:
ArcGISMap mainArcGISMap =new ArcGISMap();mainMapView.setMap(mainArcGISMap);
在线FeatureLayer也可以通过PortalItem来承载,当然这个PortalItem必须包含Feature Service。
package hymn.esrichina.displayamapusingfeaturelayer;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.esri.arcgisruntime.data.ServiceFeatureTable;import com.esri.arcgisruntime.geometry.Envelope;import com.esri.arcgisruntime.geometry.SpatialReferences;import com.esri.arcgisruntime.layers.FeatureLayer;import com.esri.arcgisruntime.loadable.LoadStatus;import com.esri.arcgisruntime.loadable.LoadStatusChangedEvent;import com.esri.arcgisruntime.loadable.LoadStatusChangedListener;import com.esri.arcgisruntime.mapping.ArcGISMap;import com.esri.arcgisruntime.mapping.Basemap;import com.esri.arcgisruntime.mapping.LayerList;import com.esri.arcgisruntime.mapping.MobileMapPackage;import com.esri.arcgisruntime.mapping.Viewpoint;import com.esri.arcgisruntime.mapping.view.MapView;import java.util.List;public class MainActivity extends AppCompatActivity { private MapView mainMapView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { String mainFeatureLayerURL = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/PoolPermits/FeatureServer/0"; mainMapView = (MapView) findViewById(R.id.mainMapView); final ServiceFeatureTable mainServiceFeatureTable = new ServiceFeatureTable(mainFeatureLayerURL); mainServiceFeatureTable.setFeatureRequestMode(ServiceFeatureTable.FeatureRequestMode.ON_INTERACTION_NO_CACHE); mainServiceFeatureTable.addLoadStatusChangedListener(new LoadStatusChangedListener() { @Override public void loadStatusChanged(LoadStatusChangedEvent loadStatusChangedEvent) { if (loadStatusChangedEvent.getNewLoadStatus() == LoadStatus.LOADED) { ServiceFeatureTable.FeatureRequestMode mainFeatureRequestMode = mainServiceFeatureTable.getFeatureRequestMode(); String mainFeatureRequestModeName = mainFeatureRequestMode.name(); } } }); FeatureLayer mainFeatureLayer = new FeatureLayer(mainServiceFeatureTable); ArcGISMap mainArcGISMap = new ArcGISMap(); mainMapView.setMap(mainArcGISMap); mainArcGISMap.getOperationalLayers().add(mainFeatureLayer); mainArcGISMap.setInitialViewpoint( new Viewpoint( new Envelope( -1.30758164047166E7, 4014771.46954516, -1.30730056797177E7, 4016869.78617381, SpatialReferences.getWebMercator()))); } catch (Exception e) { } }}
ServiceFeatureTable加载完成之前,其图层中要素请求模式(getFeatureRequestMode())为UNDEFINED(未定义);加载完成后其图层中要素请求模式为ON_INTERACTION_CACHE(响应地图交互缓存),随着地图的操作(缩放、平移、旋转)自动缓存到本端。还可以通过设置BufferFactor属性,来预加载比当前地图范围更大的缓存。
图层中要素请求模式(FeatureRequestMode)
- MANUAL_CACHE (手动缓存)
- ON_INTERACTION_CACHE(响应地图交互缓存)
- ON_INTERACTION_NO_CACHE(响应地图交互实时请求)
- UNDEFINED(未定义)
对于一些多人协同编辑的业务,要素时时刻刻都有可能变化,建议设置图层中要素请求模式为ON_INTERACTION_NO_CACHE(响应地图交互实时请求),这样一来地图的每次交互都会从服务端请求最新的要素来显示。
对于设计数据量非常大的业务,实时加载在地图操作时已经影响到性能,建议设置图层中要素请求模式为MANUAL_CACHE (手动缓存),在需要显示图层要素时,再调用populateFromService方法来手动加载显示。
在线业务图层 - 动态地图服务(Map Service)
动态地图服务(Map Service)通过ArcGISMapImageLayer进行承载。直接给予动态地图服务地址(通过ArcGIS Server发布)即可。也可以通过PortalItem进行加载,PortalItem必须包含Map Service。
就ArcGISMapImageLayer自身而言,也可以加入基础底图(Basemap)中,当动态的底图使用。
ArcGISMapImageLayer包含着诸多自图层,通过SublayerList装载,每一个自图层为ArcGISMapImageSublayer对象。
package hymn.esrichina.displayamapusingarcgismapimagelayer;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import com.esri.arcgisruntime.layers.ArcGISMapImageLayer;import com.esri.arcgisruntime.layers.ArcGISMapImageSublayer;import com.esri.arcgisruntime.layers.SublayerList;import com.esri.arcgisruntime.mapping.ArcGISMap;import com.esri.arcgisruntime.mapping.Basemap;import com.esri.arcgisruntime.mapping.view.MapView;public class MainActivity extends AppCompatActivity { private MapView mainMapView; private ArcGISMapImageLayer mainMapImageLayer; private SublayerList mainSublayerList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); try { String mainArcGISMapImageLayerURL = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/SampleWorldCities/MapServer"; mainMapView = (MapView) findViewById(R.id.mainMapView); ArcGISMap mainArcGISMap = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 48.354406, -99.998267, 2); mainMapImageLayer = new ArcGISMapImageLayer(mainArcGISMapImageLayerURL); mainMapImageLayer.addDoneLoadingListener(new Runnable() { @Override public void run() { mainSublayerList = mainMapImageLayer.getSublayers(); ArcGISMapImageSublayer mainMapImageSublayer = (ArcGISMapImageSublayer) mainSublayerList.get(0); } }); mainMapImageLayer.setOpacity(0.5f); mainArcGISMap.getOperationalLayers().add(mainMapImageLayer); mainMapView.setMap(mainArcGISMap); } catch (Exception e) { } }}
结尾
源程序包含:
DisplayAMapUsingArcGISMapImageLayer
DisplayAMapUsingFeatureLayer
请自行下载:
链接:http://pan.baidu.com/s/1sli5MhR 密码:8gh8
若失效,可发邮件给韩源萌(polyline@126.com)索要。
- 安卓智能地图开发与实施七:在线业务图层(浏览查询)
- 安卓智能地图开发与实施八:离线业务图层(浏览查询)
- 安卓智能地图开发与实施十一:业务数据查询
- 安卓智能地图开发与实施五:在线基础底图
- 安卓智能地图开发与实施十:图层管理
- 安卓智能地图开发与实施二十:栅格图层展示
- 安卓智能地图开发与实施十四:业务数据编辑
- 安卓智能地图开发与实施十六:三维地图
- 安卓智能地图开发与实施十二:空间查询与模糊搜索
- 安卓智能地图开发与实施十三:空间查询与展示
- 安卓智能地图开发与实施六:离线基础底图
- 安卓智能地图开发与实施十七:使用天地图
- 安卓智能地图开发与实施四:二维地图的MapView与Layers
- 安卓智能地图开发与实施九:地图缩放与旋转
- 安卓智能地图开发与实施三:创建第一个地图程序
- 安卓智能地图开发与实施二:开发环境准备
- 安卓智能地图开发与实施十五:离线与同步
- 安卓智能地图开发与实施十九:符号与渲染器
- 【LeetCode】Binary Tree Tilt 解题报告
- [leetcode 33]Search in Rotated Sorted Array
- 欢迎使用CSDN-markdown编辑器
- Linux内核目录结构
- 严重: Error configuring application listener of class org.springframework.web.context.ContextLoaderLis
- 安卓智能地图开发与实施七:在线业务图层(浏览查询)
- Git 常用命令大全
- 微赞框架封装好的地址联动
- 电阻屏原理
- NoSQL数据库安全性
- Android studio更新后出现警告:Warning:The `android.dexOptions.incremental` property is deprecated and it has
- C++教程
- 将博客搬至CSDN
- Ubuntu14.04LTS下安装Code::Blocks IDE