《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=""
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,);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapviewcenterat);
//利用MapOption初始化MapView
mapView = 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() | ||||||||||
| Envelope | getMaxExtent()
获取MapView的最大范围。
|
||||||||||
| double | getMaxResolution() | ||||||||||
| 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) | ||||||||||
| void | setMaxScale(double maxScale)
设置地图最大比例尺。
|
||||||||||
| void | setMinResolution(double minResolution) | ||||||||||
| 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)
缩小地图。
|
||||||||||
以上内容翻译若有错误,欢迎大家留言批评指出!
《ArcGIS Runtime SDK for Android开发笔记》——(9)、空间数据的容器-地图MapView的更多相关文章
- 《ArcGIS Runtime SDK for Android开发笔记》
开发笔记之基础教程 ArcGIS Runtime SDK for Android 各版本下载地址 <ArcGIS Runtime SDK for Android开发笔记>——(1).And ...
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:概述
1.前言 数据生产和数据展示是常见的两大专业级移动GIS应用场景,这里我们针对数据生产环节的ArcGIS的离在线一体化技术给大家做一个基本的介绍和梳理. 使用ArcGIS离在线一体化技术首先需要以下基 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——离在线一体化技术:离线矢量数据同步
1.前言 上一篇文章中我们实现了离线要素的编辑操作,这一篇中主要介绍离在线一体化技术中最后一个环节离线数据的同步功能,通过对数据的上传,服务器端的版本化管理,实现数据生产管理的整个流程. 转载请注明出 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(7)、示例代码arcgis-runtime-samples-android的使用
1.前言 学习ArcGIS Runtime SDK开发,其实最推荐的学习方式是直接看官方的教程.示例代码和帮助文档,因为官方的示例一般来说都是目前技术最新,也是最详尽的.对于ArcGIS Runtim ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(5)、基于Android Studio构建ArcGIS Android开发环境(离线部署)(转)
1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(6)、基于Android Studio的ArcGIS Android工程结构解析
1.前言 Android Studio 是第一个Google官方的 Android 开发环境.其他工具,例如 Eclipse,在 Android Studio 发布之前已经有了大规模的使用.为了帮助开 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(4)、基于Android Studio构建ArcGIS Android开发环境
1.前言 2015年1月15日,发布ArcGIS Runtime SDK for Android v10.2.5版本.从该版本开始默认支持android studio开发环境,示例代码的默认开发环境也 ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(15)、要素绘制Drawtools3.0工具DEMO
1.前言 移动GIS项目开发中点线面的要素绘制及编辑是最常用的操作,在ArcGIS Runtime SDK for iOS 自带AGSSketchLayer类可以帮助用户快速实现要素的绘制,图形编辑. ...
- 《ArcGIS Runtime SDK for Android开发笔记》——(11)、ArcGIS Runtime SDK常见空间数据加载
ArcGIS Runtime SDK for Android 支持多种类型空间数据源.每一种都提供了相应的图层来直接加载,图层Layer是空间数据的载体,其主要继承关系及类型说明如下图所示: 转载请注 ...
随机推荐
- Blocks poj 区间dp
Some of you may have played a game called 'Blocks'. There are n blocks in a row, each box has a colo ...
- Super-Resolution Restoration of MISR Images Using the UCL MAGiGAN System 超分辨率恢复
作者是伦敦大学学院Mullard空间科学实验室成像组,之前做过对火星图像的分辨率增强. 文章用了许多的图像处理方法获得特征和高分辨率的中间结果,最后用一个生产对抗网络获得更好的高分辨率结果. 用的数据 ...
- 利用zookeeper生成唯一id
package com.cxy.com.cxy.curator; import java.util.concurrent.ExecutorService; import java.util.concu ...
- Unity 移动 和 旋转 [小结]
[移动] Position: 说明: 直接修改位置数据 Translate: 说明: [匀速]朝着一个方向,一直移动. (dir * speed 可以控制速度)适合键盘控制物体上下左右运动 函数: ...
- java编程技巧和心得
1.在一个类中修改或调用另一个类的变量: 只需要将该变量用public static 这个修饰符修饰,再用类名直接调用即可 2.实现对只有下标不同变量的操作 解决思路:可以将这些变量放在一个数组里,在 ...
- P3802 小魔女帕琪
传送门 考虑前面7个魔法 如果前面七个魔法各不相同,那么就能完成一次帕琪七重奏 设 A=a1*a2*...*a7,S=a1+a2+...+a7,B=S*(S-1)*...*(S-6) 对于不同的施法顺 ...
- 面向对象之-------------------永不停机的ATM
import os class Account: def __init__(self, username, password, money=0): self.username = username s ...
- Android_靠谱的监听软键盘状态的方法
public class MyActivity extends AppCompatActivity { /** * 当前界面中的软件盘的状态 */private boolean isKeyBoardO ...
- sql运算符优先级及逻辑处理顺序--查询sql执行顺序
sql逻辑处理顺序 --开启和关闭查询 --SET STATISTICS TIME ON---------------------------------------------请先来看看SET ST ...
- mybatis-Plus 增强版用法收藏
转载:http://www.cnblogs.com/okong/p/mybatis-plus-guide-one.html#xml%E5%BD%A2%E5%BC%8F https://blog.csd ...