下面展示 GPS控制器脚本
。
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using System;
//using Vuforia;
using ThreeSpaceJoin;
namespace MR_LBS.Client.Unity3D
{
public struct Location
{
double latitude;
public double Latitude
{
get
{
return latitude;
}
}
double longitude;
public double Longitude
{
get
{
return longitude;
}
}
double altitude;
public double Altitude
{
get
{
return altitude;
}
}
public Location(double latitude, double longitude)
{
this.latitude = latitude;
this.longitude = longitude;
this.altitude = 0;
}
public Location(double latitude, double longitude, double altitude)
{
this.latitude = latitude;
this.longitude = longitude;
this.altitude = altitude;
}
public static Location zero
{
get
{
return new Location(0, 0, 0);
}
}
public override bool Equals(object obj)
{
//判断与之比较的类型是否为null。这样不会造成递归的情况
if (obj == null)
return false;
if (GetType() != obj.GetType())
return false;
Location loc = (Location)obj;
return this.latitude == loc.latitude && this.longitude == loc.longitude && this.altitude == loc.altitude;
}
public override int GetHashCode()
{
return this.GetHashCode();
}
public static bool operator ==(Location lhs, Location rhs)
{
return System.Object.Equals(lhs, rhs);
}
public static bool operator !=(Location lhs, Location rhs)
{
return !System.Object.Equals(lhs, rhs);
}
}
public class GPSController : MonoBehaviour
{
// longitude,latitude,altitude format.
[HideInInspector]
public Location myPosBLH;
// [HideInInspector]
// public List<Vector3> targetPosBLH = new List<Vector3>();
public static GPSController Instance;
double radian;
float truetrueHeading, totalTrueHeading;
void Awake()
{
Instance = this;
}
void Start()
{
InvokeRepeating("GetGPSPosition", 0, 3f);
}
//TODO:reversion +BaiduMapAPI
/// <summary>
/// Get current GPS position.
/// </summary>
public Location GetGPSPosition()
{
GameObject tip = MainView.instance.entryInfo;
if (BaiduMapAPI.instance != null && BaiduMapAPI.instance.myLatitude != "" && BaiduMapAPI.instance.myLongitude != "")
{
double longitude = double.Parse(BaiduMapAPI.instance.myLongitude);
double latitude = double.Parse(BaiduMapAPI.instance.myLatitude);
myPosBLH = new Location(latitude, longitude, 0);
if (tip.activeInHierarchy)
tip.SetActive(false);
return new Location(latitude, longitude, 0);
}
else
{
tip.SetActive(true);
return Location.zero;
}
//temp
return new Location(32.11f, 118.32f, 0);
}
}
}