其实unity也有自带的api获取GPS经纬度的信息的,地址是:https://docs.unity3d.com/ScriptReference/LocationService.Start.html
下面写一个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,可以去高德开放平台注册成为开发者,创建应用即可
逆地理编码
看看我打包到手机的效果图:
字有点小,将就看吧,最后我把demo源码上传了,关注公众号,回复关键字“GPS”获取