• Android | ArcGIS入门


    一、概述

            ArcGIS是由Esri开发的地理信息系统(GIS)软件。它用于制图、空间分析和数据可视化。ArcGIS允许用户以各种格式创建、管理、分析和共享地理信息。它通常用于城市规划、环境管理和应急响应等领域。该软件包括一系列工具,用于创建地图、进行空间分析以及生成报告和可视化。ArcGIS提供了丰富的功能和功能,使用户能够更好地理解和利用地理空间数据。

    二、案例

    注:本案例工具使用Android Studio Hedgehog | 2023.1.1 Patch 2 版本,ArcGIS采用arcgis-android:100.13.0版本

    1、配置文件

    (1)settings.gradle文件

            添加如下代码:

    1. maven {
    2. url = uri("https://maven.aliyun.com/repository/google")
    3. url = uri("https://maven.aliyun.com/repository/jcenter")
    4. url = uri("https://maven.aliyun.com/repository/mavenCentral")
    5. url = uri("https://maven.aliyun.com/repository/gradle-plugin")
    6. url = uri("https://maven.aliyun.com/nexus/content/repositories/releases/")
    7. url = uri("https://jitpack.io")
    8. url = uri("https://esri.jfrog.io/artifactory/arcgis")
    9. }

    (2)build.gradle文件

            在android块中添加如下代码:

    1. // 设置与Java 8语言特性的兼容性
    2. compileOptions {
    3. sourceCompatibility = JavaVersion.VERSION_1_8
    4. targetCompatibility = JavaVersion.VERSION_1_8
    5. }
    6. // 启用视图绑定(view binding)功能
    7. buildFeatures {
    8. viewBinding = true
    9. }
    10. // 排除META-INF\DEPENDENCIES文件的重复项,防止在输出中多次包含相同的文件而导致编译错误
    11. packaging{
    12. exclude("META-INF/DEPENDENCIES")
    13. exclude("META-INF/LGPL2.1")
    14. exclude("META-INF/LICENSE")
    15. exclude("META-INF/NOTICE")
    16. }

            在dependencies块中引入arcgis-android:100.13.0:

    implementation("com.esri.arcgisruntime:arcgis-android:100.13.0")

    (3)AndroidManifest.xml文件

            在文件中添加如下权限:

    1. <uses-permission android:name="android.permission.INTERNET" />
    2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    3. <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    4. <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    5. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    6. <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    7. <uses-permission android:name="android.permission.WAKE_LOCK" />
    8. <uses-feature android:glEsVersion="0x00020000" android:required="true" tools:ignore="WrongManifestParent" />
    9. <supports-screens
    10. android:smallScreens="true"
    11. android:normalScreens="true"
    12. android:largeScreens="true"
    13. android:xlargeScreens="true"
    14. android:anyDensity="true" />

    2、布局文件

            在activity_main.xml添加ArcGIS组件,代码如下:

    1. "1.0" encoding="utf-8"?>
    2. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. android:layout_width="match_parent"
    6. android:layout_height="match_parent"
    7. tools:context=".MainActivity">
    8. <com.esri.arcgisruntime.mapping.view.MapView
    9. android:id="@+id/mapView"
    10. android:layout_width="match_parent"
    11. android:layout_height="match_parent" />
    12. androidx.constraintlayout.widget.ConstraintLayout>

    3、Java代码

            在MainActivity.java文件中编写代码:

            (1)添加组件
    private MapView mMapView;

            (2)注册组件
    1. mMapView = findViewById(R.id.mapView);
    2. ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 16);
    3. mMapView.setMap(map);

            (3)生命周期控制
    1. @Override
    2. protected void onPause(){
    3. mMapView.pause();
    4. super.onPause();
    5. }
    6. @Override
    7. protected void onResume(){
    8. super.onResume();
    9. mMapView.resume();
    10. }
    11. @Override
    12. protected void onDestroy() {
    13. super.onDestroy();
    14. mMapView.dispose();
    15. }

           Java代码总览如下:

    1. import androidx.appcompat.app.AppCompatActivity;
    2. import android.os.Bundle;
    3. import com.esri.arcgisruntime.ArcGISRuntimeEnvironment;
    4. import com.esri.arcgisruntime.mapping.ArcGISMap;
    5. import com.esri.arcgisruntime.mapping.Basemap;
    6. import com.esri.arcgisruntime.mapping.view.MapView;
    7. public class MainActivity extends AppCompatActivity {
    8. private MapView mMapView;
    9. @Override
    10. protected void onCreate(Bundle savedInstanceState) {
    11. super.onCreate(savedInstanceState);
    12. setContentView(R.layout.activity_main);
    13. mMapView = findViewById(R.id.mapView);
    14. ArcGISMap map = new ArcGISMap(Basemap.Type.TOPOGRAPHIC, 34.056295, -117.195800, 16);
    15. mMapView.setMap(map);
    16. }
    17. @Override
    18. protected void onPause(){
    19. mMapView.pause();
    20. super.onPause();
    21. }
    22. @Override
    23. protected void onResume(){
    24. super.onResume();
    25. mMapView.resume();
    26. }
    27. @Override
    28. protected void onDestroy() {
    29. super.onDestroy();
    30. mMapView.dispose();
    31. }
    32. }

    4、运行结果

            此时若没有报错,运行程序,已经可以展示地图。效果如下:

            (按住鼠标左键可以拖动地图,同时按住Ctrl键和鼠标左键可以缩放地图)

  • 相关阅读:
    【无标题】
    day42-反射01
    李宏毅机器学习2023作业(目录)
    计算机毕业设计Java网上投稿管理系统(源码+系统+mysql数据库+Lw文档)
    【vue3】踩坑日记,vite与node版本对应(mac环境)
    【JAVA】多态的概念与实际利用
    dva详解 State、View、Action、connect、dispatch、Reducer
    代码随想录算法训练营day60|84.柱状图中最大的矩形 |完结撒花~
    基于yolov8的车牌检测训练全流程
    Python识别图片的文字(Tesseract)和中文分词(jieba)
  • 原文地址:https://blog.csdn.net/sun80760/article/details/136192833