学习 Arcgis 的记录文章,本系列基于 Arcgis for Android 100.14.0 版本,所以minSdkVersion
必须设置成 23。
Arcgis 介绍
Arcgis 的一家国外的专注于地图的公司,提供了一系列关于地图的服务和 SDK,从制作地图服务到数据处理都有。与高德或者百度不同,Arcgis 可以加载自己发布的地图服务,进行图斑分析等。
Android 工程引入 SDK
Gradle 引入
- 在项目级的 build.gradle 文件中
repositories
模块添加 Esri 的 maven 仓库地址。
allprojects {
repositories {
google()
jcenter()
// Add the Esri public Maven repository
maven {
url 'https://esri.jfrog.io/artifactory/arcgis'
}
}
- 在模块级 build.gradle 文件的
dependencies
块内,添加 ArcGIS Runtime SDK for Android 依赖。
dependencies {
implementation 'com.esri.arcgisruntime:arcgis-android:100.14.0'
...
}
- 添加 Java 8 支持
android {
...
compileOptions {
sourceCompatibility 1.8
targetCompatibility 1.8
}
}
- AndroidManifest.xml 权限设置
// 添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
// 声明 OpenGL 版本,2D 地图使用 2.x 版本,3D 地图使用 3.X 版本
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
加载地图
- 在布局文件中添加 Arcgis 的 MapView 组件
<com.esri.arcgisruntime.mapping.view.MapView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/mapView" />
- 在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
}