zoukankan      html  css  js  c++  java
  • ArcGIS Runtime for Android开发教程V2.0(4)基础篇---MapView

    转自http://blog.csdn.net/arcgis_mobile/article/details/8147328

     MapView是ArcGIS Runtime SDK forAndroid的核心组件,通过MapView可以呈现地图服务的数据,并且在MapView中定义了丰富的属性、方法和事件,用户通过MapView可以操作设备的触摸屏,默认MapView可以响应用户的各类手势的操作,在GIS的开发中,什么时候都少不了地图操作。MapView是Android中ViewGroup的子类,也是ArcGIS Runtime SDK for Android中的地图容器,与很多ArcGIS API中的Map、MapControl类作用是一样的。

    1、 MapView功能介绍

           MapView的强大不仅仅是因为它是呈现地图数据的容器,MapView为我们提供丰富的功能,下面来分析MapView为我们提供哪些功能。

         首先,MapView具有呈现地图能力,MapView可以添加一个或多个图层,图层又分很多种,如:切片图层、动态图层、本地图层等等,图层只有添加到MapView容器中才能进行显示。

           其次,通过MapView我们可以设置地图的显示范围、是否允许被旋转、地图背景、地图的最大/最小分辨率及其指定当前显示的分辨率/比例尺。

           最后,我们来看一下MapView提供的丰富手势监听接口,通过这些监听器,可以监听我们各种手势动作,如:点击、双击、移动或长按等等操作。

    2、 MapView添加方式

           

          我们有两种方式可以将MapView添加到我们的应用当中:一个是XML方式,另一个是硬编码方式;我们多采用XML方式,方便调整布局及其属性的相关设置。

    l  XML方式:

    [java] view plaincopy
     
    1. <com.esri.android.map.MapView  
    2.   
    3.         android:id="@+id/map"  
    4.   
    5.         android:layout_width="fill_parent"  
    6.   
    7.         android:layout_height="match_parent">  
    8.   
    9. </com.esri.android.map.MapView>  
    10.    

    l  硬编码方式:

    [java] view plaincopy
     
    1. MapView map = new MapView(this);  
    2.   
    3. map.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));  
    4.   
    5. tileLayer = new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer");  
    6.   
    7. map.addLayer(tileLayer);  
    8.   
    9. setContentView(map );  
    10.    

    3、地图缩放、旋转和坐标转换

           

             地图缩放,是地图中最基本的功能,我们可以是使用MapView进行地图的缩放,MapView提供了多种地图缩放的方式,如代码所示:

    [java] view plaincopy
     
    1. mMapView.zoomin();  
    2.   
    3. mMapView.zoomout();  
    4.   
    5. mMapView.zoomToResolution(centerPt,res);  
    6.   
    7. mMapView.zoomToScale(centerPt,scale);  

            对于上面的几种缩放方式前两种主要的功能是逐级缩放,也就是说当我们调用一次zoomin()方法地图将放大一级,调用一次zoomout()方法地图将缩小一级。

    而对于后两种缩放,它们是按照不同的分辨率或比例尺进行缩放的,调用zoomToResolution(centerPt, res)方法进行缩放时,我们需要传入两个参数,第一参数centerPt为我们要按照哪个中心点进行缩放,因此我们需要传入一个Point对象才行,第二个参数为要缩放到的分辨率;对于zoomToScale(centerPt, scale)来说,和zoomToResolution(centerPt, res)很类似,两个方法第一个参数是相同的,而第二个参数不再是分辨率,是要传入地图的比例尺。

    这里的分辨率或比例尺值与我们的发布的服务密切相关,发布的地图服务如果生成了缓存切片,在服务中我可以看到不同级别对应的比例尺和分辨率,如图:

    服务地址:http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer

    MapView还可以设置地图的显示范围、比例尺、分辨率、旋转角度和地图背景色,如:

    [java] view plaincopy
     
    1. map = (MapView)findViewById(R.id.map);  
    2.   
    3. ……  
    4.   
    5. Envelope env = new Envelope(12957628.582414864247.280312612958114.42250654864490.20036087);//范围  
    6.   
    7. map. setExtent(env)//设置地图显示范围  
    8.   
    9. map. setScale(295828763);//当前显示的比例尺  
    10.   
    11. map. setResolution(9783.93962049996);//设置当前显示的分辨率  
    12.   
    13. //上面三个方法都可以改变地图的显示范围,在代码中是不会同时使用的  
    14.   
    15. map.setMapBackground(0xffffffff, Color.TRANSPARENT, 00);//设置地图背景  
    16.   
    17. map.setAllowRotationByPinch(true);//是否允许使用Pinch方式旋转地图map.setRotationAngle(15.0); //初始化时将地图旋转15度,参数为正时按逆时针方向旋转。  
    18.    

            除了上面的功能,MapView还有一主要的功能:“坐标转换”,这里所说的坐标转换是指,怎样把屏幕坐标转换成空间坐标或将空间坐标转换成屏幕坐标,如:

    [java] view plaincopy
     
    1. //给地图添加一个点击事件监听  
    2.   
    3. map.setOnSingleTapListener(newOnSingleTapListener() {  
    4.   
    5.               
    6.   
    7.             publicvoid onSingleTap(float x, float y) {  
    8.   
    9.                 // TODO Auto-generated method stub  
    10.   
    11. Point pt = map.toMapPoint(x,y);//屏幕坐标转换成空间坐标  
    12.   
    13. Point screenPoint = map. toScreenPoint(pt);//转换成屏幕坐标对象  
    14.   
    15.    
    16.   
    17.             }  
    18.   
    19. });  


     

    4 、地图监听器

           对于移动端手势的监听是一个比较重要的环节,对于地图的手势操作也是由MapView来管理的,主要有以下几种监听:

    l  地图单击监听:OnSingleTapListener

    l  平移监听:OnPanListener

    l  长按监听:OnLongPressListener

    l  缩放监听:OnZoomListener

    l  状态监听:OnStatusChangedListener

    l  pinch监听:OnPinchListener

           有了这些监听我们就可以对地图无所以为操作,对于这些监听在此不过多解释,如果想详细了解这些监听的用法可查看3.4节(地图事件)。

           到此,所有关于MapView的介绍告一段落,下面进入Layer世界。

  • 相关阅读:
    leetcode75 Sort Colors
    leetcode74 Search a 2D Matrix
    岭南职业技术学院清远大学城网
    南华工商学院大学城网
    清远职业技术学院大学城网
    大学城网清远
    清远学城网
    Android 华为手机物理键盘挡住了我的应用底部导航栏
    Android 性能优化之-(ViewStub)
    Android程序员必读之书
  • 原文地址:https://www.cnblogs.com/cugwx/p/3781234.html
Copyright © 2011-2022 走看看