《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是空间数据的载体,其主要继承关系及类型说明如下图所示: 转载请注 ...
随机推荐
- matplotlib类
1.plt.subplot 在matplotlib下,一个Figure对象可以包含多个子图(Axes),可以使用subplot()快速绘制,其调用形式如下:subplot(numRows, numCo ...
- 洛谷P1894 [USACO4.2]完美的牛栏The Perfect Stall
题目描述 农夫约翰上个星期刚刚建好了他的新牛棚,他使用了最新的挤奶技术.不幸的是,由于工程问题,每个牛栏都不一样.第一个星期,农夫约翰随便地让奶牛们进入牛栏,但是问题很快地显露出来:每头奶牛都只愿意在 ...
- ubuntu下vnc部署安装
ubuntu下vnc部署安装,参考如下博客:https://www.cnblogs.com/xuliangxing/p/7642650.html https://jingyan.baidu.com/a ...
- 使用nexus 搭建本地 maven 服务器
1.下载安装nexus oos https://www.sonatype.com/download-oss-sonatype ,选择2.x 版本. 2. 配置maven <server> ...
- Oracle 树形SQL语句,SYS_CONNECT_BY_PATH 函数
转一个SYS_CONNECT_BY_PATH 函数的例子.推断原表应该是这样: Child Parent ------------------------ ...
- 单点登录-JWT(Json Web Tokens)
来自:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html 1.跨域认证 1.用户向服务器发送用户名和密码. 2.服务 ...
- 随性练习:python字典实现文本合并
主要用到,字典.字符串分割和连接.文件等操作 例如:有以下两个txt文本,要合并成一个 代码: address_book1 = {} address_book2 = {} def read_addre ...
- PHP rand 和 mt_rand
PHP mt_rand() 函数 定义和用法 mt_rand() 使用 Mersenne Twister 算法返回随机整数. 语法 mt_rand(min,max) 说明 如果没有提供可选参数 min ...
- tinkphp3.2.3 关于事务处理。
自己做一个测试,关于事务处理的. 在对多表进行操作的时候 基本上都离不开事务. 有的操作,是要由上一操作后,产的值(如主表里插入后,要获取插入的主键ID值,返回给下面处理表用.)带到后面的表处理当中去 ...
- jenkins自动打IOS包(转发)
投稿文章,作者:一缕殇流化隐半边冰霜(@halfrost) 前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了 ...