cesium米转换经纬度_cesium 常见坐标系及坐标转换(工具篇)

/*

* @Description: 坐标转换工具,下面的坐标转换默认都是基于WGS84 椭球体

*/

class Degrees {

constructor(longitude, latitude, height = 0) {

this.longitude = longitude;

this.latitude = latitude;

this.height = height;

}

}

Cesium.Degrees = Degrees;//不建议这样直接修改Cesium原始对象

class Tramsform {

/**

* @description: 弧度转度

* @param {Number} value

* @return {Number}

*/

toDegrees(value) {

return Cesium.Math.toDegrees(value)

}

/**

* @description: 度转弧度

*/

toRadians(value) {

return Cesium.Math.toRadians(value)

}

/**

* @description: 经纬度(度)转世界坐标

* @param {Degrees} degrees.longitude 经度 degrees.latitude 纬度 degrees.height高度

* @return {Cartesian3} 世界坐标

*/

degreesToCartesian(degrees) {

return Cesium.Cartesian3.fromDegrees(degrees.longitude, degrees.latitude, degrees.height)

}

/*

* @description: 世界坐标转 经纬度(度)

* @param {Cartesian3} cartesian 世界坐标

* @return {Cartographic}  返回转换之后的经纬度

*/

degreesFromCartesian(cartesian) {

let cartographic = this.cartographicFromCartesian(cartesian);

return this.degreesFromCartographic(cartographic);

}

/*

* @description: 经纬度(度)转经纬度(弧度)

* @param {*} degrees

* @return {*}

*/

degreesToCartographic(degrees) {

degrees.longitude = this.toRadians(degrees.longitude);

degrees.latitude = this.toRadians(degrees.latitude);

return degrees;

}

/**

* @description: 经纬度(弧度)转经纬度(度)

* @param {Cartographic} cartographic

* @return {*} 返回经纬度(度)

*/

degreesFromCartographic(cartographic) {

cartographic.longitude = this.toDegrees(cartographic.longitude);

cartographic.latitude = this.toDegrees(cartographic.latitude);

return cartographic;

}

/**

* @description: 经纬度(度)坐标转web墨卡托坐标

* @param {Cartographic} degrees

* @return {Cartesian3} web墨卡托坐标

*/

degreesToWebMercatorProjection(degrees) {

var webMercatorProjection = new Cesium.WebMercatorProjection();

return webMercatorProjection.project(this.degreesToCartesian(degrees))

}

/**

* @description: web墨卡托转经纬度(度)

* @param {Cartesian3} cartesian

* @return {Cartographic} 经纬度(度)坐标

*/

degreesFromWebMercatorProjection(cartesian) {

var webMercatorProjection = new Cesium.WebMercatorProjection();

return this.degreesFromCartographic(webMercatorProjection.unproject(cartesian))

}

/**

* @description: 弧度坐标转世界坐标

* @param {Cartographic}   cartographic.longitude 经度

* @param {Cartographic}   cartographic.latitude 纬度

* @param {Cartographic}   cartographic.height 高度

* @return {Cartesian3} 世界坐标

*/

cartographicToCartesian(cartographic) {

return Cesium.Cartographic.toCartesian(cartographic)

}

/**

* @description: 世界坐标转经纬度弧度

* @param {Cartesian3} cartesian 世界坐标

* @return {Cartographic}  返回转换之后的经纬度弧度坐标

*/

cartographicFromCartesian(cartesian) {

return Cesium.Cartographic.fromCartesian(cartesian)

}

/**

* @description: 经纬度度转经纬度弧度

* @param {Degrees} degrees.longitude 经度 degrees.latitude 纬度 degrees.height高度

* @return {*}

*/

cartographicFromDegrees(degrees) {

return this.degreesToCartographic(degrees)

}

/**

* @description: 经纬度(弧度)转经纬度(度)

* @param {Cartographic} cartographic

* @return {*} 返回经纬度(度)

*/

cartographicToDegrees(cartographic) {

return this.degreesFromCartographic(cartographic)

}

/**

* @description: 经纬度(弧度)坐标转web墨卡托坐标

* @param {Cartographic} cartographic

* @return {Cartesian3} web墨卡托坐标

*/

cartographicToWebMercatorProjection(cartographic) {

var webMercatorProjection = new Cesium.WebMercatorProjection();

return webMercatorProjection.project(cartographic)

}

/**

* @description: web墨卡托转经纬度(弧度)

* @param {Cartesian3} cartesian

* @return {Cartographic} 弧度坐标

*/

cartographicFromWebMercatorProjection(cartesian) {

var webMercatorProjection = new Cesium.WebMercatorProjection();

return webMercatorProjection.unproject(cartesian)

}

/*

* @description: 世界坐标转 经纬度(度)

* @param {Cartesian3} cartesian 世界坐标

* @return {Cartographic}  返回转换之后的经纬度

*/

cartesianToDegrees(cartesian) {

return this.degreesFromCartesian(cartesian)

}

/**

* @description: 经纬度(度)转世界坐标

* @param {Degrees} degrees.longitude 经度 degrees.latitude 纬度 degrees.height高度

* @return {Cartesian3} 世界坐标

*/

cartesianFormDegrees(degrees) {

return this.degreesToCartesian(degrees)

}

/**

* @description: 世界坐标转经纬度(弧度)

* @param {Cartesian3} cartesian 世界坐标

* @return {Cartographic}  返回转换之后的经纬度弧度坐标

*/

cartesianToCartographic(cartesian) {

return this.cartographicFromCartesian(cartesian)

}

/**

* @description: 弧度坐标转世界坐标

* @param {Cartographic}  cartographic.longitude 经度

* @param {Cartographic}  cartographic.latitude 纬度

* @param {Cartographic}  cartographic.height 高度

* @return {Cartesian3} 世界坐标

*/

cartesianFromCartographic(cartographic) {

return this.cartographicToCartesian(cartographic)

}

/**

* @description: 世界坐标坐标转web墨卡托坐标

* @param {Cartographic} degrees

* @return {Cartesian3} web墨卡托坐标

*/

cartesianToWebMercatorProjection(cartesian) {

var webMercatorProjection = new Cesium.WebMercatorProjection();

return webMercatorProjection.project(this.cartesianToCartographic(cartesian))

}

/**

* @description: web墨卡托转世界坐标

* @param {Cartesian3} cartesian

* @return {Cartographic} 世界坐标

*/

cartesianFromWebMercatorProjection(cartesian) {

var webMercatorProjection = new Cesium.WebMercatorProjection();

return this.cartesianFromCartographic(webMercatorProjection.unproject(cartesian))

}

/**

* @description: 世界坐标转屏幕坐标

* @param {Cartesian3} cartesian

* @return {Cartesian2} 屏幕坐标

*/

cartesianToWindowCoordinates(scene, cartesian) {

return Cesium.SceneTransforms.wgs84ToWindowCoordinates(scene, cartesian)

}

/**

* @description: 从4*4矩阵中得到平移位置

* @param {Matrix4} mat4 4*4矩阵

* @return {Cartesian3} 返回位置信息

*/

getTranslationFromMatrix4(mat4, result) {

if (!result) result = new Cesium.Cartesian3();

return Cesium.Matrix4.getTranslation(mat4, result)

}

/**

* @description: 返回x,y,z方向的比例尺信息

* @param {Matrix4} mat4 4*4矩阵

* @param {Cartesian3} result 用于储存结果

* @return {Cartesian3} 返回x,y,z方向的比例尺信息

*/

getScaleFromMatrix4(mat4, result) {

if (!result) result = new Cesium.Cartesian3();

return Cesium.Matrix4.getScale(mat4, result)

}

/**

* @description: 将3*3旋转矩阵转换成齐次坐标

* @param {Matrix4} matrix 3*3矩阵

* @param {Quaternion} result 储存结果

* @return {Quaternion} 返回齐次坐标

*/

quaternionFromRotationMatrix(matrix, result) {

return Cesium.Quaternion.fromRotationMatrix(matrix, result)

}

/**

* @description: 将欧拉角转成齐次坐标

* @param {HeadingPitchRoll} headingPitchRoll

* @param {Quaternion} result 储存结果

* @return {Quaternion} 返回齐次坐标

*/

quaternionfromHeadingPitchRoll(headingPitchRoll, result) {

return Cesium.Quaternion.fromHeadingPitchRoll(headingPitchRoll, result)

}

/**

* @description: 将齐次坐标转成欧拉角表示,和quaternionfromHeadingPitchRoll方法互逆

* @param {Quaternion} quaternion 齐次坐标

* @param {HeadingPitchRoll} result  储存结果

* @return {HeadingPitchRoll} 返回欧拉角

*/

headingPitchRollFromQuaternion(quaternion, result) {

return Cesium.HeadingPitchRoll.fromQuaternion(quaternion, result)

}

/**

* @description: 从4*4矩阵中得到欧拉角

* @param {Matrix4} transform 4*4矩阵

* @param {Ellipsoid} ellipsoid 84椭球体

* @param {Transforms.LocalFrameToFixedFrame} fixedFrameTransform 参考系,默认东-北-上参考系

* @param {HeadingPitchRoll} result 储存结果

* @return {HeadingPitchRoll}

*/

fixedFrameToHeadingPitchRoll(transform, ellipsoid, fixedFrameTransform, result) {

return Cesium.Transforms.fixedFrameToHeadingPitchRoll(transform, ellipsoid, fixedFrameTransform, result)

}

/**

* @description: 将欧拉角转成3*3矩阵

* @param {HeadingPitchRoll} headingPitchRoll

* @param {Matrix3} result 储存结果

* @return {Matrix3} 返回一个3*3矩阵

*/

matrixFromHeadingPitchRoll(headingPitchRoll, result) {

return Cesium.Matrix3.fromHeadingPitchRoll(headingPitchRoll, result)

}

/**

* @description: 根据东-北-上方向参考系生成4*4矩阵,已知道地球上的某个位置,可以根据这个方法生成一个4*4矩阵

* @param {Cartesian3} origin 原点坐标

* @param {Ellipsoid} ellipsoid 84椭球体

* @param {Matrix4} result 储存结果

* @return {Matrix4} 返回4*4矩阵

*/

eastNorthUpToFixedFrame(origin, ellipsoid, result) {

return Cesium.Transforms.eastNorthUpToFixedFrame(origin, ellipsoid, result)

}

/**

* @description: 根据原点和欧拉角生成4*4矩阵

* @param {Cartesian3} origin 原点坐标

* @param {HeadingPitchRoll} headingPitchRoll 欧拉角

* @param {Ellipsoid} ellipsoid

* @param {Transforms.LocalFrameToFixedFrame} fixedFrameTransform 参考系,默认为东-北-上参考系

* @param {Matrix4} result 储存结果

* @return {Matrix4} 返回4*4矩阵

*/

headingPitchRollToFixedFrame(origin, headingPitchRoll, ellipsoid, fixedFrameTransform, result) {

return Cesium.Transforms.headingPitchRollToFixedFrame(origin, headingPitchRoll, ellipsoid, fixedFrameTransform, result)

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/268782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sql 2005 try catch

--删除卡的记录 delete from ObjTransportCard where CardIdCardId --删除交易的记录 delete from ObjTransaction where CardIdCardId 在Sql 2000中,为了成功执行这个存储过程,我需要在每一条语句后面去判断ERROR,如果有错,则执行回滚.上例只是我举的一个简单的例子,如果在一个…

selenium拖动元素java_【自动化测试】Java+Selenium操作页面元素(合集)

本文基于Java语言,依托于Eclipse工具,使用Selenium框架,主要介绍在Selenium中,如何操作Web页面中的各种元素。Eclipse 搭建1.1、Eclipse 配置1.2、引入依赖包修改pom.xml文件在dependencys节点下,添加如下内容&#xf…

面试题 锁消除是什么

锁消除是在编译器级别的事情。 在即时编译器时,如果发现不可能被共享的对象,则可以消除这些对象的锁操作。 也许你会觉得奇怪,既然有些对象不可能被多线程访问,那为什么要加锁呢?写代码时直接不加锁不就好了。 但是…

通过日志恢复SQL Server的历史数据

园子里前段时间发过一篇通过日志恢复MSSQL数据例子 ,我总结一下 通过日志还原,最重要的是: 1.必须有一个完整的备份,且这个备份必须是在修改、删除数据之前做的。 2.在更新、删除数据之后,做日志备份,该log…

JavaScript面向对象编程指南(五) 原型

第5章 原型 5.1 原型属性 function f(a,b){return a*b;};// length 属性f.length; //2// constructor 构造属性f.constructor; // function Function() { [native code] }// prototype 属性 初始值是空对象typeof f.prototype; //"object" 5.1.1 利用原型添加方法和…

java communal_平台用英语怎么说

平台通常指高于附近区域的平面;楼房的阳台。也指指计算机硬件或软件的操作环境。而在网络上所说的平台一般是指网站。那么你知道平台用英语怎么说吗?下面来学习一下吧。平台英语说法1:platform平台英语说法2:terrace平台英语说法3:flat roof…

面试题-- 什么是偏向锁

所谓的偏向,就是偏心,即锁会偏向于当前已经占有锁的线程 。 大部分情况是没有竞争的(某个同步块大多数情况都不会出现多线程同时竞争锁),所以可以通过偏向来提高性能。即在无竞争时,之前获得锁的线程再次获…

Ping, IPConfig, Format, Netstat, etc. Not Recognized as Commands

Can you use them when you point directly to them..> C:\Windows\System32\ping.exe 127.0.0.1? If so, you probably have a messed up PATH variable.> echo %PATH%Should have "C:\Windows\System32" in it, does it? 以上为google的结果,我…

Collections.min()和Collections.max()的使用

取集合中的最小值 Collections.min(); 取集合中的最大值 Collections.max(); public class TestCollectionMinMax {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(3);list.add(7);list.add(9);list.add(1);list.add(…

java date 过时_过时date.toLocaleString()的解决方法

过时date.toLocaleString()的解决方法 Java代码 收藏代码 System.out.println(new java.util.Date()); 输出&#xff1a;Thu Jan 27 14:43:28 CST 2011 Java代码 收藏代码 System.out.println(new java.util.Date().toLocaleString()); 输出&#xff1a;2011-1-27 14:45:…

linux下查看隐藏的文件

在linux下以点开头命名的文件在系统中视为隐藏文件&#xff0c;例如 “.123 ”。用ls、ls -l或者ll是无法查看的。那么如何才能查看linux系统下的隐藏文件呢&#xff1f;下面介绍一下简单的查看方式。1、#在命令行下使用ls -a2、#在XWindow的KDE桌面中在"查看(View)"…

python学习之路(九)

这一节主要讲的是装饰器。装饰器是一个非常好用的&#xff0c;用于装饰已有函数的函数功能。 其优点是不用修改调用方式&#xff0c;还不用修改源代码。 他的思想是&#xff1a;函数既变量&#xff1b;高阶函数&#xff1b;嵌套函数。 现在来尝试写装饰器 有两个函数 各自实现自…

java http请求实现_java工程实现http请求接口

java工程实现http请求接口java工程实现http请求接口1.实现代码package com.home;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.sun.net.httpserver.HttpExchange;import com.sun.net.httpserver.HttpHandler;import com.sun.net.https…

Java集合中removeIf的使用

使用removeIf方法从List中删除元素 在JDK1.8中&#xff0c;Collection以及其子类新加入了removeIf方法&#xff0c;作用是按照一定规则过滤集合中的元素。这里展示removeIf的用法。 需求是过滤掉学生中分数为为18以下的&#xff0c; 一个学生实体类 Data public class Studen…

Java中lombok @Builder注解使用详解

简介 Lombok大家都知道&#xff0c;在使用POJO过程中&#xff0c;它给我们带来了很多便利&#xff0c;省下大量写get、set方法、构造器、equal、toString方法的时间。除此之外&#xff0c;通过Builder注解&#xff0c;lombok还可以方便的实现建造者模式&#xff0c;创建对象 …

鼠标控制

一&#xff09;客户端 using System;using System.Net;using System.Net.Sockets;using System.Text;using System.IO;using System.Threading; namespace 鼠标控制_客户端{ //我们定义一个保存鼠标坐标的结构 public struct MousePosition { private int x; …

java resourcebundle_Java - Properties和ResourceBundle类学习

一、前言在项目的开发过程中&#xff0c;为了统一配置的管理&#xff0c;我们经常需要将一些配置信息根据环境的不同&#xff0c;配置在不同的properties中&#xff0c;然后从里面进行读取。而Properties类作为最基础也是最经常使用的类&#xff0c;通过本文我们来学习一下它的…

Java中Collections.singletonList用法

Collections.singletonList()返回的是不可变的集合&#xff0c;但是这个长度的集合只有1&#xff0c;可以减少内存空间。但是返回的值依然是Collections的内部实现类&#xff0c;同样没有add的方法&#xff0c;调用add&#xff0c;set方法会报错 调用add方法报错 Exception in…

最近找工作的面试经历

来到广州已经一个星期了&#xff0c;招聘会参加了两场&#xff0c;面试了三间公司&#xff0c;但都是通知回去等结果。回想一下这几天的面试经历&#xff0c;感觉自己要学的东西还很多。 <?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office&quo…

CF Round410 D. Mike and distribution

D. Mike and distribution 构造法 798D - Mike and distribution In the beginning, its quite easy to notice that the condition " 2(ap1  ...  apk) is greater than the sum of all elements in A " is equivalent to " ap1  ...  apk is greater …