Unity3d Gis Coordinate transformation

Source: Internet
Author: User

Recently in doing Unity3d and GIS projects, the most basic is the conversion of coordinates, such as the latitude and longitude (166.23.9.27, 39.55.15.74) into unity into the corresponding location points, nonsense not much to say on the code:

usingUnityengine;usingSystem.Collections; Public classSaigetlatlog:monobehaviour { PublicTransform Firstpoint;//top left point in Unity     PublicTransform Secondpoint;//bottom right point in Unity         PublicSaiearth Firstsai;//the corresponding top-left latitude and longitude point in the map     PublicSaiearth Secondsai;//the corresponding lower-right latitude point in the map    Private floatZ_offset,x_offset,z_w_offset,x_w_offset; PrivateRaycasthit Rayhit; //Use this for initialization    voidStart () {initbasicnum ();//Initialize Parameters    }        //Update is called once per frame    voidUpdate () {if(Input.getmousebutton (0) && Physics.raycast (Camera.main.ScreenPointToRay (input.mouseposition), outRayhit, mathf.infinity)) {Print (Getworldpoint (Firstsai). x+","+Getworldpoint (Firstsai). z); }    }    voidInitbasicnum () {Firstsai=NewSaiearth (NewVector3 (116f, 23f,9.27f),NewVector3 (39f, 55f,15.74f)); Secondsai=NewSaiearth (NewVector3 (116f,23f,44.39f),NewVector3 (39f,54f,44.27f)); Z_offset= Mathf.abs ((firstsai.latitude.x+firstsai.latitude.y/ -+firstsai.latitude.z/3600)-(secondsai.latitude.x+secondsai.latitude.y/ -+secondsai.latitude.z/3600));//dimension difference in a mapX_offset = Mathf.abs ((firstsai.longitude.x+firstsai.longitude.y/ -+firstsai.longitude.z/3600)-(secondsai.longitude.x+secondsai.longitude.y/ -+secondsai.longitude.z/3600));//longitude difference in the mapZ_w_offset= Mathf.abs (FIRSTPOINT.LOCALPOSITION.Z-SECONDPOINT.LOCALPOSITION.Z);//dimension difference in UnityX_w_offset = Mathf.abs (firstpoint.localposition.x-secondpoint.localposition.x);//the difference in longitude in unity} Vector3 getworldpoint (Saiearth se)//get location points by latitude and longitude    {        floatTEMPX = (float) (se.longitude.x + se.longitude.y/ -+ se.longitude.z/3600-(secondsai.longitude.x + secondsai.longitude.y/ -+ secondsai.longitude.z/3600)); floatTempz = (float) (se.latitude.x + se.latitude.y/ -+ se.latitude.z/3600-(secondsai.latitude.x + secondsai.latitude.y/ -+ secondsai.latitude.z/3600)); float_TEMPX = (float) (TEMPX * X_w_offset/x_offset +secondpoint.localposition.x); float_tempz = (float) (Tempz * Z_w_offset/z_offset +secondpoint.localposition.z); return NewVector3 ((float) _tempx,0f, (float) _tempz); } Saiearth Getlatlon (Vector3 curpoint)//latitude and longitude obtained by location point{Saiearth Tempearth=NewSaiearth (); float_z_offset = Mathf.abs (curpoint.z-secondpoint.localposition.z) * Z_offset/Z_w_offset; float_x_offset = Mathf.abs (curpoint.x-secondpoint.localposition.x) * X_offset/X_w_offset; floatResultx = _x_offset + (secondsai.longitude.x + secondsai.longitude.y/ -+ secondsai.longitude.z/3600); floatResultz = _z_offset + (secondsai.latitude.x + secondsai.latitude.y/ -+ secondsai.latitude.z/3600); Tempearth.longitude=NewVector3 ((int) Resultx, (int) ((Resultx-(int) resultx) * -), ((Resultx-(int) resultx) * -- (int) ((Resultx-(int) resultx) * -))* -); Tempearth.latitude=NewVector3 ((int) Resultz, (int) ((Resultz-(int) Resultz) * -), ((Resultz-(int) Resultz) * -- (int) ((Resultz-(int) Resultz) * -))* -); returnTempearth; }}

There is a Saiearth class, in fact it is very simple to write:

usingUnityengine;usingSystem.Collections; Public classSaiearth { PublicVector3 longitude;  PublicVector3 latitude;  PublicSaiearth () {} PublicSaiearth (Vector3 Longitude,vector3 latitude) { This. Latitude =latitude;  This. Longitude =longitude; }     Public stringtoString () {return "Lat:"+ This. Latitude +", Long:"+ This. Longitude; }}

Source: http://blog.csdn.net/saide6000/article/details/26992945

Unity3d Gis Coordinate transformation

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.