一、环境配置
- 在线模式
在线配置非常简单,在Android Studio 新建一个项目,在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'
}
}
}
}
- 离线模式
- 注册一个Arcgis账户:http://www.arcgis.com/features/free-trial.html
- 下载离线SDK:https://developers.arcgis.com/downloads/
- 导包,将jar包放进libs文件夹中,然后右键,点击Add as Library。
- 在main文件夹下新建一个JniLibs文件夹,将armeabi、arm64-v8a...等文件夹放进去。
在build.gradle的android{}中配置
packagingOptions{
exclude 'META-INF/LGPL2.1'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
}
Arcgis for Android的环境配置就完成了。
二、基本用法
- 在布局文件中添加
<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)//设置地图显示范围
mMapView.setScale(295828763);//当前显示的比例尺
mMapView.setResolution(9783.93962049996);//设置当前显示的分辨率
mMapView.setMapBackground(...);//设置地图背景
mMapView.setAllowRotationByPinch(...); //是否允许使用Pinch方式旋转地图
mMapView.setRotationAngle(...); //初始化时将地图旋转多少度,参数为正时按逆时针方向旋转。
mMapView.toMapPoint(x,y);//屏幕坐标转换成空间坐标
mMapView.toScreenPoint(pt);//转换成屏幕坐标对象
- 地图的监听
- 地图单击监听:OnSingleTapListener(Code中的应用,单击在地图上显示的graphic点时,需要将graphic在地图上的坐标转化成屏幕坐标,然后使用ArcGis for Android中Callout展示相应的数据)
- 平移监听:OnPanListener //--这里指的是地图平移的监听,Code中的使用Nothing.
- 长按监听:OnLongPressListener //--地图上某一点的长按监听,Code中的使用,定义当前事件点.
- 缩放监听:OnZoomListener //--对地图的缩放操作,Code中的使用Nothing.
- 状态监听:OnStatusChangedListener //--状态监听,主要是当前Mapview的状态变化相对应的CallBack.
- pinch 监听:OnPinchListener //--这里是对地图进行多指缩放(地图的放大和缩小)
-
图层
- ArcGISTiledMapServiceLayer
切片图层,顾名思义,片状的展示数据,设计多线程的操作,故而处理速度快.
2. ArcGISDynamicMapServiceLayer
性能低于(1),主要依赖数据的复杂度.
3. ArcGISImageServiceLayer
基本等同(2)
4. ArcGISFeatureLayer
5. ArcGISLocalTiledLayer
当前项目中正在使用的图层.加载本利离线数据库数据.
6. GraphicsLayer
当前项目中各种图标Icon的展示图层,该图层允许添加Graphic.
- ArcGISTiledMapServiceLayer
绘制
- 绘制点
//Drawable即Android中对应的PNG.
PictureMarkerSymbol mSymbol = new PictureMarkerSymbol(drawable);
//--point 绘制点的坐标,symbol图片,attributes需要添加的属性信息.
graphicsLayer.addGraphic(new Graphic(point, mSymbol,atttributes));
- 绘制线
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);
这里是对面的绘制操作,面顾名思义就是闭合状态,所以整个绘制过程中面都处于闭合状态;