一、環(huán)境配置
- 在線模式
在線配置非常簡(jiǎn)單,在Android Studio 新建一個(gè)項(xiàng)目,在build.gradle里添加如下代碼
allprojects{
repositories{
jcenter()
maven{
url'https://esri.bintray.com/arcgis'
}
}
}
subprojects{
afterEvaluate{project->
if(project.hasProperty("dependencies")){
dependencies{
compile'com.esri.arcgis.android:arcgis-android:10.2.7'
}
}
}
}
- 離線模式
- 注冊(cè)一個(gè)Arcgis賬戶(hù):http://www.arcgis.com/features/free-trial.html
- 下載離線SDK:https://developers.arcgis.com/downloads/
- 導(dǎo)包,將jar包放進(jìn)libs文件夾中,然后右鍵,點(diǎn)擊Add as Library。
- 在main文件夾下新建一個(gè)JniLibs文件夾,將armeabi、arm64-v8a...等文件夾放進(jìn)去。
在build.gradle的android{}中配置
packagingOptions{
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
Arcgis for Android的環(huán)境配置就完成了。
二、基本用法
- 在布局文件中添加
<com.esri.android.map.MapView
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="match_parent" />
- 初始化地圖
mMapView = (MapView) findViewById(R.id.map);
//加載底圖
mMapView.addLayer(new ArcGISTiledMapServiceLayer(
"http://cache1.arcgisonline.cn/ArcGIS/rest/services/ChinaOnlineStreetCold/MapServer"));
- 地圖去除水印
String clientID = "273DobVpQjOHcrZe";
ArcGISRuntime.setClientId(clientID);
- 地圖操作常用API
//縮放
mMapView.zoomIn(...) //--放大
mMapView.zoomOut(...)//--縮小
mMapView.zoomToResolution(...);
mMapView.zoomToScale(...);
//控制顯示范圍
Envelope env = new Envelope(...);//范圍
mMapView.setExtent(env)//設(shè)置地圖顯示范圍
mMapView.setScale(295828763);//當(dāng)前顯示的比例尺
mMapView.setResolution(9783.93962049996);//設(shè)置當(dāng)前顯示的分辨率
mMapView.setMapBackground(...);//設(shè)置地圖背景
mMapView.setAllowRotationByPinch(...); //是否允許使用Pinch方式旋轉(zhuǎn)地圖
mMapView.setRotationAngle(...); //初始化時(shí)將地圖旋轉(zhuǎn)多少度,參數(shù)為正時(shí)按逆時(shí)針?lè)较蛐D(zhuǎn)。
mMapView.toMapPoint(x,y);//屏幕坐標(biāo)轉(zhuǎn)換成空間坐標(biāo)
mMapView.toScreenPoint(pt);//轉(zhuǎn)換成屏幕坐標(biāo)對(duì)象
- 地圖的監(jiān)聽(tīng)
- 地圖單擊監(jiān)聽(tīng):OnSingleTapListener(Code中的應(yīng)用,單擊在地圖上顯示的graphic點(diǎn)時(shí),需要將graphic在地圖上的坐標(biāo)轉(zhuǎn)化成屏幕坐標(biāo),然后使用ArcGis for Android中Callout展示相應(yīng)的數(shù)據(jù))
- 平移監(jiān)聽(tīng):OnPanListener //--這里指的是地圖平移的監(jiān)聽(tīng),Code中的使用Nothing.
- 長(zhǎng)按監(jiān)聽(tīng):OnLongPressListener //--地圖上某一點(diǎn)的長(zhǎng)按監(jiān)聽(tīng),Code中的使用,定義當(dāng)前事件點(diǎn).
- 縮放監(jiān)聽(tīng):OnZoomListener //--對(duì)地圖的縮放操作,Code中的使用Nothing.
- 狀態(tài)監(jiān)聽(tīng):OnStatusChangedListener //--狀態(tài)監(jiān)聽(tīng),主要是當(dāng)前Mapview的狀態(tài)變化相對(duì)應(yīng)的CallBack.
- pinch 監(jiān)聽(tīng):OnPinchListener //--這里是對(duì)地圖進(jìn)行多指縮放(地圖的放大和縮小)
-
圖層
- ArcGISTiledMapServiceLayer
切片圖層,顧名思義,片狀的展示數(shù)據(jù),設(shè)計(jì)多線程的操作,故而處理速度快.
2. ArcGISDynamicMapServiceLayer
性能低于(1),主要依賴(lài)數(shù)據(jù)的復(fù)雜度.
3. ArcGISImageServiceLayer
基本等同(2)
4. ArcGISFeatureLayer
5. ArcGISLocalTiledLayer
當(dāng)前項(xiàng)目中正在使用的圖層.加載本利離線數(shù)據(jù)庫(kù)數(shù)據(jù).
6. GraphicsLayer
當(dāng)前項(xiàng)目中各種圖標(biāo)Icon的展示圖層,該圖層允許添加Graphic.
- ArcGISTiledMapServiceLayer
繪制
- 繪制點(diǎn)
//Drawable即Android中對(duì)應(yīng)的PNG.
PictureMarkerSymbol mSymbol = new PictureMarkerSymbol(drawable);
//--point 繪制點(diǎn)的坐標(biāo),symbol圖片,attributes需要添加的屬性信息.
graphicsLayer.addGraphic(new Graphic(point, mSymbol,atttributes));
- 繪制線
Polyline mPloyline = new Polyline();//--繪制線段的對(duì)象
SimpleLineSymbol outline =
new SimpleLineSymbol(Color.RED, 3, STYLE.SOLID);//--為線段設(shè)置屬相,如線段的顏色,樣式
mPloyline.setEmpty();//--清空之前的所有數(shù)據(jù) 僅僅在Down的時(shí)候清空即可.
mPloyline.startPath(pressPoint); //--設(shè)置繪制的起始位置. 僅僅在Down的時(shí)候清空即可
mPolyline.lineTo(movePoint); //--設(shè)置當(dāng)前位置移動(dòng)的下一個(gè)位置點(diǎn).Move的時(shí)候調(diào)用此處
Graphic graphic = new Graphic(myCustomPolyline, outline);//--創(chuàng)建Graphic 僅僅一次
mPolygonId = mCustomGraphicLayer.addGraphic(graphic); //--將Graphic添加到圖層 僅僅一次
mCustomGraphicLayer.updateGraphic(mPolygonId, myCPolyline); //--更新當(dāng)前數(shù)據(jù)到圖層.
Notes:如果你希望繪制的折現(xiàn)最后是閉合狀態(tài),這里可通過(guò)設(shè)置mPloyline.lineTo(pressPoint);
- 繪制面(等同之上的操作,唯一不同點(diǎn)在于繪制對(duì)象)
Polygon mPolygon = new Polygon();
SimpleFillSymbol mPolygonSymbol = new SimpleFillSymbol(color);
...
Graphic graphic = new Graphic(mPolygon,mPolygonSymbol);
mPolygonId = mCustomGraphicLayer.addGraphic(graphic);
mCustomGraphicLayer.updateGraphic(mPolygonId, myCPolyline);
這里是對(duì)面的繪制操作,面顧名思義就是閉合狀態(tài),所以整個(gè)繪制過(guò)程中面都處于閉合狀態(tài);