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的區別,雖然他們能起到相同的效果,但是還是沒區分出來分辨率和比例尺的最終區別?其次我想應該是有辦法轉換的,根據是他們有等同的效果?

 

地理坐標系,空間坐標系(實際坐標系單位為米)?

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM