zoukankan      html  css  js  c++  java
  • ArcGis for Android 工作与学习


    ArcGis安装
    需求
      windows7(32/64)
      Eclipse3.6以上版本
      Android Sdk 2.2以上
      Jdk 7

    安装步骤
      Eclipse安装
        下载ArcGis插件
        在Eclipse上打开 Help >> Install New Software

    创建Arcgis项目
      创建方式等同Android项目,不同点创建项目时,选择创建Arcgis项目,然后傻瓜式的next即可。(默认支持的最低sdk是2.2)

    项目测试
    补充:
      Arcgis绘制不同于Android,并不是在UI(main)线程完成绘制,而是使用OpenGL完成的绘制(好处:采用GPU绘制,大大降低了对CPU的依赖,所以绘制会变得更加连贯自然,绘制OpenGL有专门的绘制线程,不会影响主线程)

    模拟器测试需注意:
      ArcGIS Runtime SDK for Android 使用 OpenGL ES 2.0。如果用模拟器开发,需要使用 Android 4.0.3 以上版本的模拟器(支持 GPU)


    ArcGis中主要的控制继承自FramLayout的MapView
      MapView
        1,MapView是呈现地图数据的容器,MapView可以添加一个或多个图层;图层只有添加到 MapView 容器中才能进行显示。其次,通过 MapView 可以设置地图的显示范围、是否允许被旋转、地图背景、地图的最大/最小分辨率及
      其指定当前显示的分辨率/比例尺。最后,MapView 提供了丰富的手势监听接口,通过这些监听器,可以监听各种手势动作,如点击,双击,移动或长按等操作

      2,MapView的添加方式两种
        XML添加即:
        <com.esri.android.map.MapView
           android:id="@+id/map"
           android:layout_width="fill_parent"
           android:layout_height="match_parent">
        代码中动态添加:
        MapView map = new MapView(this);//--new MapView对象
        map.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
        LayoutParams.FILL_PARENT)); //--设置LayoutParams
        tileLayer = new ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"); //--切片图层的创建
        map.addLayer(tileLayer);//--图层的添加
        setContentView(map ); //--将图层添加给窗体,最后显示在手机上.
    3,地图的缩放(API)
        1,常用的缩放方式
        mMapView.zoomIn(...) //--放大
        mMapView.zoomOut(...)//--缩小


        2,其他缩放方式
        mMapView.zoomToResolution(...);
        mMapView.zoomToScale(...);
    4,常用API的介绍
      Envelope env = new Envelope(...);//范围
      mMapView.setExtent(env)//设置地图显示范围
      mMapView.setScale(295828763);//当前显示的比例尺
      mMapView.setResolution(9783.93962049996);//设置当前显示的分辨率

      mMapView.setMapBackground(...);//设置地图背景
      mMapView.setAllowRotationByPinch(...); //是否允许使用Pinch方式旋转地图
      mMapView.setRotationAngle(...); //初始化时将地图旋转多少度,参数为正时按逆时针方向旋转。

      mMapView.toMapPoint(x,y);//屏幕坐标转换成空间坐标
      mMapView.toScreenPoint(pt);//转换成屏幕坐标对象

    5,MapView的listener设置
      地图单击监听:OnSingleTapListener(Code中的应用,单击在地图上显示的graphic点时,需要将graphic在地图上的坐标转化成屏幕坐标,然后使用ArcGis for Android中Callout展示相应的数据)
      平移监听:OnPanListener //--这里指的是地图平移的监听,Code中的使用Nothing.
      长按监听:OnLongPressListener //--地图上某一点的长按监听,Code中的使用,定义当前事件点.
      缩放监听:OnZoomListener //--对地图的缩放操作,Code中的使用Nothing.
      状态监听:OnStatusChangedListener //--状态监听,主要是当前Mapview的状态变化相对应的CallBack.
      pinch 监听:OnPinchListener //--这里是对地图进行多指缩放(地图的放大和缩小)


    图层
      切片图层、动态图层、本地图层等等
      1,ArcGISTiledMapServiceLayer
        切片图层,顾名思义,片状的展示数据,设计多线程的操作,故而处理速度快.
      2, ArcGISDynamicMapServiceLayer
        性能低于(1),主要依赖数据的复杂度.
      3,ArcGISImageServiceLayer
        基本等同(2)
      4,ArcGISFeatureLayer
      5, ArcGISLocalTiledLayer
        当前项目中正在使用的图层.加载本利离线数据库数据.
      6,GraphicsLayer
        当前项目中各种图标Icon的展示图层,该图层允许添加Graphic.
      例如:
        PictureMarkerSymbol mSymbol = new PictureMarkerSymbol(drawable);//Drawable即Android中对应的PNG.
        graphicsLayer.addGraphic(new Graphic(point, mSymbol,atttributes)); //--point 绘制点的坐标,symbol图片,attributes需要添加的属性信息.

    SpatialReference
      空间参考,主要用于坐标系的转换操作(空间坐标系到投影坐标系的转换,反之亦然).



    绘制操作
      绘制点(Icon.图层.6)

      绘制线.
        Polyline mPloyline = new Polyline();//--绘制线段的对象
        SimpleLineSymbol outline = new SimpleLineSymbol(Color.RED, 3, STYLE.SOLID);//--为线段设置属相,如线段的颜色,样式

        mPloyline.setEmpty();//--清空之前的所有数据 仅仅在Down的时候清空即可.
        mPloyline.startPath(pressPoint); //--设置绘制的起始位置. 仅仅在Down的时候清空即可
        mPolyline.lineTo(movePoint); //--设置当前位置移动的下一个位置点.Move的时候调用此处

        Graphic graphic = new Graphic(myCustomPolyline, outline);//--创建Graphic 仅仅一次
        mPolygonId = mCustomGraphicLayer.addGraphic(graphic); //--将Graphic添加到图层 仅仅一次
        mCustomGraphicLayer.updateGraphic(mPolygonId, myCPolyline); //--更新当前数据到图层.

        Notes:如果你希望绘制的折现最后是闭合状态,这里可通过设置mPloyline.lineTo(pressPoint);

      绘制面(等同之上的操作,唯一不同点在于绘制对象)
        Polygon mPolygon = new Polygon();
        SimpleFillSymbol mPolygonSymbol = new SimpleFillSymbol(color);
        ...
        Graphic graphic = new Graphic(mPolygon,mPolygonSymbol);
        mPolygonId = mCustomGraphicLayer.addGraphic(graphic);  
        mCustomGraphicLayer.updateGraphic(mPolygonId, myCPolyline);

        Notes:这里是对面的绘制操作,面顾名思义就是闭合状态,所以整个绘制过程中面都处于闭合状态;

    从开始学习到现在一个月的时间了,懂的实在是太少了,我这里提几个我不懂的问题,希望路过的大神会的留个脚印,解答疑惑.

    mMapView.setScale();
    mMapView.setResolution();

    上述API的区别,虽然他们能起到相同的效果,但是还是没区分出来分辨率和比例尺的最终区别?其次我想应该是有办法转换的,根据是他们有等同的效果?

    地理坐标系,空间坐标系(实际坐标系单位为米)?

  • 相关阅读:
    Android 如何处理崩溃的异常
    体验下Xcode5与ios7
    IOS 改变导航栏返回按钮的标题
    android之HttpURLConnection
    android异步加载图片
    android 从服务器上获取APK下载安装
    android AsyncTask异步下载并更新进度条
    android 四种堆状态
    Windows Azure 的开源 DNA
    mysql 只给更新表的某个字段的授权
  • 原文地址:https://www.cnblogs.com/liemng/p/5949770.html
Copyright © 2011-2022 走看看