Arcgis for Android 100 系列(一)、环境配置和地图加载

1,593 阅读1分钟

学习 Arcgis 的记录文章,本系列基于 Arcgis for Android 100.14.0 版本,所以minSdkVersion 必须设置成 23。

Arcgis 介绍

Arcgis 的一家国外的专注于地图的公司,提供了一系列关于地图的服务和 SDK,从制作地图服务到数据处理都有。与高德或者百度不同,Arcgis 可以加载自己发布的地图服务,进行图斑分析等。

Android 工程引入 SDK

Gradle 引入

  1. 在项目级的 build.gradle 文件中 repositories 模块添加 Esri 的 maven 仓库地址。
allprojects {
  repositories {
    google()
    jcenter()

    // Add the Esri public Maven repository
    maven {
        url 'https://esri.jfrog.io/artifactory/arcgis'
    }
  }
  1. 在模块级 build.gradle 文件的 dependencies 块内,添加 ArcGIS Runtime SDK for Android 依赖。
dependencies {
  implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
  ...
}
  1. 添加 Java 8 支持
android {
  ...
  compileOptions {
    sourceCompatibility 1.8
    targetCompatibility 1.8
  }
}
  1. AndroidManifest.xml 权限设置
// 添加网络权限
<uses-permission android:name="android.permission.INTERNET" />

// 声明 OpenGL 版本,2D 地图使用 2.x 版本,3D 地图使用 3.X 版本
<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true" />

加载地图

  1. 在布局文件中添加 Arcgis 的 MapView 组件
<com.esri.arcgisruntime.mapping.view.MapView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/mapView" />
  1. 在Arcgis 100 中,MapView 需要先设置底图,然后才能加载其他的图层。
// 设置底图,这里使用的是 Arcgis 发布的街道地图
String mapUrl = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";
ArcGISTiledLayer layer = new ArcGISTiledLayer(mapUrl);
ArcGISMap map = new ArcGISMap(new Basemap(layer));
mapView.setMap(map);

完整代码如下:

 public class MainActivity extends AppCompatActivity {

    private ArcGISMap onlineMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        initMap();
    }

    private void initMap() {
        String mapUrl = "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer";
        ArcGISTiledLayer layer = new ArcGISTiledLayer(mapUrl);
        onlineMap = new ArcGISMap(new Basemap(layer));
        binding.mapView.setMap(onlineMap);
    }

    @Override
    protected void onResume() {
        binding.mapView.resume();
        super.onResume();
    }

    @Override
    protected void onPause() {
        binding.mapView.pause();
        super.onPause();
    }

    @Override
    protected void onDestroy() {
        binding.mapView.dispose();
        super.onDestroy();
    }
}

这里我用了 viewBinding 需要在模块级 build.gradle 文件添加配置

buildFeatures {
    viewBinding true
}