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的區別,雖然他們能起到相同的效果,但是還是沒區分出來分辨率和比例尺的最終區別?其次我想應該是有辦法轉換的,根據是他們有等同的效果?
地理坐標系,空間坐標系(實際坐標系單位為米)?