获取瓦片地图
将瓦片地图按序号创建
/// <summary>
/// 得到经纬点
/// 用于瓦片网格创建
/// </summary>
/// <param name="unitlongiAngle">单位经度角</param>
/// <param name="halfSubdivisions">一半的细分值</param>
/// <param name="LatValue">纬度段</param>
/// <param name="LonValue">经度段</param>
public Vector3 GetLatLonPinot(double unitlongiAngle, double halfSubdivisions, int LatValue, int LonValue, MapType mapType = MapType.RoadMap)
{
// 列号所对应的经度(以左上角为圆点),但经纬度是以(0,0)为中心点,需要减去180
var lon = unitlongiAngle * LonValue - 180;
var ratio = (halfSubdivisions - LatValue) / halfSubdivisions * 180;
// 纬度
var lat = 180 / Math.PI * (2 * Math.Atan(Math.Exp(ratio * Math.PI / 180d)) - Math.PI / 2d);
if (LatValue == 0 || LatValue == 2 * halfSubdivisions)
{
lat = LatValue == 0 ? 90 : -90;
}
return Get3DPostion(lat, lon);
}
纬度坐标转空间坐标
/// <summary>
/// 经纬度转空间坐标
/// </summary>
/// <param name="lat">纬度</param>
/// <param name="lon">经度</param>
/// <returns></returns>
public Vector3 Get3DPostion(double lat, double lon,double earth)
{
lat *= Mathf.PI / 180D;//角度转度
lon *= Mathf.PI / 180D;//角度转弧度
double x = earth * Math.Cos(lat) * Math.Cos(lon);
double y = earth * Math.Sin(lat);
double z = earth * Math.Cos(lat) * Math.Sin(lon);
return new Vector3((float)x, (float)y, (float)z);
}
空间坐标转经纬度
/// <summary>
///空间坐标转经纬度
/// </summary>
/// <param name="pos">空间坐标</param>
/// <returns></returns>
public Vector3 GetLatLonPoint(Vector3 pos)
{
double lat = Math.Asin(pos.y / ConstValue.EarthRadius) * Mathf.Rad2Deg;
double lon = Math.Acos(pos.x / (ConstValue.EarthRadius * Math.Cos(lat * Mathf.Deg2Rad))) * Mathf.Rad2Deg;
return new Vector3((float)lat, (float)lon, 0);
}