ArcGIS Runtime for Android 5 加载地图

发布时间 2023-03-22 21:13:42作者: 我也是个傻瓜

经过前期的Android Studio软件部署、Gradle构建配置、项目认识、模拟调试等,本文才正式使用ArcGIS Runtime for Android的SDK,我们可以参考官网教程。

1、申请Key

注册一个ESRI账号,并申请一个开发者API Key(很长的字符串)。

Dashboard | ArcGIS Developers

2、新建项目

新建一个空的安卓项目。

设置好项目位置,语言选择Kotlin(推荐),SDK版本选择API 23。

我们将逐个修改和编辑下面的这些文件。

3、配置Gradle

配置和同步Gradle比较关键的步骤。

在模块级build.gradle增加视图绑定viewBinding、排除重复项exclude设置(现在不理解也没关系,照做就行,后面慢慢就懂了)

//启用视图绑定
    buildFeatures {
    viewBinding true
}
//排除文件重复项
 packagingOptions {
     exclude 'META-INF/DEPENDENCIES'
}
……
// 地图arcgis runtime
implementation 'com.esri.arcgisruntime:arcgis-android:100.15.1'

在 settings.gradle 文件中,添加Esri 的 Maven 远程仓库的 URL。

// 远程仓库
maven {
       url 'https://esri.jfrog.io/artifactory/arcgis'
}

当gradle修改后,会自动弹出同步的消息,也可以点击工具的"Sync Project with Gradle Files".

在线同步完成后,就可以写界面和后台代码了。

4、编写代码

代码包括配置设置、前台代码、后台代码三部分。

(1)联网权限配置设置。在AndroidManifest.xml中增加联网的权限(因为要访问在线的地图)。

   <!--申请的用户权限-->
    <uses-permission android:name="android.permission.INTERNET" />
    <!--依赖的外部硬件-->
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

(2)前面界面。在activity_main.xml中添加ArcGIS Runtime的MapView组件。

<com.esri.arcgisruntime.mapping.view.MapView
        android:id="@+id/mapView"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

(3)后台功能。在MainActivity实现地图加载功能。

package com.gis.displaymap

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
// 导入命名空间
import com.esri.arcgisruntime.ArcGISRuntimeEnvironment
import com.esri.arcgisruntime.layers.ArcGISTiledLayer
import com.esri.arcgisruntime.mapping.ArcGISMap
import com.esri.arcgisruntime.mapping.Basemap
import com.esri.arcgisruntime.mapping.Viewpoint
import com.esri.arcgisruntime.mapping.view.MapView
import com.gis.displaymap.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(activityMainBinding.root)
        setApp()
        setupMap()
    }

    private val activityMainBinding by lazy {
        ActivityMainBinding.inflate(layoutInflater)
    }

    private val mapView: MapView by lazy {
        activityMainBinding.mapView
    }

    override fun onPause() {
        mapView.pause()
        super.onPause()
    }

    override fun onResume() {
        super.onResume()
        mapView.resume()
    }

    override fun onDestroy() {
        mapView.dispose()
        super.onDestroy()
    }

    private fun setApp(){

        //设置Key
        ArcGISRuntimeEnvironment.setApiKey("AAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX")
    }

    private fun setupMap() {

        // 创建地图
        val url= "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineCommunity/MapServer"
        val arcGISTiledLayer = ArcGISTiledLayer(url)
        val map =  ArcGISMap(Basemap(arcGISTiledLayer))

        // 设置MapView的地图
        mapView.map = map

        // 设置初始位置
        mapView.setViewpoint(Viewpoint(30.67, 104.06, 720000.0))
    }
}

5、调试运行

启动程序即可。

如果是在模拟器运行浏览地图,按住Ctrl+鼠标滑轮对视图进行放大或缩小。