《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是空间数据的载体,其主要继承关系及类型说明如下图所示: 转载请注 ...
随机推荐
- (一)ByteDance编程题
题目: 公司的程序员不够用了,决定把产品经理都转变为程序员以解决开发时间长的问题. 在给定的矩形网格中,每个单元格可以有以下三个值之一: 值0代表空单元格 值1代表产品经理 值2代表程序员 每分钟,任 ...
- spring-redis 存储数据
package com.fndsoft.bcis.utils; import org.springframework.beans.factory.annotation.Autowired;import ...
- [USACO18JAN]Cow at Large G(树形DP)
P4186 [USACO18JAN]Cow at Large G(树形DP) Luogu4186 设dp[i]表示i点需要放多少个农民.则有 \(if(near[i]-dep[i]<=dep[i ...
- HDU计算机学院大学生程序设计竞赛(2015’12)The Magic Tower
Problem Description Like most of the RPG (role play game), “The Magic Tower” is a game about how a w ...
- Ansible自动化运维工具
ansible软件介绍 python语言是运维人员必会的语言! ansible是一个基于Python开发的自动化运维工具!(saltstack) 其功能实现基于SSH远程连接服务! ans ...
- ZPL打印机公用代码
using System;using System.Collections.Generic;using System.Linq;using System.Web; using System.Text; ...
- 云数据库 Redis 缓存 PHP session 变量
1.安装 phpredis 扩展. wget https://github.com/nicolasff/phpredis/archive/master.zip unzip master.zip cd ...
- aerospike(1)-centos7安装aerospike
要安装的软件:server和tools 下载地址:https://www.aerospike.com/download/server/4.5.1.5/ server: 1.下载 wget https: ...
- PHP jsonencode unicode 存储问题
首先是这样的,因为输入的字符串的里面有德语的字符,如下: 当我存储到数据库之后,再用json_encode获取到数据库内的这些字符时,出问题了. 直接encode一个字符串"püüäöä&q ...
- vue--钩子函数1
最近在学习自定义指令,这里做个整理 vue允许注册自定义指令,在2.0中,代码复用和抽象的主要形式是组件.然而有的情况下仍需要对普通DOM元素进行底层操作,这时就会用到自定义指令. 全局指令direc ...