记录一下前段时间项目中使用过的 ArcGIS 

官方说明文档:

https://developers.arcgis.com/android/latest/

API:

https://developers.arcgis.com/android/10-2/api-reference/reference/packages.html

1 .sdk接入 

 

1 > 在 project 的 build.gradle 添加maven地址

maven{ url 'https://esri.bintray.com/arcgis' }

 

2> 在module 的 build.gradle 添加sdk版本库引用(我这里用的是10.2.5的版本)

 

compile 'com.esri.arcgis.android:arcgis-android:10.2.5'

 

3> 添加用户权限

 

 

 

然后你点击Sync 同步下你的项目就ok了

 


2. 地图加载

 

1>创建一个activity ,在布局文件中创建一个承载地图的容器 ,我这里用的是FrameLayout 

 

 

2>.在代码中初始化一个地图然后以view的形式添加到这个容器中

 

/** * 设置地图属性 */private void setUpMap() {    //实例化一个MapView对象    map = new MapView(this);    //设置不允许缩放    map.setAllowOneFingerZoom(false);    //设置不允许放大    map.setAllowMagnifierToPanMap(false);    //设置不允许缩放时旋转    map.setAllowRotationByPinch(false);    //设置地图不显示背后网格    map.setMapBackground(0xffffff, 0xffffff, 1.0f, 100.0f);    //FeatureLayer所需的可选参数对象    ArcGISFeatureLayer.Options mO = new ArcGISFeatureLayer.Options();    mO.mode = ArcGISFeatureLayer.MODE.SNAPSHOT;//立即执行    //设置筛选参数    mO.outFields = new String[]{"*"};    //定义FeatureLayer对象,url指向为服务的一个图层    fLayer = new ArcGISFeatureLayer(Constants.mapUrl, mO);    //将图层添加到map中    map.addLayer(fLayer);    map_container.addView(map);}

 

如果你的地图服务没有问题,到此你就可以正常的显示出一张地图了

 

 

ArcGIS for Android 10.2.5_第1张图片

 

3. 地图渲染

加载出的地图可以进行不同颜色的标识,通过调用arcgis 对外提供的api 进行渲染可以实现

//创建渲染器ClassBreaksRenderer breaksRender = ArcGisMapUtil.getBreaksRender(mContext, color, colunm,        Double.parseDouble(minValue),        Double.parseDouble(maxValue));//设置图层渲染器fLayer.setRenderer(breaksRender);

需求是根据指标的最大最小值均分为8级,简单封装了一下,并创建了每个级别的渲染器

/** * 设置 颜色级别 * * @param Field  地图区域标识 * @param MinValue  最小值 * @param MaxValue  最大值 * @return */public static ClassBreaksRenderer getBreaksRender(Context context, int[] color, String Field, Double MinValue, Double MaxValue) {    //创建渲染器    ClassBreaksRenderer breaksRenderer = new ClassBreaksRenderer();    //设置区域表示    breaksRenderer.setField(Field);    //设置最小值    breaksRenderer.setMinValue(MinValue);    //取到最小值和最大值的差值的 1/8    Double level_stage = (MaxValue - MinValue) / 8;    SimpleFillSymbol simpleFillSymbol;    Double leve1 = MinValue + level_stage;    //    for (int i = 0; i < color.length; i++) {        //创建单个色值区域        ClassBreak cb = new ClassBreak();        if (i == color.length - 1) {            cb.setClassMaxValue(MaxValue);        } else {            cb.setClassMaxValue(leve1);            leve1 += level_stage;        }        //设置色值        simpleFillSymbol = new SimpleFillSymbol(color[i]);        //设置边线为白色        simpleFillSymbol.setOutline(new SimpleLineSymbol(context.getResources().getColor(R.color.map_line_color),                1));        cb.setSymbol(simpleFillSymbol);        //创建默认色值配置        SimpleFillSymbol symbol = new SimpleFillSymbol(Color.rgb(120, 175, 60));        symbol.setOutline(new SimpleLineSymbol(Color.rgb(238, 238, 238), 1));        breaksRenderer.setDefaultSymbol(symbol);        //添加到渲染器中        breaksRenderer.addClassBreak(cb);    }    return breaksRenderer;}

 

到此就可以将一张透明的地图渲染成自己想要的颜色了

 

 

4.设置地图默认展示坐标范围

非常简单,调用一个api就可以实现,需要你做的只是传入的只有四个 Double 类型的坐标值就可以了

map.setExtent(new Envelope(min_x, min_y, max_x, max_y), 0);

 

5.设置地图文字说明

 

这个地方非常坑,有个文字字体的问题,Android默认是不支持的,试过很多方式解决,度娘很多推荐在系统的字体库中添加需要的字体,结果不太好用,最终是将文字转换为BitmapDrawable 的方式加载到图层上的,缺点就是文字信息较多时,加载出文字会有明显的刷新地图的视感。。。

 
private void getMapNameInfo() {    //  添加地图说明    try {        if (mGraphicsLayer == null) {            mGraphicsLayer = new GraphicsLayer();            map.addLayer(mGraphicsLayer);        }        mGraphicsLayer.removeAll();        //创建查询参数对象        Query query = new Query();        //设置参数 * 代表全部        query.setOutFields(new String[]{"*"});        //查询条件        query.setWhere("1=1");        fLayer.queryFeatures(query, new CallbackListener() {            @Override            public void onCallback(FeatureSet featureSet) {                Graphic[] graphics = featureSet.getGraphics();                if (graphics != null && graphics.length > 0) {                    for (int i = 0; i < graphics.length; i++) {                        Graphic graphic = graphics[i];                        Map attr = graphic.getAttributes();                        String code = (String) attr.get("CODE");  //这些参数问 服务端要                        String name = (String) attr.get("NAME");                        Double x = (Double) attr.get("CENTER_X");                        Double y = (Double) attr.get("CENTER_Y");                        Geometry geometry = new Point(x, y);                       //创建Marker                        PictureMarkerSymbol markerSymbol = new PictureMarkerSymbol(                                ArcGisMapUtil.createMapBitMap(attr.get("NAME") + ""));                       //将 marker添加到图像中                        Graphic gText = new Graphic(geometry, markerSymbol);                        mGraphicsLayer.addGraphic(gText);                    }                }            }            @Override            public void onError(Throwable throwable) {            }        });    } catch (Exception e) {        e.printStackTrace();    }}/** * 文字转换BitMap * * @param text * @return */public static Drawable createMapBitMap(String text) {    Paint paint = new Paint();    paint.setColor(Color.WHITE);    paint.setTextSize(24);    paint.setAntiAlias(true);    paint.setTextAlign(Paint.Align.CENTER);    float textLength = paint.measureText(text);    int width = (int) textLength + 10;    int height = 40;    Bitmap newb = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);    Canvas cv = new Canvas(newb);    cv.drawColor(Color.parseColor("#00000000"));    cv.setDrawFilter(new PaintFlagsDrawFilter(0, Paint.ANTI_ALIAS_FLAG | Paint.FILTER_BITMAP_FLAG));    cv.drawText(text, width / 2, 20, paint);    cv.save(Canvas.ALL_SAVE_FLAG);// 保存    cv.restore();// 存储    return new BitmapDrawable(newb);}

 

 

到此 ,就可以将需要的文字说明加载到图层上了

 

 

还有密度图展示,有时间再整理吧。。。

地图上边的log是需要付费才阔以去除的,有需要的可以看下它的官网

截止到文章编辑arcgis 是不支持热力图展示的。

 

 

更多相关文章

  1. android使用web加载网页的js问题
  2. 使用Android Studio开发百度地图LBS过程中遇到找不到so文件
  3. Android 下载进度条, 自定义加载进度条,loading动画
  4. Android动态加载学习
  5. Android插件化开发之DexClassLoader动态加载dex、jar小Demo
  6. [Android] 开发资料收集:动态加载、插件化、热修复技术
  7. Activity的四种加载模式

随机推荐

  1. Android实现仿网易新闻主界面设计
  2. Android(安卓)简单的计算器实现
  3. 一个二维码实现IOS和android两个平台的下
  4. android横屏切换不销毁-Handling the Con
  5. 开源项目之Android(安卓)Ecclesia(短信应
  6. android开源代码编译方法
  7. Android碎片化问题
  8. [原]如何在Android平台上建立APN
  9. Android中使用HorizontalScrollView横向
  10. Android(安卓)Studio 插件