最近在做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 secondPoint;//Unity中右下点 public SaiEarth firstSai;//地图中对应的左上经纬度点
public SaiEarth secondSai;//地图中对应的右下经纬度点 private float z_offset,x_offset,z_w_offset,x_w_offset; private RaycastHit rayHit; // Use this for initialization
void Start () {
InitBasicNum ();//初始化参数
} // Update is called once per frame
void Update () {
if (Input.GetMouseButton () && Physics.Raycast (Camera.main.ScreenPointToRay (Input.mousePosition), 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));
secondSai = new SaiEarth (new Vector3(116f,23f,44.39f),new Vector3(39f,54f,44.27f)); z_offset = Mathf.Abs ((firstSai.latitude.x+firstSai.latitude.y/+firstSai.latitude.z/) - (secondSai.latitude.x+secondSai.latitude.y/+secondSai.latitude.z/));//地图中的维度差
x_offset = Mathf.Abs ((firstSai.longitude.x+firstSai.longitude.y/+firstSai.longitude.z/)-(secondSai.longitude.x+secondSai.longitude.y/+secondSai.longitude.z/));//地图中的经度差 z_w_offset = Mathf.Abs (firstPoint.localPosition.z - secondPoint.localPosition.z);//unity中的维度差
x_w_offset = Mathf.Abs (firstPoint.localPosition.x - secondPoint.localPosition.x);//unity中的经度差 } Vector3 getWorldPoint(SaiEarth se)//由经纬度得到位置点
{ float tempX = (float)(se.longitude.x + se.longitude.y / + se.longitude.z / - (secondSai.longitude.x + secondSai.longitude.y / + secondSai.longitude.z / ));
float tempZ = (float)(se.latitude.x + se.latitude.y / + se.latitude.z / - (secondSai.latitude.x + secondSai.latitude.y / + secondSai.latitude.z / )); 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 new Vector3((float)_tempX,0f,(float)_tempZ); } SaiEarth getLatLon(Vector3 curPoint)//由位置点得到经纬度
{
SaiEarth tempEarth = new SaiEarth(); 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; float resultX = _x_offset + (secondSai.longitude.x + secondSai.longitude.y/ + secondSai.longitude.z/);
float resultZ = _z_offset + (secondSai.latitude.x + secondSai.latitude.y/ + secondSai.latitude.z/); tempEarth.longitude = new Vector3 ((int)resultX, (int)((resultX - (int)resultX)*),((resultX - (int)resultX)* - (int)((resultX - (int)resultX)*))*);
tempEarth.latitude = new Vector3 ((int)resultZ, (int)((resultZ - (int)resultZ)*),((resultZ - (int)resultZ)* - (int)((resultZ - (int)resultZ)*))*); return tempEarth; } }

上面有一个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;
}
}

来源:http://blog.csdn.net/saide6000/article/details/26992945

