《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初始化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()
该方法在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)
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)
缩小地图。

 

以上内容翻译若有错误,欢迎大家留言批评指出!

文章若无特殊说明均为原创,原创作品,允许转载,转载时请务必以超链接形式标明文章出处、作者信息和本声明。
博客:http://www.cnblogs.com/gis-luq​ 作者:gis-luq 邮箱:luqiang.gis@foxmail.com
posted @ 2017-02-23 16:42  疯子110  阅读(693)  评论(0编辑  收藏  举报