unity获取设备经纬度(unity使用GPS)详解

【Unity】坐标转换经纬度方法(应用篇) 解决地图中经纬度坐标转换与unity坐标互转的问题。使用线性变换的方法,理论上可以解决小范围内所以坐标转换的问题。之前有写过),在实际使用中,由于步骤比较繁琐,基于之前的方法,详细说明使用方法。 阅读详情

申明:本文转载:http://blog.youkuaiyun.com/chenggong2dm/article/details/24488469 的内容,本声明以示尊重作者!

Unity使用GPS 的API


在unity的官方文档中,与设备定位(GPS经纬度、水平精度等等)相关的API,目前我只找到两个:LocationService 和 LocationInfo 。

先来个简单的理解:

LocationService 负责启动和关闭定位服务。

LocationInfo  在服务启动后,获取定位数据信息。


LocationService

官方说明链接:

http://docs.unity3d.com/Documentation/ScriptReference/LocationService.Start.html

LocationService 中有三个属性,和两个方法:

(1)isEnabledByUser   -- 用户设置里的定位服务是否启用。(实测发现,都为true,似乎不大起作用)

(2)lastData   -- 最近一次测量的地理位置(LocationInfo lastData; 也就是要和 LocationInfo 关联了)

(3)status   -- 定位服务的状态。

定位服务的状态包括:

Stopped
Location service is stopped. 定位服务已经停止
Initializing
Location service is initializing, some time later it will switch to.  定位服务正在初始化,在一段时间后,状态会切换回来。
Running
Location service is running and locations could be queried.  位置服务正在运行,位置可以获取。
Failed
Location service failed (user denied access to location service).  位置服务失败(用户拒绝访问位置服务)。


(4)Start ( )   -- 启动定位服务,更新定位数据。可以获取最近更新的位置坐标。

     数据接收,是通过 Input.location.lastData 来实现的。服务不能马上获得定位数据。代码必须检查Input.location.status以获取当前的定位服务状态。

看一下函数定义:

void Start(float desiredAccuracyInMeters = 10f, float updateDistanceInMeters = 10f); 

参数详解:

desiredAccuracyInMeters  服务所需的精度,以米为单位。如果使用较高的值,比如500,那么通常不需要打开GPS芯片(比如可以利用信号基站进行三角定位),从而节省电池电量。像5-10这样的值,可以被用来获得最佳的精度。默认值是10米。

updateDistanceInMeters  最小距离(以米为单位)的设备必须横向移动前Input.location属性被更新。较高的值,如500意味着更少的开销。默认值是10米。

(5)Stop ( )  -- 停止定位服务的定位更新。这对节省电池的电量非常有用。void


LocationInfo

属性如下:

(1) altitude -- 海拔高度 

(2) horizontalAccuracy -- 水平精度 

(3) latitude -- 纬度 

(4) longitude -- 经度 

(5) timestamp -- 最近一次定位的时间戳,从1970开始 

(6) verticalAccuracy -- 垂直精度 


这些属性,除了timestamp为double外, 其余全为 float 型。



下面是Unity使用GPS 的例子

1,新建一个项目。

2,编写脚本 GetGPS.cs ,挂到主摄像机上。

