Android ArcGis runtime 100 基础操作

1.为什么升级100.0

我之前在公司做地图一直用的是arcgis10.2,经过多年的开发,这个版本的工具类封装的非常方便,自己也没有时间去换100.0的版本。但是突然有一天工程反馈说他的9.0的安卓手机打开地图直接崩溃,在网上找了半天没有解决arcgis10在9.0手机上的兼容问题,所以只好去换最先的100.0了。但是100.0与10.0的api完全不同,在开发中踩了许多坑,所以了这篇文章希望能帮到之后遇到同样问题的同学。

下面代码如果有错误请大神指出,我会及时改正

2.集成ArcGIS Runtime SDK

集成方式在官方文档中有介绍

1.首先要在build.gradle文件中添加Esri的仓库

allprojects {
    repositories {
        google()
        jcenter()
        maven {
            url 'https://esri.bintray.com/arcgis'
        }
    }
}

2.第二步添加依赖

dependencies { 
  implementation 'com.esri.arcgisruntime:arcgis-android:100.4.0' 
}

3.根据官方文档要求在app模块build.gradle文件中添加如下代码设置java兼容版本

android {
  [...]
 module.
  compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
  }
}

4.最后一步添加权限

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

3.代码

首先直接上全部代码

public class MainPresenter extends BasePresenter implements MainContract.Presenter {
    public static final String POLYLINE = "POLYLINE";//测量距离
    public static final String POLYGON = "POLYGON";//测量面积
    public static final String IDENTIFY = "IDENTIFY";//要素识别
    public static final String NULL = "NULL";//什么都不做
    private MapView mapView;
    private ArcGISMap arcGISMap;
    private GraphicsOverlay graphicsOverlay;
    private String MapOperationType = NULL;
    boolean isCanRotate = true;
    private View contentview;
    private TextView tv;
    private ImageView iv;
    private Callout callout;
    private final MainContract.View iView;
    private DecimalFormat df;
    private SimpleDateFormat formatter;
    Map<String,List<LayerFieldBean.FieldModels>> map=new HashMap<>();

    public MainPresenter(BaseContract.View view) {
        super(view);
        iView = (MainContract.View) getmView();
    }
    //初始化地图
    @SuppressLint("ClickableViewAccessibility")
    @Override
    public void initMap() {
        mapView = iView.getMapView();
        mapView.setAttributionTextVisible(false);
        arcGISMap = new ArcGISMap();
        //底图地址
        String theURLString = common.Constance.BASE_MAP;
        ArcGISTiledLayer mainArcGISVectorTiledLayer = new ArcGISTiledLayer(theURLString);
        arcGISMap.setBasemap(new Basemap(mainArcGISVectorTiledLayer));
        mapView.setMap(arcGISMap);
        //新建并添加绘画图层
        graphicsOverlay = new GraphicsOverlay();
        mapView.getGraphicsOverlays().add(graphicsOverlay);
        //添加地图的点击事件监听
        mapView.setOnTouchListener(new DefaultMapViewOnTouchListener(iView.getContext(), mapView) {
            @Override
            public boolean onSingleTapConfirmed(MotionEvent e) {
                switch (MapOperationType) {
                    case NULL:
                        return super.onSingleTapConfirmed(e);
                    case POLYLINE:
                        //距离测量
                        Point clickPoint = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
                        MeasuringDistance(clickPoint);
                        return true;
                    case POLYGON:
                        //测量面积
                        Point clickPoint2 = mapView.screenToLocation(new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY())));
                        MeasuringArea(clickPoint2);
                        return true;
                    case IDENTIFY:
                        //要素识别
                        android.graphics.Point screenPoint = new android.graphics.Point(Math.round(e.getX()), Math.round(e.getY()));
                        if (arcGISMap.getOperationalLayers().size() > 0) {
//                            IdentifyFeatures(screenPoint);
                            IdentifyAllFeatures(screenPoint);
                        } else {
                            iView.showError(R.string.not_cxmap_error);
                        }

                        return true;
             
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值