《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView
1、前言
在上一篇内容里介绍了 关于ArcGIS Android开发的未来(“Quartz”版Beta)相关内容,期间也提到了关于API接口的重构,开发思路的调整,根据2015UC资料也可以知道新版预计将在明年的时候推出。届时在开发思路上将会往新版迁移。
总的来说,虽然“Quartz”版的开发思路有所变化,但总体变化不大,这里我将继续以现有正式发布版本为主梳理ArcGIS Runtime SDK for Android 开发内容。
参考API版本号:version 10.2.7。后续内容若不做特殊说明,均为此版本。
转载请注明出处: http://www.cnblogs.com/gis-luq/p/4941715.html
2、空间数据的容器
2.1、地图组件MapView概述
地图组件是所有空间数据的容器,是ArcGIS Runtime SDK的核心组件,也是所有GIS应用开发中的入口和基础。在ArcGIS Runtime SDK for Android中,地图组件的类名是MapView,它是Android中ViewGroup的子类,它与很多ArcGIS API中的Map、MapControl类作用是一样的。
MapView提供了完善的地图显示与控制功能:
- MapView具有呈现数据的能力,它可以添加一个或多个图层,所有图层只有添加到MapView容器中才能进行显示;
- MapView可以设置地图的显示范围和比例尺、旋转角度、地图背景、地图的最大/最小分辨率,以及指定当前显示的分辨率/比例尺;
- MapView提供了丰富的手势监听接口,通过这些监听可以实现各种手势动作,如点击、双击、移动或长按等操作。
特殊说明:MapView默认空间参考及空间范围为所添加的第一个图层的相关信息。
2.2、地图组件MapView的使用
有两种方式可以将MapView添加到应用当中:一个是XML方式,另一个是硬编码方式;一般多采用XML方式,方便调整布局及其属性相关设置。
2.2.1、XML方式添加MapView及初始化底图
<!-- MapView with MapOptions settings for Topo basemap,zoom level, and centered in Costa Mesa, CA. --> <com.esri.android.map.MapView android:id="@+id/map" android:layout_width="fill_parent" android:layout_height="fill_parent" mapoptions.MapType="topo" mapoptions.ZoomLevel="13" mapoptions.center="33.666354, -117.903557"/>
MapOptions是用来初始化地图的一些属性的,包括预定义底图类型(MapType)、放大的级别和地图的中心点,它在10.2版本的API中第一次引入。MapOptions的MapType是一个枚举型变量,有GRAY、HYBRID、NATIONAL_GEOGRAPHIC、OCEANS、OSM、SATALLITE、STREETS、TOPO这8个值,分别代表不同风格的底图,这样Android开发者们就不用每次都通过定义ArcGISTiledMapServiceLayer和底图的url来加载底图,也不用每次在初始化的时候费劲的定义底图的放大级别和地图中心点,而是仅用MapOptions的三个属性就可以完成初始化,代码更省,效率更高。
2.2.2、XML方式添加MapView及初始化底图
同样的,MapOptions也可以通过xml和java两种代码的方式使用。上面示例中就是使用xml方式使用MapOptions,下列示例代码是使用Java硬编码的方式使用MapOptions以及将MapView控件添加到应用中。
public class MapViewActivity extends Activity {MapView mapView;MapOptions opt= new MapOptions(MapType.STREETS,33.666354, -117.903557,13);protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.mapviewcenterat);//利用MapOption初始化MapViewmapView = new MapView(this,opt); //也可以利用实例化ArcGISTiledMapServiceLayer添加底图图层mapView.addLayer( new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer")); }}
2.3、地图的方法
地图组件MapView是所有空间数据的容器,同时也是控制操作地图的对象,可以在MapView中实现对地图的放大、缩小、平移、单击、长按、以及一些状态的变化时的操作,例如当地图的范围变化时、地图的加载状态改变时等等。下面针对API中关于MapView的公有方法做一个详细说明。
MapView中的公有方法 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int |
addLayer(Layer layer, int index)
添加图层在给定的索引。
|
||||||||||
int |
addLayer(Layer layer)
添加一个图层
|
||||||||||
void |
addLayers(Layer[] layerArray)
添加图层列表
|
||||||||||
void |
centerAndZoom(double lat, double lon, float levelOrFactor)
MapView初始化时,缩放到给定的坐标及显示级别。
|
||||||||||
void |
centerAt(double lat, double lon, boolean animated)
MapView初始化时,缩放到指定坐标,animated表示是否显示动画效果。
|
||||||||||
void |
centerAt(Point centerPt, boolean animated)
MapView初始化时,缩放到指定Point,animated表示是否显示动画效果。
|
||||||||||
Bitmap |
createSymbolImage(Symbol symbol, Geometry geometry, int width, int height, int color)
这个方法在API 级别10.2.2 被弃用。请使用
getLegendImage(Symbol, Geometry, int, int, int) 替代。
|
||||||||||
Bitmap[] |
createSymbolImages(Symbol[] symbol, Geometry[] geometry, int width, int height, int color)
这个方法在API 级别10.2.2 被弃用。请使用
getLegendImages(Symbol[], Geometry[], int, int, int) 替代。
|
||||||||||
void |
enableWrapAround(boolean enable)
启用或禁用旋转地图功能。
|
||||||||||
ViewGroup.LayoutParams | generateLayoutParams(AttributeSet attrs) | ||||||||||
Callout |
getCallout()
返回一个气泡弹窗窗口。
|
||||||||||
Point |
getCenter()
放回当前MapView的中心点。
|
||||||||||
Bitmap |
getDrawingMapCache(float x, float y, int w, int h)
通过屏幕坐标和长宽获取MapView截图。
|
||||||||||
Polygon |
getExtent()
返回当前可视区域范围。
|
||||||||||
Grid |
getGrid()
返回地图格网信息,格网的显示状态通过该实例控制。
|
||||||||||
Layer |
getLayer(int index)
通过给定索引获取图层。
|
||||||||||
Layer |
getLayerByID(long layerID)
通过图层ID获取图层。
|
||||||||||
Layer |
getLayerByURL(String url)
通过在线地图服务的Url获取图层。
|
||||||||||
Layer[] |
getLayers()
获取MapView中所有图层。
|
||||||||||
LocationDisplayManager |
getLocationDisplayManager()
获取位置管理类
LocationDisplayManager .
|
||||||||||
Envelope |
getMapBoundaryExtent()
该方法在API 级别 10.2.2
被弃用。使用 getMaxExtent() 代替。
|
||||||||||
Envelope |
getMaxExtent()
获取MapView的最大范围。
|
||||||||||
double |
getMaxResolution()
该方法在API 级别 10.2.2
被弃用。使用 getMinScale() 代替。
|
||||||||||
double |
getMaxScale()
返回最大比例尺。
|
||||||||||
double |
getMinResolution()
该方法在API 级别 10.2.2
被弃用。使用
|
||||||||||
double |
getMinScale()
返回最小比例尺。
|
||||||||||
OnLongPressListener |
getOnLongPressListener()
获取长按事件 OnLongPressListener。
|
||||||||||
OnPanListener |
getOnPanListener()
获取平移事件 OnPanListener。
|
||||||||||
OnPinchListener |
getOnPinchListener()
获取捏恰事件 OnPinchListener。
|
||||||||||
OnSingleTapListener |
getOnSingleTapListener()
获取单击事件 onSingleTapListener。
|
||||||||||
OnStatusChangedListener |
getOnStatusChangedListener()
获取MapView状态改变事件 OnStatusChangedListener 。
|
||||||||||
OnZoomListener |
getOnZoomListener()
获取缩放事件 OnZoomListener。
|
||||||||||
double |
getResolution()
返回 MapView的分辨率。
|
||||||||||
double |
getRotationAngle()
返回当前地图的旋转角度,逆时针方向。
|
||||||||||
double |
getScale()
获取地图比例尺。
|
||||||||||
SpatialReference |
getSpatialReference()
返回MapView空间坐标系统。
|
||||||||||
boolean |
isAllowOneFingerZoom()
返回true ,是否允许一个手指缩放地图。
|
||||||||||
boolean |
isAllowRotationByPinch()
返回true ,如果旋转缩放是允许的。
|
||||||||||
boolean |
isLoaded()
返回true ,如果MapView初始化完成。
|
||||||||||
boolean |
isRecycled()
返回true ,如果MapView已回收。
|
||||||||||
boolean |
isShowMagnifierOnLongPress()
检查地图放大镜功能是否启用。
|
||||||||||
void | onChildViewAdded(View parent, View child) | ||||||||||
void | onChildViewRemoved(View parent, View child) | ||||||||||
void |
pause()
暂停地图。
|
||||||||||
void |
recycle()
释放MapView引用的资源,以便他们可以回收。
|
||||||||||
void |
removeAll()
删除所有图层。
|
||||||||||
void |
removeLayer(int index)
删除指定索引图层。
|
||||||||||
void |
removeLayer(Layer layer)
删除指定图层。
|
||||||||||
void |
restoreState(String state)
利用保存的地图的中心的坐标,当前地图的分辨率,和LocationDisplayManager状态(是否活跃和是否autopan)字符串恢复信息。
|
||||||||||
String |
retainState()
保存地图的中心的坐标,当前地图的分辨率,和LocationDisplayManager状态(是否活跃和是否autopan)作为一个字符串。
|
||||||||||
void |
setAllowMagnifierToPanMap(boolean allow)
设置当放大镜显示时,是否能够平移地图。
|
||||||||||
void |
setAllowOneFingerZoom(boolean allowOneFingerZoom)
允许/不允许一个手指缩放。
|
||||||||||
void |
setAllowRotationByPinch(boolean allowRotationByPinch)
允许/不允许缩放旋转。
|
||||||||||
void |
setEsriLogoVisible(boolean visible)
打开或关闭ESRI的logo。
|
||||||||||
void |
setExtent(Geometry geometry, int padding)
设置空间范围。
|
||||||||||
void |
setExtent(Geometry geometry)
设置当前地图显示的空间范围。
|
||||||||||
void |
setExtent(Geometry geometry, int padding, boolean animated)
设置空间范围。
|
||||||||||
void |
setMapBackground(int bkColor, int gridColor, float gridSize, float gridLineSize)
设置地图背景颜色和网格。
|
||||||||||
boolean |
setMapOptions(MapOptions options)
设置地图底图参数MapOptions。
|
||||||||||
void |
setMaxExtent(Envelope env)
设置地图显示的边界范围
|
||||||||||
void |
setMaxResolution(double maxResolution)
setMinScale(double)
|
||||||||||
void |
setMaxScale(double maxScale)
设置地图最大比例尺。
|
||||||||||
void |
setMinResolution(double minResolution)
setMaxScale(double) 替代。
|
||||||||||
void |
setMinScale(double minScale)
设置底图最小比例尺。
|
||||||||||
void |
setOnLongPressListener(OnLongPressListener onLongPressListener)
设置长按监听事件。
|
||||||||||
void |
setOnPanListener(OnPanListener onPanListener)
设置平移监听事件。
|
||||||||||
void |
setOnPinchListener(OnPinchListener onPinchListener)
设置捏掐监听事件。
|
||||||||||
void |
setOnSingleTapListener(OnSingleTapListener onSingleTapListener)
设置单击监听事件。
|
||||||||||
void |
setOnStatusChangedListener(OnStatusChangedListener onStatusChangedListener)
设置地图状态改变监听事件。
|
||||||||||
void |
setOnZoomListener(OnZoomListener onZoomListener)
设置放大缩小监听事件。
|
||||||||||
void |
setResolution(double res)
设置分辨率。
|
||||||||||
void |
setRotationAngle(double degree, Point centerPt, boolean animated)
在给定点居中显示,并旋转到给定角度。animated 是否启用动画效果。
|
||||||||||
void |
setRotationAngle(double degree, boolean animated)
旋转地图到给定角度,animated 是否启用动画效果。
|
||||||||||
void |
setRotationAngle(double degree)
旋转地图到给定角度。
|
||||||||||
void |
setRotationAngle(double degree, float pivotX, float pivotY)
以某个点为中心旋转地图。
|
||||||||||
void |
setScale(double scale, boolean animated)
设置地图比例尺;animated是否启用动画效果。
|
||||||||||
void |
setScale(double scale)
设置底图比例尺。
|
||||||||||
void |
setShowMagnifierOnLongPress(boolean showMagnifier)
设置是否长按启用放大镜功能。
|
||||||||||
Future<Boolean> |
switchBaseMap(BaseMap basemap, Portal portal, OnBaseMapSwitchListener listener)
切换底图。
|
||||||||||
Point |
toMapPoint(float screenx, float screeny)
将屏幕上的点转换成地理坐标点。
|
||||||||||
Point |
toMapPoint(Point src)
将屏幕上的点转换成地理坐标点。
|
||||||||||
Point |
toScreenPoint(Point src)
将地理坐标点转换成屏幕上的点。
|
||||||||||
void |
unpause()
取消暂停地图。
|
||||||||||
void |
zoomTo(Point centerPt, float factor)
缩放到给定点。
|
||||||||||
void |
zoomToResolution(Point centerPt, double res)
设定中心点,缩放到给定分辨率水平。
|
||||||||||
void |
zoomToScale(Point centerPt, double scale)
设定中心点,缩放到指定比例尺。
|
||||||||||
void |
zoomin()
放大地图。
|
||||||||||
void |
zoomin(boolean animated)
放大地图。
|
||||||||||
void |
zoomout()
缩小地图。
|
||||||||||
void |
zoomout(boolean animated)
缩小地图。
|
以上内容翻译若有错误,欢迎大家留言批评指出!
文章若无特殊说明均为原创,原创作品,允许转载,转载时请务必以超链接形式标明文章出处、作者信息和本声明。 博客:http://www.cnblogs.com/gis-luq 作者:gis-luq 邮箱:luqiang.gis@foxmail.com
转载于:https://www.cnblogs.com/telwanggs/p/6434182.html
《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView相关推荐
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述
1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步...
1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据编辑...
1.前言 在上一篇我们已经实现了离线地理数据库的下载,这一篇我们着重介绍离线数据库的加载与编辑. 由于ArcGIS Runtime SDK for Android 10.2.X版本并没提供要素绘制功能 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据下载...
1.前言 1.1.环境准备: ArcGIS for Desktop 10.4.1(10.2.1以上版本即可) ArcGIS for Server 10.4.1 (10.2.1以上版本即可) Postg ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用...
1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...
- 《ArcGIS Runtime SDK for Android开发笔记》
开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>--(1).And ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析...
1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)...
1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境...
1.前言 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本.从该版本开始默认支持android studio开发环境,示例代码的默认开发环境也 ...
最新文章
- 5月23日 JavaScript
- MyEclipse 快捷键1(CTRL)
- Docker Swarm集群搭建
- PyTorch基础(二)-----自动求导Autograd
- 【CV】10分钟理解Focal loss数学原理与Pytorch代码
- 邮箱服务器ip地址白名单,申请SSL证书时如何设置IP地址白名单和邮箱白名单
- Flutter代码锦囊---淘口令复制弹窗
- BCM94360Z4刷蓝牙固件魔改, Mac真正免驱无线网卡,实现原装网卡一样完美黑苹果,啊哈哈
- WPS下 宏使用js编写及一些脚本
- 这款神器,IDM随意下载任意网页音频视频文件!
- 为什么 scala无法导入 scala.actors.Actor
- 初生牛犊不怕虎!开发不足一年的Android实习生在大厂横冲直撞后,手握多份offer,特此分享!
- 小学计算机网络信息安全教案,黑教版信息技术五年级上册第十五课《网络信息安全》教案.doc...
- PostgreSQL的streaming replication
- Libgdx粒子效果介绍与使用心得
- Python快速搭建网站
- SSM框架终极篇——Spring、SpringMVC、MyBatis整合练习(超级详细)
- html5里面的圆点和方块,HTML基础 ul type 项目符号为圆圈与方块
- 微商代理系统APP软件
- java 动态编译_Java动态编译
热门文章
- (128)FPGA面试题-用一个二选一的MUX和一个非门实现异或
- FPGA 常用存储器比较
- 安装默认报表服务器虚拟目录,报表服务器虚拟目录
- 命令查看mysql端口映射_【转载】烂泥:如何利用telnet命令检测端口映射是否成功...
- 浏览器 调用 vue 组件_父子组件的通信
- mysql 表结构监控_性能测试之mysql监控、优化
- 【STM32】HAL库 STM32CubeMX教程六----定时器中断
- [计算机网络] - 调节参数提高 TCP 性能
- [C++] - lambda capture的成员函数 异步调用
- Monocular slam 的理论基础(1)