Unity3dGis坐标转换
最近在做unity3d与Gis结合的项⽬,最基本的就是坐标的转换问题,⽐如把经纬度为(166.23.9.27 , 39.55.15.74) 转换到unity⾥
⾯成相应的位置点,废话不多说 上代码:
using UnityEngine;
式微诗经using System.Collections;
public class SaiGetLatLog : MonoBehaviour {善良作文
public Transform firstPoint; //Unity中左上点
public Transform condPoint;//Unity中右下点
怕寂寞
public SaiEarth firstSai;//地图中对应的左上经纬度点
public SaiEarth condSai;//地图中对应的右下经纬度点
private float z_offt,x_offt,z_w_offt,x_w_offt;
private RaycastHit rayHit;
// U this for initialization
void Start () {
InitBasicNum ();//初始化参数
}
// Update is called once per frame
通化旅游void Update () {
if (Input.GetMouButton (0) && Physics.Raycast (Camera.main.ScreenPointToRay (uPosition), out rayHit, Mathf.Infinity)) {
print ( getWorldPoint(firstSai).x+","+ getWorldPoint(firstSai).z);
}数独九宫格
}
void InitBasicNum()
{
firstSai = new SaiEarth (new Vector3 (116f, 23f, 9.27f), new Vector3 (39f, 55f, 15.74f));
condSai = new SaiEarth (new Vector3(116f,23f,44.39f),new Vector3(39f,54f,44.27f));
z_offt = Mathf.Abs ((firstSai.latitude.x+firstSai.latitude.y/60+firstSai.latitude.z/3600) - (condSai.latitude.x+condSai.latitude.y/60+condSai.latitude.z/3600) x_offt = Mathf.Abs ((firstSai.longitude.x+firstSai.longitude.y/60+firstSai.longitude.z/3600)-(condSai.longitude.x+condSai.longitude.y/60+condSai.longitud
z_w_offt = Mathf.Abs (firstPoint.localPosition.z - condPoint.localPosition.z);//unity中的维度差
x_w_offt = Mathf.Abs (firstPoint.localPosition.x - condPoint.localPosition.x);//unity中的经度差
}
Vector3 getWorldPoint(SaiEarth )//由经纬度得到位置点
{
float tempX = (float)(.longitude.x + .longitude.y / 60 + .longitude.z / 3600 - (condSai.longitude.x + condSai.longitude.y / 60 + condSai.longitude.z / 3 float tempZ = (float)(.latitude.x + .latitude.y / 60 + .latitude.z / 3600 - (condSai.latitude.x + condSai.latitude.y / 60 + condSai.latitude.z / 3600));
float _tempX = (float)(tempX * x_w_offt / x_offt + condPoint.localPosition.x);
float _tempZ = (float)(tempZ * z_w_offt / z_offt + condPoint.localPosition.z);
return new Vector3((float)_tempX,0f,(float)_tempZ);
}
SaiEarth getLatLon(Vector3 curPoint)//由位置点得到经纬度
{
SaiEarth tempEarth = new SaiEarth();
float _z_offt = Mathf.Abs (curPoint.z - condPoint.localPosition.z) * z_offt / z_w_offt;
float _x_offt = Mathf.Abs (curPoint.x - condPoint.localPosition.x) * x_offt / x_w_offt;
float resultX = _x_offt + (condSai.longitude.x + condSai.longitude.y/60 + condSai.longitude.z/3600);
我们的世界
float resultZ = _z_offt + (condSai.latitude.x + condSai.latitude.y/60 + condSai.latitude.z/3600);
tempEarth.longitude = new Vector3 ((int)resultX, (int)((resultX - (int)resultX)*60),((resultX - (int)resultX)*60 - (int)((resultX - (int)resultX)*60))*60); tempEarth.latitude = new Vector3 ((int)resultZ, (int)((resultZ - (int)resultZ)*60),((resultZ - (int)resultZ)*60 - (int)((resultZ - (int)resultZ)*60))*60);
壁纸2kreturn tempEarth;小米6屏幕尺寸
}
}
上⾯有⼀个SaiEarth的类,其实写的很简单:
using UnityEngine;
using System.Collections;
public class SaiEarth {
public Vector3 longitude;
public Vector3 latitude;
public SaiEarth()
{
}
public SaiEarth(Vector3 longitude,Vector3 latitude)
{
this.latitude = latitude;
this.longitude = longitude;
}
public string toString()
{
return "Lat:"+this.latitude + ",Long:" + this.longitude;
}
}
OK 完⼯。
做u3d有⼀段时间了 纯属个⼈兴趣,现在还没毕业,以后还会遇到很多问题 ,希望⾃⼰有毅⼒能坚持,更新博⽂以⾃省!
学海⽆涯 不进则退