在 Unity 中使用 GPS 和 Google Maps API

感谢你们的辛勤工作。
我是来自横滨办公室的松山,现在是系统开发部的员工。
距离我上次发帖已经有一段时间了。
我暂时放下增强现实(AR)的话题,来聊聊GPS功能和谷歌地图。
我们来尝试做个类似这样的东西。
做什么
- 使用 GPS 获取您的当前位置
- 显示以该位置为中心的地图图像
- 如果您正在移动,则定期更新地图
- 在地图上的当前位置显示图标
获取位置信息
首先,可以使用 LocationService 类获取位置信息。
参考 LocationService
首先,开始更新您的位置。
同时,启用指南针功能。
参考指南针
输入.location.Start(); 输入.compass.enabled = true;
由于在程序启动之前无法获取信息,因此将等待以下判决。
// 如果用户未启用 GPS,则不允许使用 GPS;否则,跳出循环;// 等待直到服务状态为“正在运行”;当输入位置状态不等于 LocationServiceStatus.Running 时,返回 null;
如果不允许使用 GPS,那就没办法了,但以防万一。
另外,请注意,如果您未在 ProjectSettings 中设置位置使用说明,
则无法在实际设备上获取位置信息!

可以使用 LocationService 的 lastData 查看位置信息(纬度和经度)。
LocationInfo curr = Input.location.lastData;
获取到当前位置(纬度和经度)后,即可根据这些坐标获取地图图像。
地图显示
要使用谷歌地图,您必须先注册谷歌地图平台。(无需解释。)
谷歌地图平台官方网站
如果您想显示简单的地图图像,可以使用 Google 静态地图 API,该 API
将检索以您当前位置为中心的图像,该位置是通过 GPS 获取的。
① 在URL中指定参数
// 基本 URL 字符串 url = @"https://maps.googleapis.com/maps/api/staticmap?"; // 中心坐标 url += "center=" + curr.latitude + "," + curr.longitude; // 缩放比例 url += "&zoom=" + 18; // 默认值为 0,请将其设置为合适的大小。 // 图片大小(最大 640x640) url += "&size=" + 640 + "x" + 640; // API 密钥(由 Google Maps Platform 颁发的密钥) url += "&key=" + GoogleApiKey;
② 使用 UnityWebRequest 下载地图图像
url = UnityWebRequest.UnEscapeURL(url); UnityWebRequest req = UnityWebRequestTexture.GetTexture(url); yield return req.SendWebRequest();
③ 将下载的图像显示为精灵图
// 创建纹理。Texture2D tex = new Texture2D(MapSpriteSize, MapSpriteSize); tex.LoadImage(data); // 动态创建精灵(实例)。mapImage.sprite = Sprite.Create(tex, new Rect(0, 0, tex.width, tex.height), Vector2.zero);
然后,
我们用协程运行这个过程,定期更新地图。
无需一直更新地图,因此只有当坐标相对于先前坐标移动了一定距离时,我们才会更新地图。
距离的计算方式如下:
///<summary> /// 纬度(经度)1 度的距离(米)///</summary> private const float Lat2Meter = 111319.491f; private float getDistanceFromLocation(LocationInfo curr, LocationInfo prev) { Vector3 cv = new Vector3((float)curr.longitude, 0, (float)curr.latitude); Vector3 pv = new Vector3((float)prev.longitude, 0, (float)prev.latitude); return Vector3.Distance(cv, pv) * Lat2Meter; }
将光标置于当前位置
将光标放在地图上,旋转光标使其朝向你所面对的方向。
this.transform.localEulerAngles = new Vector3(0, 0, 360 - Input.compass.trueHeading);
就这样。
成品长这样。

概括
这件事最终变得比较简单,我就先总结一下吧。以下
是我的一些想法:
・谷歌地图API的功能非常丰富,所以尝试使用它应该会很有意思。
・GPS误差相当大。
・如果误差只有这么多,代码可以写得非常简单。
既然我们已经有了增强现实和地图(GPS),下次我们不妨尝试将它们结合起来,创造一些东西。
今天就到这里。
我会把它上传到 GitHub。Unity
示例
最后
我开设了我所属的系统开发服务网站“SEKARAKU Lab”。
Beyond是从服务器设计搭建到运营的一站式服务,所以如果您在服务器端开发方面遇到任何问题,请随时联系我们。
SEKARAKU 实验室: [https://sekarakulab.beyondjapan.com/](https://sekarakulab.beyondjapan.com/)
1