1、上一节讲了如何加载天地图arcgis for android 入门与提高(五)加载天地图arcgis for android 入门与提高(五)加载天地图_郝大大的博客-CSDN博客_android studio 天地图,这节讲解如何定位,定位有很多方式,但是原理都是基于GPS,第一种常用的定位方式就是Android系统自带的定位,封装在​LocationListenerLocationManager里面,自带的有个很大的缺陷:室内基本无法定位!坐标系是WGS84的,误差在十米左右;第二种可以用百度定位API,对室内定位支持较好,但是它用的是百度坐标系;第三就是本章要讲的LocationDisplay,我们用的2000坐标系的底图,在上面可以轻松设置各种空间参考,也是封装好了,室内也能解算当前位置!

2、Android现在定位需要权限,用户允许定位才行,主要是ACCESS_FINE_LOCATIONACCESS_COARSE_LOCATION 这两个权限:

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

3、请求权限

List<String> permissionList = new ArrayList<>();
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
}
if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);
}if (!permissionList.isEmpty()) {String[] permissions = permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);
}

4、定位有三种模式:

自动居中模式,可以用来初始化显示当前位置:

导航模式:

指北针模式:

5、完整代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><com.esri.arcgisruntime.mapping.view.MapViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:id="@+id/mapview"/></LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.androidgistest"><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><uses-permission android:name="android.permission.INTERNET" /><uses-feature android:glEsVersion="0x00020000" android:required="true" /><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.AndroidGISTest"><activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
package com.example.androidgistest;import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;import com.esri.arcgisruntime.layers.WebTiledLayer;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.Basemap;
import com.esri.arcgisruntime.mapping.Viewpoint;
import com.esri.arcgisruntime.mapping.view.LocationDisplay;
import com.esri.arcgisruntime.mapping.view.MapView;
import com.google.android.material.snackbar.Snackbar;import java.util.ArrayList;
import java.util.List;public class MainActivity extends AppCompatActivity {private MapView mMapView;private LocationDisplay mLocationDisplay;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mMapView = findViewById(R.id.mapview);mMapView.setAttributionTextVisible(false);//        WebTiledLayer webTiledLayer = TianDiTuMethodsClass.CreateTianDiTuTiledLayer(TianDiTuMethodsClass.LayerType.TIANDITU_VECTOR_2000);
//        Basemap tdtBasemap = new Basemap(webTiledLayer);
//        WebTiledLayer webTiledLayer1 = TianDiTuMethodsClass.CreateTianDiTuTiledLayer(TianDiTuMethodsClass.LayerType.TIANDITU_VECTOR_ANNOTATION_CHINESE_2000);
//        tdtBasemap.getBaseLayers().add(webTiledLayer1);WebTiledLayer webTiledLayer2 = TianDiTuMethodsClass.CreateTianDiTuTiledLayer(TianDiTuMethodsClass.LayerType.TIANDITU_IMAGE_2000);Basemap tdtBasemap2 = new Basemap(webTiledLayer2);WebTiledLayer webTiledLayer22 = TianDiTuMethodsClass.CreateTianDiTuTiledLayer(TianDiTuMethodsClass.LayerType.TIANDITU_IMAGE_ANNOTATION_CHINESE_2000);tdtBasemap2.getBaseLayers().add(webTiledLayer22);ArcGISMap map = new ArcGISMap(tdtBasemap2);mMapView.setMap(map);mMapView.setViewpoint(new Viewpoint(34.77669, 113.67922, 10000));//请求权限List<String> permissionList = new ArrayList<>();if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);}if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {permissionList.add(Manifest.permission.ACCESS_COARSE_LOCATION);}if (!permissionList.isEmpty()) {String[] permissions = permissionList.toArray(new String[permissionList.size()]);ActivityCompat.requestPermissions(MainActivity.this, permissions, 1);}mLocationDisplay = mMapView.getLocationDisplay();mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.RECENTER);//mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.NAVIGATION);//mLocationDisplay.setAutoPanMode(LocationDisplay.AutoPanMode.COMPASS_NAVIGATION);if (!mLocationDisplay.isStarted())mLocationDisplay.startAsync();mLocationDisplay.addLocationChangedListener(new LocationDisplay.LocationChangedListener() {@Overridepublic void onLocationChanged(LocationDisplay.LocationChangedEvent locationChangedEvent) {double longitude = locationChangedEvent.getLocation().getPosition().getX();double latitude = locationChangedEvent.getLocation().getPosition().getY();Snackbar.make(mMapView, longitude + " " + latitude, Snackbar.LENGTH_LONG).show();}});}@Overrideprotected void onPause() {super.onPause();mMapView.pause();}@Overrideprotected void onResume() {super.onResume();mMapView.resume();}@Overrideprotected void onDestroy() {super.onDestroy();mMapView.dispose();//关闭定位if (mLocationDisplay.isStarted())mLocationDisplay.stop();}
}

