arcgis for android(六)定位

《ArcGIS Runtime for Android 100.2.1学习笔记》二:通过WebTiledLayer加载天地图 1、WebTiledLayer    WebTiledLayer是100.1后新加入的图层类型,用于定义一个可扩展的切片图层,该图层根据URL从切片服务器中请求图像,它提供了一种将非ArcGIS Services作为图层继承到地图中的简单方法。    URL通常遵循:http://{subDomain}.tile.opencyclemap.org/cycle/{level}/{col}/{row}... 阅读详情

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

2、Android现在定位需要权限,用户允许定位才行,主要是ACCESS_FINE_LOCATION和ACCESS_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.MapView
        android: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" />


    <application
        android: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;

    @Override
    protected 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() {
            @Override
            public 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();
            }
        });

    }

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

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMapView.dispose();
        //关闭定位
        if (mLocationDisplay.isStarted())
            mLocationDisplay.stop();
    }
}

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

欢迎订阅专栏!

Arcgis Android 定位 最近开始学习arcgis android开发,从最基本的定位开始来完善一个demo吧~1.首先是开发环境:IDE: android studio 3.0.12.接下来是依赖项配置,这里采用在线模式配置:2.1配置project的build.gradle,在allprojects的repositories下添加maven { url 'http://dl.bintra... 阅读详情

相关推荐

ArcGIS for Android LocationDisplay自定义数据源,显示自定义坐标的实现

一、背景     在地图项目中,我们经常会用到ArcGIS SDK For Android(特别是给政府的小范围使用的这种项目),因为我们国家规定不经过加密的坐标数据不能放在公网上的,所以会有各种各样的坐标系。其中,最最简单的加密坐标就是国测局坐标,即我们所说的火星坐标(GCJ-02)。使用这种坐标系,保持地图和数据的坐标系一致,一般不会涉及到坐标转换的问题,但是一旦涉及到定位,那肯定就会涉及到坐...

MeteorChenBo的博客 2885

Arcgis Runtime For Android(1)地图定位、地图复位

看完后你将知道的知识 地图的事件操作 地图的绘制操作 地图事件操作

weixin_43892021的博客 960

ArcGIS for Android地图去除水印

从10.2.2版本开始,ArcGIS Runtime的许可授权分为开发模式和部署模式两种。开发模式下,开发者丌需要对应用进行许可授权,即可使用全部的功能模块,但是地图上会标注“Used for Developer Only”水印,在debug调试信息中也会打印相关提示信息。在部署模式下基于ArcGIS Runtime SDK开发的应用要求必需提供许可授权,代码中注册许可信息后,地图上的水印和debu

li641808825的博客 7113

ArcGIS for Android 10.6的定位功能

ArcGiS for Android 10.6 定位功能

qq_43628949的博客 822

ArcGIS for Android安装配置详解

ArcGIS for Android安装配置详解   ArcGIS开发中,移动端的开发是重要一块。在这里,我介绍安卓端开发前的配置步骤。          首先有一个概念,就是ArcGISfor Android的SDK只是elicpse中的一个插件,而且只有这一个。所以只能在eclipse中进行开发。 下图为官网https://developers.arcgis.com/en/android

David_Ocean的专栏 3460

IntelliJ IDEA搭建ArcGIS for Android开发环境

对于Android开发工具用的最多的莫过于Eclipse,Eclipse在现今社会已经是一个不可或缺的工具,它的功能强大无比,其他工具少有能比,也是它至今还如此流行的原因。        而现如今,还有好多工具也是相当强大的,只不过在Eclipse横行的世道,只有一小部分还在用其他的,今天我来介绍另一款开发工具IntelliJ IDEA,它是java语言开发的集成环境,IntelliJ在业界被公

1万+

ArcGIS for Android Runtime100 基本操作(四)——GPS定位

对于定位大家应该都不陌生,在Android设备里,主要存在GPS定位、网络基站定位、AGPS定位等。在这里我们不对各位定位方式做深入阐述,默认以AGPS来说明下如何在Runtime100实现定位。       其实ArcGIS Runtime系列一直自带有定位的接口,但据说是不好用,所以以往大家往往用的是Android原生自带的定位方法来实现定位。不过对于Runtime100,我进行了一

卡小基的博客 1万+

ArcGIS for Android与自定义地图服务的定位应用解析

ArcGIS for Android是地理信息系统(GIS)领域中用于构建强大、智能移动应用的工具包,它允许开发者将地图、地理数据和分析功能集成到Android应用中。本章旨在为读者提供ArcGIS for Android的基本概念和应用背景,为进一步深入学习打下坚实的理论基础。无论您是初学者还是已经有一定GIS经验的开发者,通过本章的学习,您都能够了解ArcGIS for Android的核心组件、功能以及它在移动GIS开发中的重要性。

weixin_42163404的博客 1102

arcgis+android+gps地图定位,Arcgis runtime for Android 100.5 (七) GPS定位

Arcgis 提供了定位功能,LocationDisplay类注意定位权限需要动态获取,这里不再演示初始化定位locationDisplay = mapView.locationDisplay//获取定位类locationDisplay?.isShowLocation = true//展示定位圆点locationDisplay?.isShowPingAnimation = true//展示ping...

weixin_39986027的博客 953

ArcGIS框架下的Android GPS定位源码分析与实践

全球定位系统(Global Positioning System,GPS)是通过使用地面控制站和在轨卫星来进行精确定位的技术。Android设备内置的GPS硬件能够接收来自至少四颗GPS卫星的信号,通过计算这些信号的传输时间差,可以算出设备当前的地理位置。ArcGIS Runtime SDK for Android是Esri公司推出的,用于构建和部署Android平台上的地图和地理信息系统(GIS)应用程序的软件开发工具包(SDK)。

weixin_36238982的博客 707

[特殊字符]交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片

🚦交通标志检测与分类数据集-智能驾驶系统 地图数据更新 1,886张图片

cver123的博客 2075

ArcGIS for Android 之定位功能开发

关于定位的功能,开发,很早之前就有做过百度的定位功能。起初是有想法把百度的Loc V3.2的定位SDK整合进来用。但是终归是想法,但是知道昨天,我问技术群,里面的一位朋友就说起了百度地位SDK整合进来的实现方法。顿时,我就思考了一会,随后就是很激动地操作起来。根据朋友给的一个demo。做了两天,终于算是真正将功能实现了。至于界面的美观或者样式的显示这个就偷懒掉了。 http://develope

vaecer 6191

WRF-CHEM 新手向实践(四):化学初始/边界场及namelist设置

这是这个系列的最后一节了,这些经验是自己作为一个半路出家的外行一步步摸索出来的,其中不免有很多理解不到位的地方,但也正是如此,我相信这是目前新手入门wrf-chem最友好的教程之一,希望能对大家有实质性的帮助。本节继续未完成的内容。在mozbc生成化学初始和边界条件之前,还需要先在wrfinput文件中开启化学部分。

qq_42335815的博客 4634

[arcgis for android]arcgis for android 定位

本文使用的是arcgis-android:10.2.6-2,使用前请先配置好环境,ancgis for android环境配置请参考点击打开链接。 activity_main.xml: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

hellosnowyy 3277

【73页PPT】美的简单高效的管理逻辑(附下载方式)

其科技领先战略依托四级研发体系(中央研究院、事业部、前沿技术、产品开发)与 “三个一代” 模式(开发一代、储备一代、研究一代),构建全球研发布局(“2+4+N” 体系,含顺德、上海双总部,美、德、意、日四大研发中心及分布式创新节点),研发投入强度持续提升。MBS(美的精益运营体系)以 “12345” 为方法论:始于客户需求,借鉴顶级企业实践,以战略部署、人才育成、日常管理为核心,追求质量、交付、成本、创新四大目标,通过精益五步法(定价值、析流、促流动、拉系统、尽善美)实现全链条优化。

2501_92808811的博客 1102

深入Google DroidGuard:剖析其自定义虚拟机如何守护Android应用安全(附pcbc文件机制解析)

本文深入解析Google DroidGuard自定义虚拟机如何通过独特的架构设计和加密机制保护Android应用安全。DroidGuard采用动态密钥派生、全加密执行环境和pcbc文件机制,有效防御逆向工程和自动化攻击,为移动安全提供新思路。

weixin_34254464的博客 307

ArcGis for Android定位

我用arcGis Android定位,但是怎么也实现不了是怎么回事

wuchen18045179263的专栏 1422

开关电源辅助电源设计全流程拆解

地类型定义包含电路功率地(PGND)高压侧地,与主功率电路地相连整流桥负极、原边电感地、UC3842的功率地信号地(SGND)低压侧地,与控制/采样电路地相连副边整流管地、TL431地、MCU/运放地。

lyzh971103的博客 1468

Arcgis for Android 定位显示

欢迎大家增加Arcgis API for Android的QQ交流群:337469080 要想在地图上定位并将定位结果实时显示出来,启发逻辑上非常easy:首先,接收并解析GPS或者网络的位置信息,一般来说,接受的位置信息是WGS84的经纬度的,可是我们的地图的投影一般都不会是WGS84的,所以,位置信息接收来了得做一次坐标转换,眼下,坐标转换的方式有七參数或者四參数的方式,可是这两种參数转...

waixiaoyu的博客 2171

调用D3D11硬解码和渲染VideoProcessor版本

在https://blog.youkuaiyun.com/robothn/article/details/78781321一文中使用shader来显示FFMPEG硬解码后的YUV420P,本文调用D3D11的videoprocessor来进行图像空间变换和尺寸变换,取得了较好的效果。 1.初始化D3D11设备、videodevice等数据结构 FFMPEG调用D3D11硬解码,获取其对应的device,videodevice。。。 FFMPEG使用av_hwdevice_find_type_by_name调用D3d11

zlyadvocate的博客 9285

SAP-PM设备模块-PM主数据之功能位置

SAP-PM模块学习

TRUIXIANG的博客 5137

arcgis for android sdk下载地址,Arcgis Runtime sdk for android 授权

要下载和安装 ArcGISRuntime SDK for Android,您需要注册开发者账户,进而便拥有了访问所有功能的权限,从而实现开发和测试目的。但是,这种情况下,应用程序中的所有地图都具有水印,并且在debug消息中显示,您的应用程序仅可用于开发目的。要实现应用程序的部署,您必须在基础版或标准版上进行注册。具体的花费主要发生在下面环节:在标准级别部署功能;应用程序中调用了需要消耗积分(cr...

weixin_33520952的博客 1047

Android 9.0 系统framework关于忘记开机锁屏密码进不去系统桌面清除锁屏密码问题的解决

在9.0的系统rom定制化开发中,在一些产品中带锁屏密码的功能中,系统默认是滑动解锁,但是客户会设置锁屏密码,在某些时候会 忘掉锁屏密码,导致需要进入恢复出厂设置然后才能进入系统桌面,这样就导致系统的保存的资料都丢失了,所以需要要求提供接口 在下拉状态栏中或者系统服务中在忘记锁屏密码后不恢复出厂设置的情况下,可以清除锁屏密码,接下来就来实现功能

安卓兼职framework和app工程师的博客 615

Arcgis for android runtime100——我的位置以及路径跟踪

前言 实习的日子过得很快,每天都有事可干,有东西可以学习,最近的项目是地图,用的是Arcgis for android Runtime 100 。以前并没接触过这个东西,所以也是不断的查看资料,查看官网的案例。 给上我用到的链接:https://developers.arcgis.com/android/latest/guide/develop-your-first-map-app.htm。 ——...

chen_xiaoke的博客 1278

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ArcGIS for Android实现地图加载、放大缩小及定位功能

ArcGIS for Android实现地图加载、放大缩小及定位功能 java代码 package com.map.mapgis;import android.app.Activity; import android.content.Context; import android.location.Location; import android.location.LocationListener;

li641808825的博客 9940

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

从0到1:ArcGIS Runtime SDK for Android Samples新手入门教程

ArcGIS Runtime SDK for Android Samples是一套面向Android开发者的地图开发示例集合,包含了从基础地图显示到高级3D场景动画的完整功能演示。本教程将帮助新手快速掌握如何使用这些示例项目,从零开始构建专业的地图应用。 ## 为什么选择ArcGIS Runtime SDK for Android Samples? 对于Android开发者而言,地图功能集成往

gitblog_00987的博客 1106

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

上一篇: arcgis for android(三)显示三维场景
下一篇: arcgis for android(七)加载arcgis server服务
之乎者也哦
博客等级 码龄8年 7165粉丝 72原创
评论 15
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值