[csharp]  view plain copy
  1. using UnityEngine;  
  2. using System.Collections;  
  3.   
  4. public class GetGPS : MonoBehaviour {  
  5.   
  6.     public string gps_info = "";  
  7.     public int flash_num = 1;  
  8.   
  9.     // Use this for initialization  
  10.     void Start () {  
  11.       
  12.     }  
  13.       
  14.     void OnGUI () {  
  15.         GUI.skin.label.fontSize = 28;  
  16.         GUI.Label(new Rect(20,20,600,48),this.gps_info);   
  17.         GUI.Label(new Rect(20,50,600,48),this.flash_num.ToString());   
  18.           
  19.         GUI.skin.button.fontSize = 50;  
  20.         if (GUI.Button(new Rect(Screen.width/2-110,200,220,85),"GPS定位"))  
  21.         {  
  22.             // 这里需要启动一个协同程序  
  23.             StartCoroutine(StartGPS());  
  24.         }  
  25.         if (GUI.Button(new Rect(Screen.width/2-110,500,220,85),"刷新GPS"))  
  26.         {  
  27.             this.gps_info = "N:" + Input.location.lastData.latitude + " E:"+Input.location.lastData.longitude;  
  28.             this.gps_info = this.gps_info + " Time:" + Input.location.lastData.timestamp;  
  29.             this.flash_num += 1;   
  30.         }  
  31.     }  
  32.   
  33.     // Input.location = LocationService  
  34.     // LocationService.lastData = LocationInfo   
  35.   
  36.     void StopGPS () {  
  37.         Input.location.Stop();  
  38.     }  
  39.   
  40.     IEnumerator StartGPS () {  
  41.         // Input.location 用于访问设备的位置属性(手持设备), 静态的LocationService位置  
  42.         // LocationService.isEnabledByUser 用户设置里的定位服务是否启用  
  43.         if (!Input.location.isEnabledByUser) {  
  44.             this.gps_info = "isEnabledByUser value is:"+Input.location.isEnabledByUser.ToString()+" Please turn on the GPS";   
  45.             return false;  
  46.         }  
  47.   
  48.         // LocationService.Start() 启动位置服务的更新,最后一个位置坐标会被使用  
  49.         Input.location.Start(10.0f, 10.0f);  
  50.   
  51.         int maxWait = 20;  
  52.         while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0) {  
  53.             // 暂停协同程序的执行(1秒)  
  54.             yield return new WaitForSeconds(1);  
  55.             maxWait--;  
  56.         }  
  57.   
  58.         if (maxWait < 1) {  
  59.             this.gps_info = "Init GPS service time out";  
  60.             return false;  
  61.         }  
  62.   
  63.         if (Input.location.status == LocationServiceStatus.Failed) {  
  64.             this.gps_info = "Unable to determine device location";  
  65.             return false;  
  66.         }   
  67.         else {  
  68.             this.gps_info = "N:" + Input.location.lastData.latitude + " E:"+Input.location.lastData.longitude;  
  69.             this.gps_info = this.gps_info + " Time:" + Input.location.lastData.timestamp;  
  70.             yield return new WaitForSeconds(100);  
  71.         }  
  72.     }  
  73. }  

3,导出到手机,运行,即可看到效果。
unity制作app(3)--gps定位 第三步:此时依旧无法申请,手机权限管理中找不到unity应用,同时发现unity是可以调用手机模拟器的,这下任务简单了太多太多。第二步:在新建的Assets\Plugins\Android目录下 ,增加对应的权限!4.此时无论电脑,还是手机,都无法获得定位权限,在手机的应用权限中,甚至找不到应用!第四步:在手机安装的时候确实有权限提示,但程序执行后感觉动态链接是失效的。代码需要稍微修改一下,先把脚本绑到一个button上试一试!第五步:根据AI的回答,继续进行尝试吧,浪费时间了。但是27行的会出问题! 阅读详情

相关推荐

Unity 获得当前经纬度 用于求 设备间的距离

今天项目 遇到一个求 设备间距离的需求。考虑经纬度来实现,拷贝别人代码,加上距离函数做了个demo,主要是获得经纬度。亲测 出包Ios 与android 皆可用(Android 注意要将设置里面的位置 打开),即可实现获得当前经纬度,至于距离方面地理数学知识就可以解决了,下面也实现了,不过没测距离是否准确,先完成任务先。 using UnityEngine; using System.

nynkl的博客 3076

Unity获取经纬度类封装

