Unity之GPS定位(高德解析)

前言

开篇

  • 哈喽艾瑞宝嘚,又一周没见到小黑了,肯定想我了吧。
  • 既然这样,那小黑一定要给大家一个忠告,在办公大楼上厕所千万别玩手机啊~~,小黑深受其害,手机(OPPO R9 Plus)自己提前退休了,其实还是有些不舍得的,不过毕竟用了4年多了,也该换了,然后今儿手机到了,心情很好啊,哈哈哈哈哈哈哈!
  • 好了好了,不给大家扯皮了,咱们直入主题!

Unity版本及使用插件

说到Unity版本,那当然还是老样子啦,Unity2019.4.4f1
插件用到了:LitJson

正题

  • 这两天项目上边说是让加一个显示当前位置的功能,那我一想那不就是定位么,果断就答应了,这是学习的时候啊,然而,我马上就搜到了大佬的博客,然后有了下边的代码。。。。。。。。
  • 当然了啊,我也自己想了好多完善了好多,不过这版中只有申请权限。

创建场景

第一步在场景中创建相关Text文本,用来显示

写脚本

using UnityEngine;
using System.Collections;
using LitJson;
using UnityEngine.Networking;
using UnityTools;
using UnityEngine.Android;
namespace Location
{
public class LocationTest : MonoBehaviour
{
private string longitude;//经度
private string latitude;//纬度
void Start() => StartCoroutine(StartGPS());
IEnumerator StartGPS()
{
//Unity给我们提供的一个相关权限类 Permission,可以判断当前相关权限是否开启
if (Permission.HasUserAuthorizedPermission(Permission.FineLocation))
{
//如果没有开启就提示开启权限
Permission.RequestUserPermission(Permission.FineLocation);
}
Debuger.LogError("开始获取GPS信息");
// 检查位置服务是否可用
if (!Input.location.isEnabledByUser)
{
Debuger.Log("位置服务不可用");
yield break;
}
// 查询位置之前先开启位置服务
Debuger.Log("启动位置服务");
Input.location.Start();
// 等待服务初始化
int maxWait = 20;
while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
{
Debuger.Log(Input.location.status.ToString() + ">>>" + maxWait.ToString());
yield return new WaitForSeconds(1);
maxWait--;
}
// 服务初始化超时
if (maxWait < 1)
{
Debuger.Log("服务初始化超时");
yield break;
}
// 连接失败
if (Input.location.status == LocationServiceStatus.Failed)
{
Debuger.Log("无法确定设备位置");
yield break;
}
else
{
Debuger.Log("Location: \n" +
"纬度:" + Input.location.lastData.latitude + " \n" +
"经度:" + Input.location.lastData.longitude + " \n" +
"海拔:" + Input.location.lastData.altitude + " \n" +
"水平精度:" + Input.location.lastData.horizontalAccuracy + " \n" +
"垂直精度:" + Input.location.lastData.verticalAccuracy + " \n" +
"时间戳:" + Input.location.lastData.timestamp);
longitude = Input.location.lastData.longitude.ToString();
latitude = Input.location.lastData.latitude.ToString();
StartCoroutine(GetRequest(
"http://restapi.amap.com/v3/geocode/regeo?key="+ key + "&location=" + longitude + "," + latitude));
}
// 停止服务,如果没必要继续更新位置,(为了省电
Input.location.Stop();
}
string key = ""; //去高德地图开发者申请
IEnumerator GetRequest(string uri)
{
using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
{
// Request and wait for the desired page.
yield return webRequest.SendWebRequest();
string[] pages = uri.Split('/');
int page = pages.Length - 1;
if (webRequest.isNetworkError)
{
// Debug.Log(pages[page] + ": Error: " + webRequest.error);
}
else
{
JsonData jd = JsonMapper.ToObject(webRequest.downloadHandler.text);
Debuger.LogError("rn" + jd["regeocode"]["formatted_address"].ToString());
}
}
}
}
}

把脚本挂载到场景中

打包发布场景

安装真机并且测试

小黑为了给你们看动态结果,只好先拿手机录像,并且从电脑上制作GIF图看咯。

怎么样,是不是很顶!!!!给啊

代码中的Key怎么来的

1、找平台

随便打开一个浏览器并且在搜索栏输入:高德开发者平台

2、登录或者申请账号

3、获取KEY

  • 首先顶部导航栏点击开发支持=>Web服务=>Web服务API

  • 进入页面后往下滑

  • 进入页面后右上角点击创建新应用

  • 然后在创建好的应用上边点击增加

  • 如何创建有key的应用呢

  • 然后我们就能看到相关的key值了,把它复制到脚本中,然后使用吧!

结尾

结尾唠叨

  • 小黑的今日分享结束啦,小伙伴们你们get到了么,你们有没有更好的办法呢,可以评论区留言分享,也可以加小黑的QQ:841298494,大家一起进步。

今日无推荐

该篇参考博客:https://blog.csdn.net/qq_35080168/article/details/103425746

