Unity之GPS定位(高德解析)

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图看咯。
小黑的GIF
怎么样,是不是很顶!!!!给👍👍👍👍👍👍👍啊

代码中的Key怎么来的

1、找平台

随便打开一个浏览器并且在搜索栏输入:高德开发者平台
在这里插入图片描述

2、登录或者申请账号

在这里插入图片描述

3、获取KEY

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

  • 进入页面后往下滑
    在这里插入图片描述

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

  • 然后在创建好的应用上边点击增加在这里插入图片描述

  • 如何创建有key的应用呢创建一个相关key

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

结尾

结尾唠叨

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

今日无推荐

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

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

posted @ 2020-08-01 17:18  青衫磊落长歌行  阅读(133)  评论(0)    收藏  举报