最近在做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. nyoj 47——过河问题——————【贪心】

    过河问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:5   描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...

  2. springboot整合mongo多数据源

    该实例已测试 POM.XML <!-- Spring Boot mongodb 依赖--> <dependency> <groupId>org.springfram ...

  3. DistinctBy

    如何很好的使用Linq的Distinct方法[全屏看文] Person1: Id=1, Name="Test1" Person2: Id=1, Name="Test1&q ...

  4. node.js async/await 继发执行与并发执行

    async/await 继发执行与并发执行,看如何控制 两个异步函数 foo bar function foo() { return new Promise((resolve, reject) =&g ...

  5. Nginx反向代理与负载均衡[转]

    nginx启动和关闭(centos平台) /usr/local/nginx/sbin/nginx #启动 /usr/local/nginx/sbin/nginx -s reload #平滑启动 vi ...

  6. javascript获取后台传来的json

    Mvc Razor视图引擎中 <script type="text/javascript"> var _temp = @(new MvcHtmlString(this. ...

  7. 微信token验证源码分享(c#版)

    在开发时遇到一个问题: 上线后提交申请微信提示"您的服务器没有正确响应token验证...",我查看日志发现根本就没有接收到来自微信的参数. 后来我又记录了微信请求方式和请求的字符 ...

  8. python爬虫学习(一)

    #简单例子:抓取网页全部内容后,根据正则表达式,获取符合条件的字符串列表from urllib import request#正则表达式import re url = "http://www ...

  9. scss-!default默认变量

    在变量赋值之前, 利用!default为变量指定默认值. 也就是说,如果在此之前变量已经赋值,那就不使用默认值,如果没有赋值,则使用默认值. 代码实例如下: $content: "antzo ...

  10. 【代码笔记】Java深入学习——实现客户端发送文件到服务器的文件传输

    Server.java package com.huaxin.lesson02; import java.io.FileOutputStream; import java.io.InputStream ...