Unity3d Gis 坐标转换的更多相关文章

  1. GDAL坐标转换

    一.引言 最近研究了一下GIS.测绘学的坐标转换的问题,感觉大部分资料专业性太强,上来就是一通专业性论述:但感觉对于相关从业者来说,其实不必了解那么多背景知识的:就通过GDAL这个工具,来简单总结下坐 ...

  2. 从三十而立的迷茫,到30K

    很标题党的标题,但是希望分享一下自己的经历,一份有点儿不寻常的经历. 12年创业,到17年末,举步维艰,没有项目,公司只剩下两个人,负债,现实给我这个每见过什么市面,却自命不凡的人狠狠的一个耳光.加上 ...

  3. GIS空间参考及坐标转换

    空间参考(Spatial Reference)是 GIS 数据的骨骼框架,能够将我们的数据定位到相应的位置,为地图中的每一点提供准确的坐标. 在同一个地图上显示的地图数据的空间参考必须是一致的,如果两 ...

  4. gis空间分析案例_7参数单坐标转换

    gis空间分析案例_7参数单坐标转换 商务科技合作:向日葵,135-4855__4328,xiexiaokui#qq.com 功能: 对输入的单个坐标,利用7参数,一步进行坐标变换,使用极为直观,极大 ...

  5. Android GIS开发系列-- 入门季(7) 利用GeometryEngine坐标转换、计算距离与面积等

    GeometryEngine是Arcgis的重要工具类,利用此工具类,可以计算地图上的距离.面积,将点.线.面转化为Json数据,将Json转化为点线面,坐标转换作用非常强大. 一.坐标转化 将用到方 ...

  6. 分享:Unity3D模型跟随鼠标移动功能的小脚本 (屏幕坐标和三维空间坐标转换)

    using UnityEngine; using System.Collections; public class ModelsPosChange : MonoBehaviour { RaycastH ...

  7. HTML5 网络拓扑图整合 OpenLayers 实现 GIS 地图应用

    在前面<百度地图.ECharts整合HT for Web网络拓扑图应用>我们有介绍百度地图和 HT for Web 的整合,我们今天来谈谈 OpenLayers 和 HT for Web  ...

  8. 去百度API的百度地图准确叠加和坐标转换的解决方案研究

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 目前项目上如果要使用百度地图,得加载百度的开发包,然后通过百 ...

  9. 天津政府应急系统之GIS一张图(arcgis api for flex)讲解(二)鹰眼模块

    讲解GIS功能模块实现之前,先大概说一下flexviewer的核心配置文件config.xml,系统额GIS功能widget菜单布局.系统的样式.地图资源等等都是在这里配置的,这里对flexviewe ...

随机推荐

  1. 基础知识之 - C# Using的用法

    C#里面Using有两种用法: 1.作为指令. using+命名空间,导入其他命名空间中定义的类型,这样可以在程序中直接用命名空间中的类型,不必指定命名空间: 命名空间是.NET程序在逻辑上的组织结构 ...

  2. Javaweb三大组件之一 servlet

    1.servlet基本使用 注意:单例:init只会执行一次    线程不安全 1.1 创建方式 (1)实现servlet接口[不使用] package cn.getword.servlet; imp ...

  3. asp.net之cookie

    1.创建cookie HttpCookie userCookie = new HttpCookie("userInfo"); userCookie["name" ...

  4. 弹性布局学习-详解flex-wrap(五)

    目录 弹性布局学习-介绍(一)  弹性布局学习-详解 flex-direction[决定主轴的方向](二) 弹性布局学习-详解 justify-content(三) 弹性布局学习-详解 align-i ...

  5. Mac 10.11.4 安装mysql-5.7.13 默认密码问题

    今天下载了一个最新版的mysql dmg安装包来安装mysql,安装的整个过程竟然都没有提示输入root用户默认密码,我也没太在意,然后连接数据库时竟然提示输入密码,当时就一脸懵逼了.尝试各种密码,为 ...

  6. Oracle中scott用户下基本表练习SQL语句

    --选择部门中30的雇员SELECT * from emp where DEPTNO=30;--列出所有办事员的姓名.部门.编号--采用内连接方式,也就是等值链接,也是最常用的链接SELECT ena ...

  7. css滤镜模糊效果filter和backdrop-filter

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. 运用Edraw为WPF应用程序嵌入Office文档的方法总结

    具体描述了运用Edraw Office Viewer Component为WPF应用长须嵌入MS Word,Excel以及Power Point的方法. 打开Visual Studio,并创建一个新的 ...

  9. 22_AOP_切面——静态切面

    [Spring AOP 如何定位连接点] 1.增强提供了连接点的方位信息:如织入到方法前面.后面等. 2.切点描述的是织入到哪些类的哪些方法上. [切点] Spring通过org.springfram ...

  10. Android学习——ViewPager的使用(二)

    这一节介绍使用FragmentPagerAdapter适配器,来加载Fragment对象. 数据源 加载Fragment对象时,数据源自然来自Fragment,与View类似,依旧使用List来存放数 ...