6、下一节讲解 arcgis for android 入门与提高(七)加载服务arcgis for android 入门与提高(七)加载arcgis server服务_郝大大的博客-CSDN博客

欢迎订阅专栏!

arcgis for android(六)定位相关推荐

  1. ArcGIS for Android 100.3.0(9):GPS定位

    ArcGIS Runtime 100定位类--LocationDisplay 其官方解释为:管理当前位置在显示地图里的展示,包括当前位置的信息,符号,以及随地图的平移.旋转.缩放等进行自动变化. 也就 ...

  2. arcgis for android(十)地理(电子)围栏实现

    1.上一章讲了arcgis for android 入门与提高(九)地理查询 + 触摸事件,本节讲一个应用,给定一个地理范围,判断当前位置是否进入到划定的围栏(可以构建多个围栏,判断这个点是否在所有的 ...

  3. arcgis for android(五)加载天地图

    1.上一篇文章arcgis for android 入门与提高(四)去掉属性标记和水印arcgis for android 入门与提高(四)去掉属性标记和水印_郝大大的博客-CSDN博客,接下来介绍国 ...

  4. android 漂亮的表单界面,面向ArcGIS for Android的表单界面生成器的设计与实现

    孙俊英 陈忠超 摘 要:基于ArcGIS for Android的采集系统作为当下主要的野外采样方式之一,被广泛的应用于各类场景,针对不同采集内容,采集系统的主要差异在于采样的属性数据所有不同,使用传 ...

  5. Arcgis for Android 空间数据WKT与JSON描述

    点线面数据标准格式 一. 点 WKT: POINT(-118.4 -45.2) JSON: { "x": -118.4, "y": -45.2, "s ...

  6. android github 评分控件_「开源」Arcgis for Android测量工具更新至V1.9,新增绘制控件...

    开源地址:https://github.com/roomanl/ArcgisTool 封装Arcgis Runtime for Android 100.6.0地图基本操作. 包括:测量工具控件及测量接 ...

  7. Android基站定位——单基站定位(二)

    转载请标明出处:http://blog.csdn.net/android_ls/article/details/8672856 基站定位原理:通过手机信号获取基站信息,然后调用第三方公开的根据基站信息 ...

  8. arcgis for Android 100.2 绘制点线面(文末有三维地图)

    这是这阶段arcgis for Android 的最后一篇了,前面有三篇.对于我经常使用坐标,进行绘制点线面图形的程序员,这个必须要的.因为在项目中经常用到. arcgis for Android 1 ...

  9. Arcgis for Android在地图上画多边形并进行边长、周长和面积的测量

    Arcgis for Android的地图操作里,放大缩小地图.图层切换.定位.测距测面等都是它的一些基本操作,封装后一般调用就是了,很简单.不过最近有了个需求,在地图上画一个多边形时候同时进行多边形 ...

最新文章

  1. java多线程——饥饿和公平
  2. 双边滤波+ 通俗自己理解
  3. Java纸牌拖拉机简单模拟
  4. Markdown 如何编写表格(格式)?
  5. opengl 大作业_「陪玩时光」糕妈:说说年糕的小学生活,先从陪作业和家长群聊起...
  6. 《Go语言圣经》学习笔记 第十章 包和工具
  7. 2011年全国大学生程序设计邀请赛(福州)
  8. 计算机名代表电脑什么,电脑开机蓝屏的各种文件名是什么意思
  9. maven生成jar,提示没有“没有主清单属性
  10. Android开发笔记(十七)GIF动画的实现GifAnimation
  11. OpenCV中将RGB数组在内存中压缩成JPEG文件
  12. NodeJs 实现 WebSocket 即时通讯(简单版)
  13. ubuntu mysql 内存满了_Ubuntu 下 mysql 卸载后重安装时遇到的问题
  14. 一份神奇的礼物(1)
  15. 遥感高光谱分类文献阅读:Going Deeper with Contextual CNN for Hyperspectral Image Classification
  16. linux虚拟磁带机管理,RHEL6 虚拟磁带机使用指南
  17. 分账功能对接解决方案
  18. python提取excel指定关键词的行数据
  19. unity泛型单例模式Singleton
  20. c语言|程序设计|指针~字母出现次数(1)

热门文章

  1. Environment variable ORACLE_UNQNAME not defined. Please set ORACLE_UNQNAME to da tabase unique name.
  2. 车载通信协议-列车实时数据协议(TRDP)
  3. [MATLAB][转载]MATLAB2018b的VS2017编译器配置
  4. 拼多多根据ID取商品详情 API
  5. matlab磁场仿真程序,电磁场的matlab仿真.docx
  6. TSC TTP-244 Pro打印机QT版本开发
  7. 富民银行java开发_富民银行富多利怎么样?从三个方面来看
  8. netty 系列之:netty 中常用的字符串编码解码器
  9. PHP TP3.2 音乐文件上传并在本地播放
  10. Nsight system(nsys)