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