程序的道路上学习永不停止,探索随时进行。
Let’s go. Just do it. We can.

Unity之GPS定位(高德解析)的更多相关文章

  1. Unity之GPS定位(腾讯sdk)

    Unity之GPS定位(腾讯sdk) 目录 Unity之GPS定位(腾讯sdk) 前言 Unity版本及使用插件 正题 编写脚本 Run运行, 跑起来就行,具体要什么,去相关类找就好了. 没有腾讯地图 ...

  2. GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样?

    GPS定位为什么要转换处理?高德地图和百度地图坐标处理有什么不一样? 先了解一下 高德地图 采用: GCJ-02 (不可逆) 百度百科: http://baike.baidu.com/link?url ...

  3. Android开发之位置定位详解与实例解析(GPS定位、Google网络定位,BaiduLBS(SDK)定位)

    在android开发中地图和定位是很多软件不可或缺的内容,这些特色功能也给人们带来了很多方便.定位一般分为三种发方案:即GPS定位.Google网络定位以及基站定位 最简单的手机定位方式当然是通过GP ...

  4. GPS定位解决偏差

    目录 GPS定位解决偏差 开篇 实践 1.解决思路以及步骤 2.实践出真理! 3.上坐标系之间的代码. 希望大家:点赞,留言,关注咯~ 唠家常 今日推荐都在文章中了 GPS定位解决偏差 开篇 大家都知 ...

  5. GPS定位 测试

    public class MainActivity extends Activity { private final String TAG = "BX"; private Loca ...

  6. [置顶] xamarin android使用gps定位获取经纬度

    看了文章你会得出以下几个结论 1.android定位主要有四种方式GPS,Network(wifi定位.基站定位),AGPS定位 2.绝大部分android国产手机使用network进行定位是没有作用 ...

  7. ionic基于GPS定位并通过百度地图获取定位详细信息

    相信所有的前端攻城狮都会碰到移动端App.里面获取用户定位信息. 那么问题来了,怎么获取用户的定位信息(经纬度)呢. 当然方法有很多,通过百度地图API 以及 高德地图 API都是可以的.但是两个获取 ...

  8. Android GPS定位测试(附效果图)

    今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ...

  9. Android GPS定位测试(附效果图)

    今天因为工作需要,把以前编写的一个GPS测试程序拿出来重新修改了一下.这个程序说起来有些历史了,是我11年编写的,那时候学了Android开发没多久,算是一个实验性的作品.现在工作需要,重新拿出来修整 ...

随机推荐

  1. docker安装消息队列(rabbitmq)及数据库(mongo、mysql)

    解决ipv6 访问问题 nohup socat TCP6-LISTEN:36001,reuseaddr,fork TCP4:127.0.0.1:36000 > /root/ip6to4.log ...

  2. 一个基于角色的访问控制(RBAC)的简单示例

    关于"基于角色的访问控制"是什么,本文不再赘述,如果不明白,请自行查阅资料了解. 本文参考用户·角色·权限·表的设计的思想设计. 本文用到的技术有Spring Boot.Sprin ...

  3. WPF之BackgroundWorker

    BackgroundWorker类允许您在单独的线程上执行某个可能导致用户界面(UI)停止响应的耗时操作,下面来介绍一下这个线程类BackgroundWorker,大家可以结合这位大佬的这篇文章,说的 ...

  4. Go语言核心36讲42-----io包中接口的好处与优势

    我们在前几篇文章中,主要讨论了strings.Builder.strings.Reader和bytes.Buffer这三个数据类型. 知识回顾 还记得吗?当时我还问过你"它们都实现了哪些接口 ...

  5. C++初阶(封装+多态--整理的自认为很详细)

    继承 概念:继承机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类.继承呈现了面向对象程序设计的层次结构,体现了由简单 ...

  6. 学习ASP.NET Core Blazor编程系列十——路由(下)

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  7. 【DL论文精读笔记】Object Detection in 20 Y ears: A Survey目标检测综述

    目标检测20年综述(2019) 摘要 Abstract 该综述涵盖了400篇目标检测文章,时间跨度将近四分之一世纪.包括目标检测历史上的里程碑检测器.数据集.衡量指标.基本搭建模块.加速技术,最近的s ...

  8. LayuI 动态下拉框和动态设置选中

    动态下拉框 //下拉框异步加载 function asyncSelect(thisId, grade, selectNodeName) { $("#" + selectNodeNa ...

  9. Vue 双向绑定数据已经更新,但是视图更新:

    使用ElementUI做动态增减表单项的时候,发现数据刷新后视图未更新 Vue包装了数个数组操作函数,使用这些方法操作的数组去,其数据变动时会被vue监测: push() pop() shift() ...

  10. 写一个linux平台的桌面宠物

    效果图 前言 我一直在用python 写一下有趣的东西,让编程不那么无聊,之前一直有写一个桌面宠物的想法,无奈这些都是依赖资源文件,没有图片资源没办法写里面的逻辑,直到我看见了 shimiji手机桌面 ...