函数有两个参数,准确度和更新距离,准确度越小,位置越准;引擎检测到更新距离达到了给定值后才会进行重新定位更新定位信息。否则调用返回的是缓存值。Unity提供了Input.location,方便我们获取经纬度。这里对其封装了一下,方便直接使用。直接访问CurrentLocation。

weixin_43149049的博客 1491

Unity获取经纬度(GPS)

using UnityEngine; using System.Collections; using UnityEngine.UI; using System.Text; using System; public class UserInfo : MonoBehaviour {     public Text GPS_infoText;     string sGPS_inf

Rookie0518的博客 2745

【Unity】中如何通过GPS获取设备经纬度(测试脚本)

在游戏开发中需要使用gps获取经纬度坐标定位玩家的当前位置,那么在开发过程中这个功能容不容易实现呢?下面就给大家介绍下Unity中获取设备经纬度的方法,一起来看看吧。      Unity使用GPS 的API      在unity的官方文档中,与设备定位(GPS经纬度、水平精度等等)相关的API,目前我只找到两个:LocationService 和 LocationInf

天生爱赞美的博客 4053

Unity中实现世界坐标到GPS经纬度的转换解决方案

在Unity3D中,将世界坐标转换为GPS经纬度是一个常见的需求,特别是在开发基于地理位置的应用程序时。请注意,这个解决方案假设地球是一个完美的球体,并且在计算GPS经纬度和世界坐标之间的距离时没有考虑地球的形状和曲率。在这个示例中,CalculateGPSFromDistance是一个自定义的函数,根据给定的参考点GPS经纬度和距离计算目标点的GPS经纬度。首先,计算参考点的Unity世界坐标与GPS经纬度之间的距离。最后,将参考点的GPS经纬度与计算得到的距离结合起来,以获得目标点的GPS经纬度坐标。

MddAlgorithm的博客 1609

Codesys电子凸轮功能块MC_CamIn的masteroffset和slaveoffset参数的使用

问题1:在Codesys使用作轴电子凸轮时,MC_CamTableSelect的参数设置为MasterAbsolute=1,SlaveAbsolute=1,此设置为绝得模式, 此时主从轴当前位置都不为零时,此时Masteroffset=0、slaveOffset=0,凸轮启时出现突变,实轴无法启动。问题分析:在觉得模式下,主轴位置和从轴为是对应凸轮表的相位的,Masteroffset=0、slaveOffset=0,启动点时在主轴位置=0,从轴位置=0的点启动,此时主轴当前位置不为零则主从轴位置发生突变,

weixin_43587371的博客 1801

Unity获取GPS经纬度并解析成具体位置

其实unity也有自带的api获取GPS经纬度的信息的,地址是:点击这里 下面写一个demo,把获取到的GPS信息的经纬度解析成具体地址,具体思路是通过unity 自带api获取经纬度,然后通过高德的webapi把经纬度转换成具体的地址,废话少说,看代码: using System; using UnityEngine; using System.Collections; using Sy...

习惯冬天的静谧 2764

【数学模型】灰色关联分析

数学模型-灰色关联分析

suic009的博客 1万+

Unity内部类实现GPS定位

使用Unity提供的内部方法实现GPS定位 代码如下: 方法比较少也比较简单,注释很详细 将脚本拖拽到摄像机上,打包,在Android或iOS真机上测试 using UnityEngine; using System.Collections; public class GPS : MonoBehaviour { private LocationService locationS

lq 5091

Yolov5s/Yolov8s网络结构图

yolov8、yolov5网络结构图

Goodness2020的博客 9925

RK3588上跑通Zipformer语音识别的3个坑与填坑实录(附完整编译命令)

本文详细记录了在RK3588开发板上部署Zipformer语音识别模型时遇到的三个典型问题及其解决方案,包括静态库版本冲突、编译脚本配置错误以及模型转换精度调优。文章提供了完整的编译命令和实战步骤,帮助开发者快速在边缘设备上实现高效的语音识别应用。

l6m7n8的博客 715

unity 定位服务GPS API

Unity使用GPS 的API 在unity的官方文档中,与设备定位(GPS经纬度、水平精度等等)相关的API,目前我只找到两个:LocationService 和 LocationInfo 。 先来个简单的理解: LocationService 负责启动和关闭定位服务。 LocationInfo  在服务启动后,获取定位数据信息。 LocationService

u014261855的博客 2473

【txt文本加密】使用 cryptography 库实现加密和解密

cryptography 库是一个强大的 Python 库,用于实现加密和解密功能。它提供了各种加密算法,包括对称加密、非对称加密、哈希函数等。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2668

【Unity】使用GPS定位经纬度

using UnityEngine; using System.Collections; using UnityEngine.UI; public class GPS : MonoBehaviour { private string N_Latitude; //经度 private string E_Longitude; //纬度 public Button Lo

Zok93 1212

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4376

6、核函数与再生核希尔伯特空间:原理、应用与实践

本文系统介绍了核函数与再生核希尔伯特空间(RKHS)的理论基础、核心性质及其在机器学习和信号处理中的广泛应用。文章从核方法的优势出发,阐述了其在非线性建模、正则化和算法核化方面的独特价值,并深入探讨了正定核、Mercer定理、表示定理等关键理论。通过构建多种标准核与工程专用核,展示了核函数的设计灵活性。结合支持向量回归(SVR)模型与多个MATLAB示例,详细说明了核方法的实际应用流程与操作技巧。最后,总结了核方法的应用领域、未来发展方向及学习实践建议,为读者提供了一套完整的理论与实践指南。

z2a3b4c5d的博客 145

Unity中获取移动设备GPS信息

代码控制打开权限以及获取经纬度: public string gps_info = ""; public int flash_num = 1; public float n; public float e; public IEnumerator StartGPS() { // Input.location 用于访问设备的位置属性(手持设备), 静态...

weixin_30340617的博客 313

【博文汇总】I2C总线学习

将这一周学习I2C总线的文章汇总一下。 基础知识学习 触发器的建立时间和保持时间 如何学习总线技术 TTL电平和CMOS电平 深入理解 关于I2C和SPI总线协议 I2C总线深入浅出 I2C总线信号时序总结 对I2C总线协议的一些理解 对I2C总线的时钟同步和总线仲裁的深入理解 I2C总线学习终结,开始SPI总线的学习 深入理解IIC总线时序

ce123的技术博客 6216

unity3D中GPS坐标转换到3D场景坐标

void RetrieveGPSData() { currentGPSPosition = Input.location.lastData; System.DateTime dateTime = new System.DateTime(1970, 1, 1, 0, 0, 0, 0); dateTime = dateTime.AddSeconds(currentGPSPos...

ethuangfen的博客 2341

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

unity获取安卓和ios设备的GPS定位

转载链接:https://blog.youkuaiyun.com/qq_38721111/article/details/79700384

Liumotor的博客 1690

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

数据可视化python与r语言_这10个Python数据可视化库,通吃任何领域

来自:公众号读芯术| 编辑:真经君码农真经(ID:coder_experience)第 166 次推文图源:百度上一篇:向Excel说再见,神级编辑器统一表格与Python正文大致浏览一下Python库索引,你将会看到几乎每个数据可视化需要的库,从用于眼动研究的GazeParser到用于神经网络训练的实时可视化的pastalog。虽然这些库中有很多库只能完成一些特定任务,但有些库可以应用于任何领域...

weixin_33196828的博客 258

Unity获取GPS

using UnityEngine; using System.Collections; public class GPSManager : MonoBehaviour { public string gps_info = ""; public int flash_num = 1; void OnGUI () { GUI.skin.label.fontSize = 28; GUI.Label(new Rect(20,20,600,48),...

a451319296的博客 830
上一篇: 用Maven创建第一个web项目
下一篇: unity--鼠标画线、画图实现
spring_shower
博客等级 码龄12年 12粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值