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

其实unity也有自带的api获取GPS经纬度的信息的,地址是:点击这里

下面写一个demo,把获取到的GPS信息的经纬度解析成具体地址,具体思路是通过unity 自带api获取经纬度,然后通过高德的webapi把经纬度转换成具体的地址,废话少说,看代码:


using System;
using UnityEngine;
using System.Collections;
using System.IO;
using System.Net;
using System.Text;
using LitJson;
using UnityEngine.Networking;
using UnityEngine.UI;
 
public class GPSManager : MonoBehaviour
{
 
    public Text txt;
    public Text AddressText;
    private string longitude;//经度
    private string latitude;//纬度
 
  
 
    void Start()
    {
        StartCoroutine(StartGPS());
    }
    IEnumerator StartGPS()
    {
        txt.text = "开始获取GPS信息";
 
        // 检查位置服务是否可用  
        if (!Input.location.isEnabledByUser)
        {
            txt.text = "位置服务不可用";
            yield break;
        }
 
        // 查询位置之前先开启位置服务  
        txt.text = "启动位置服务";
        Input.location.Start();
 
        // 等待服务初始化  
        int maxWait = 20;
        while (Input.location.status == LocationServiceStatus.Initializing && maxWait > 0)
        {
            txt.text = Input.location.status.ToString() + ">>>" + maxWait.ToString();
            yield return new WaitForSeconds(1);
            maxWait--;
        }
 
        // 服务初始化超时  
        if (maxWait < 1)
        {
            txt.text = "服务初始化超时";
            yield break;
        }
 
        // 连接失败  
        if (Input.location.status == LocationServiceStatus.Failed)
        {
            txt.text = "无法确定设备位置";
            yield break;
        }
        else
        {
            txt.text = "Location: rn" +
                       "纬度:" + Input.location.lastData.latitude + "rn" +
                       "经度:" + Input.location.lastData.longitude + "rn" +
                       "海拔:" + Input.location.lastData.altitude + "rn" +
                       "水平精度:" + Input.location.lastData.horizontalAccuracy + "rn" +
                       "垂直精度:" + Input.location.lastData.verticalAccuracy + "rn" +
                       "时间戳:" + 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=6bda73179a87a92394489045b32a0f46&location="+longitude+","+latitude));
        }
 
        // 停止服务,如果没必要继续更新位置,(为了省电)  
        Input.location.Stop();
    }
 
     string key = "6bda73179a87a92394489045b32a0f46";       //去高德地图开发者申请
 
    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);
              AddressText.text=jd["regeocode"]["formatted_address"].ToString();
                // Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text);
            }
        }
    }
}

关于key,可以去高德开放平台注册成为开发者,创建应用即可

https://lbs.amap.com/

逆地理编码

看看我打包到手机的效果图:

字有点小,将就看吧

 

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
感谢您的提问。关于使用Unity将实际经纬度转换世界坐标,可以通过以下步骤实现: 1.首先获取经纬度数据,比如使用GPS获取当前设备所在位置的经纬度。 2.将经纬度数据转换Unity坐标系下的位置。Unity中使用的是左手坐标系,而经纬度表示的是右手坐标系,因此需要将经纬度数据进行一定的变换。 3.根据经纬度数据获取地球表面上的点的位置。这可以使用球面坐标系和地理信息系统(GIS)等方法进行计算。 4.将地球表面上的点的位置转换Unity坐标系下的位置。这可以使用Unity中的矩阵转换等方法进行计算。 下面是使用C#代码实现将经纬度转换Unity坐标系下的位置的示例: ```csharp using UnityEngine; using System.Collections; public class LocationManager : MonoBehaviour { // 经度范围 private const float MinLongitude = -180f; private const float MaxLongitude = 180f; // 纬度范围 private const float MinLatitude = -90f; private const float MaxLatitude = 90f; // 地球半径 private const float EarthRadius = 6371000f; // 将经纬度转换Unity坐标系下的位置 public static Vector3 GetPosition(float longitude, float latitude) { if (longitude < MinLongitude || longitude > MaxLongitude || latitude < MinLatitude || latitude > MaxLatitude) { Debug.LogError("经纬度不合法"); return Vector3.zero; } float x = EarthRadius * Mathf.Cos(latitude * Mathf.PI / 180f) * Mathf.Cos(longitude * Mathf.PI / 180f); float y = EarthRadius * Mathf.Cos(latitude * Mathf.PI / 180f) * Mathf.Sin(longitude * Mathf.PI / 180f); float z = EarthRadius * Mathf.Sin(latitude * Mathf.PI / 180f); return new Vector3(x, y, z); } } ``` 希望以上信息能够对您有所帮助。如果您有任何其他问题,欢迎继续向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值