Three经纬度转世界坐标算法

4 篇文章 0 订阅
订阅专栏
4 篇文章 0 订阅
订阅专栏

一、简介

用Three创建三维地球(sphere),将经纬度转换为笛卡尔坐标在球面进行展示。

二、流程

1、SphereGeometry 生成

SphereGeometry的构造函数如下

SphereGeometry(radius : Float, widthSegments : Integer, heightSegments : Integer, phiStart : Float, phiLength : Float, thetaStart : Float, thetaLength : Float)
radius — 球体半径,默认为1。
widthSegments — 水平分段数(沿着经线分段),最小值为3,默认值为8。
heightSegments — 垂直分段数(沿着纬线分段),最小值为2,默认值为6。
phiStart — 指定水平(经线)起始角度,默认值为0。。
phiLength — 指定水平(经线)扫描角度的大小,默认值为 Math.PI * 2。
thetaStart — 指定垂直(纬线)起始角度,默认值为0。
thetaLength — 指定垂直(纬线)扫描角度大小,默认值为 Math.PI。

主要看 phiStart 和 thetaStart,分别是球体横向的起点,与纵向的起点。其中横向的起点是X轴的负半轴,纵向的起点是Y轴正半轴,如图所示,也就是说如果对球体进行贴图,那么贴图的左半边是起点对应的X轴的负半轴,贴图的上边对应的是Y轴的正半轴,知道这一点后就可以对球面进行贴图了

2、球面贴图

贴图用的是墨卡托投影的世界地图

地图贴上去后展示左半边对应的是球体的x轴负半轴,如图所示,此处需要注意本初子午线(即墨卡托零度线)的位置

3、经纬度转世界坐标(笛卡尔坐标)

在计算之前,需要先理解经纬度的含义,如下图所示

经度以子午线为起点,向右转动A(50)度,到达东经50度,然后以赤道为期起点,向上转动B(40)度,到达北纬40度,理解经纬度如何计算之后,就可以开始推导公式了,设球体的半径为 R,R *  sin(B)便可以计算出点位的Y轴坐标。R * cos(B) 将点位投影到ZX轴构成的平面得到点位A1,A1 * COS(A)则可以得到Z轴坐标,A1 * sin(A)则可以得到X轴的坐标。代码如下

function getPosition(longitude, latitude, radius) {
    var lg = THREE.Math.degToRad(longitude);
    var lt = THREE.Math.degToRad(latitude);
    var temp = radius * Math.cos(lt);
    var x = temp * Math.sin(lg);
    var y = radius * Math.sin(lt);
    var z = temp * Math.cos(lg);
    return {
        x: x,
        y: y,
        z: z
    }
}

输入经纬度坐标(50,40),结果如图,可能会有人有疑问,点位实际效果与上面的示例图有着很大的差距,这个问题就需要回看上面的图中特地标出的本初子午线的位置了,算法计算的时候是以Z轴的正半轴为起点计算的,而实际上贴图之后的本初子午线是在X轴的正半轴,之间差了90度,所以在计算之前需要把经度加上90在进行计算。

输入(140,40),输出的结果如图,现在的点位就是正确的点位了

写文章

热门文章

  • DvaJS快速上手(1) 4860
  • Three经纬度转世界坐标算法 3106
  • Cesium引入Three同步相机 2179
  • OpenLayer加载WMTS服务 及 地图分辨率算法 1812
  • DvaJS快速上手(3) 1507

分类专栏

  • Cesium 1篇
  • bug解决
  • Android Studio 问题
  • WebGIS 4篇
  • DvaJS 2篇
  • three.js 4篇
  • 总结 1篇
  • CMake
  • 日记
  • 知识点 1篇

最新评论

  • Three经纬度转世界坐标算法

    Webgiserin: 感谢大神讲解

  • Three经纬度转世界坐标算法

    生一: 你好,我想请教下那个显示红点的是怎么实现的

  • Cesium引入Three同步相机

    gee1k: 跑起来,看不见效果了

  • DvaJS快速上手(1)

    崽崽的谷雨: https://ask.csdn.net/questions/820612你能帮我看看这个该怎么写吗?

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • Git常用知识
  • Openlayer 切片图层添加水印
  • OpenLayer加载WMTS服务 及 地图分辨率算法
2021年3篇
2020年2篇
2019年5篇
2018年3篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

聚圣源油炸食品品牌起名丁姓男孩起名三个字时尚女鞋店名怎么起新月英文名怎么起物流管理就业方向一起种爱情树取名快餐 起名大全峨眉派偶像指定字起名字卑劣的街头下载ff14国服林男孩起名字新公司起名二字大全集好看的军事小说美国人起名再审申请书范文消杀公司起名大全使用海字起名连锁开店王者荣耀起名字红豆女之恋辰东小说一念永恒在线观看动漫傅起名称大全宁氏 起名奚姓宝宝起名茶酒公司起名字钦字起名字有什么含义猪宝宝起名哪些字国有土地上房屋征收与补偿条例实施细则淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化