研发三维GIS系统笔记/实现wgs84投影-001
1. 工作内容,改造引擎,支持wgs84投影
改造原因:目前投影是墨卡托投影(与Google Map一致) 目前的GIS系统是二维的采用这个坐标系是没有问题的
但不支持wgs84瓦片数据以及高程数据,工作中很多数据是wgs84格式的,尤其很多三维GIS都是采用wgs84投影

wgs84 与mercator 从数据上看,就是跟节点是一个与两个的区别(长方形)

下图Mercator 投影(zhengfangxing)

2. 对现有接口进行抽象,目的是向下兼容原有的引擎(Mercator)投影
抽象类如下定义:
class CELLSpRef
{
public: /// <summary>
/// 经纬度转化为世界坐标
/// </summary>
virtual real2 longLatToWorld(const real2& longLatx) = 0;
/// <summary>
/// 世界坐标转化为经纬度
/// </summary>
virtual real2 worldToLongLat(const real2& world) = 0;
/// <summary>
/// 给定经纬度返回对应的瓦片Id
/// </summary>
virtual int3 getKey(unsigned l,real rLong,real rLat) = 0; };
3. wgs84投影类实现如下:
1 class CELLWgs842d :public CELLSpRef
2 {
3 public:
4 /// <summary>
5 /// 经纬度转化为世界坐标
6 /// </summary>
7 virtual real2 longLatToWorld(const real2& longLatx) override
8 {
9 real2 world;
10 world.x = longLatx.x * WGS_84_RADIUS_EQUATOR;
11 world.y = longLatx.y * WGS_84_RADIUS_EQUATOR;
12 return world;
13 }
14
15 /// <summary>
16 /// 世界坐标转化为经纬度
17 /// </summary>
18 virtual real2 worldToLongLat(const real2& world) override
19 {
20 real2 lonlat;
21 lonlat.x = world.x / WGS_84_RADIUS_EQUATOR;
22 lonlat.y = world.y / WGS_84_RADIUS_EQUATOR;
23 return lonlat;
24 }
25
26 /// <summary>
27 /// 给定经纬度返回对应的瓦片Id
28 /// </summary>
29 virtual int3 getKey(unsigned level, real rLong,real rLat) override
30 {
31 /// 当下版本还在实现中
32 return int3(0,0,level);
33 }
34 };
4. 适配引擎代码
引擎中原来直接调用了Mercator投影,现在需要统一接口,在引擎类中增加一个获取投影接口的类
1 class CELLTerrainInterface
2 {
3 public:
4 virtual ~CELLTerrainInterface()
5 {}
6 /// <summary>
7 /// 创建纹理
8 /// </summary>
9 virtual uint createTexture(const TileId& id) = 0;
10 /// <summary>
11 /// 释放纹理
12 /// </summary>
13 virtual void request(CELLQuadTree* node) = 0;
14
15 /// <summary>
16 /// 释放纹理
17 /// </summary>
18 virtual void cancelRequest(CELLQuadTree* node) = 0;
19
20 /// <summary>
21 /// 释放纹理
22 /// </summary>
23 virtual void releaseTexture(uint texId) = 0;
24
25 /// <summary>
26 /// 获取统计信息
27 /// </summary>
28
29 virtual Counts& getCounts() = 0;
30
31 /// <summary>
32 /// 获取投影,具体使用什么类型的投影,由具体实现决定
33 /// </summary>
34 virtual CELLSpRef* spRef() = 0;
35
36
37 };
5. 改造调用了投影接口的代码
主要集中在四叉树部分,四叉树根据输入的世界坐标创建瓦片,同时根据也是子节点以及其他后代节点裂分的根据。
6. 改造引擎根节点
墨卡托投影下,四叉树的根节点只有一个,现在有两个(wgs84投影)
代码如下:
1 auto root0 = new CELLQuadTree( this
2 , 0
3 , real2(-PI * WGS_84_RADIUS_EQUATOR, -HALF_PI * WGS_84_RADIUS_EQUATOR)
4 , real2(0, +HALF_PI * WGS_84_RADIUS_EQUATOR)
5 , 0
6 , CELLQuadTree::CHILD_LT
7 );
8 auto root1 = new CELLQuadTree( this
9 , 0
10 , real2(0, -HALF_PI * WGS_84_RADIUS_EQUATOR)
11 , real2(-PI * WGS_84_RADIUS_EQUATOR, +HALF_PI * WGS_84_RADIUS_EQUATOR)
12 , 0
13 , CELLQuadTree::CHILD_LT
14 );
15
16 _roots.push_back(root0);
17 _roots.push_back(root1);
研发三维GIS系统笔记/实现wgs84投影-001的更多相关文章
- VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统
一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...
- 19个三维GIS软件对比
19个三维GIS软件对比 麦豆科研技术中心 days ago 我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方 ...
- 国内外主流的三维GIS软件
我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方向之一.上世纪八十年代末以来,空间信息三维可视化技术成为业界研 ...
- 3DEarth PPT :一款专为GIS系统研发的三维汇报演示系统
3DEarth PPT(三维地球汇报演示系统)又称 3DGis PPT,是专为GIS系统研发的三维汇报演示系统.对有3DGis系统的客户它可以作为一个组件(dll)嵌入原系统,对没有3DGis系统的客 ...
- 三维GIS引擎地图可视化渲染方案设计
1.GIS地图可视化流程 GIS地图可视化就是将空间数据转化为地图数据再进行交互处理的方法,下图一展示了地图可视化的可编程渲染的典型管道,原始空间数据必须处理为图形API支持基础图元用以地图渲染.下图 ...
- 开源(免费)三维 GIS(地形,游戏)
先写想法: 想做个简单的地形漫游,于是考虑在ww直接开发,或找个控件形式的开发组件. 最大的期望有: 1. 支持google的sketchup,快速智能三维建模 2. 设计模式做好点,最好先做成组件形 ...
- 数字孪生,数据驱动下的北京 CBD 智能楼宇三维可视化系统
前言 楼宇作为建筑基础设施的主体,为人们提供着重要的生存空间.随着物联网.人工智能概念的兴起以及智慧城市如火如荼的开展,智能楼宇的重要性越发突显. 随着城市现代化建设的发展,建筑的智能化,特别是公用建 ...
- 类似阿里双十一的可视化看板是怎么做的?无人机三维GIS看板也来了!
天猫双十一数据可视化看板 每年的双十一,天猫都会在整点时刻直播战绩,惊叹于可怕战绩的同时,也会被背后展示的数据大屏吸引,这样让人眼前一亮的可视化数据看板是怎么做出来的? 所谓可视化数据看板,就是挂在墙 ...
- Java web与web gis学习笔记(一)——Tomcat环境搭建
系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...
- 绿色城市智慧运营:Web 3D 垃圾分类 GIS 系统
前言 感谢所有为上海疫情奉献的人,祈求上海疫情早日清零,中国加油,上海加油! <上海市生活垃圾管理条例>施行至今已有两年多,上海市民践行绿色低碳理念.主动参与生活垃圾分类的习惯基本养成,分 ...
随机推荐
- To ChatGPT:让你更加随意地使用所有ChatGPT应用
现在其实已经有很多在线的llm服务了,当然也存在许多开源部署方案,但是不知道大家有没有发现一个问题,目前基于ChatGPT开发的应用,都是使用的OpenAI的接口.换句话说,如果没有OpenAI账号, ...
- 一篇随笔入门Java
Java helloWorld 随便新建一个文件夹存放代码 新建一个java文件 文件后缀名.java Hello.java [注意]系统可能不显示后缀名要手动打开 代码 public class H ...
- 离线安装mysql报错解决方法:/usr/sbin/mysqld: error while loading shared libraries: libaio.so.1: cannot open sha --九五小庞
Linux:centos 7.6 64位 mysql:5.6使用离线方式安装:rpm -ivh --nodeps mysql* ,执行 systemctl start mysqld.service发现 ...
- vue报错解决Duplicate keys detected: ‘[object Object]’
最近在做vue项目时遇到了报错 Duplicate keys detected: '[object Object]'. This may cause an update error. 由于这个 ...
- 即构发布 LCEP 低代码互动平台产品 RoomKit,实现互动房间0代码搭建
2月5日,全球云通讯服务商ZEGO即构科技发布低代码互动平台 LCEP(Low-code Engagement Platform)产品 RoomKit,支持1V1在线课堂.小班课.大班课.视频会议.视 ...
- kafka-eagle-2.0.5安装指南
kafka eagle 安装文档 环境介绍 :kafka 三台 版本:2.2.1+cdh6.3.2 管理:ZK kafka-eagle-bin-2.0.5.tar.gz安装包准备 官网 :http:/ ...
- 自用 .net C# CSV文件写入读取工具类
using System.Data; using System.IO; using System.Linq; using System.Text; using System.Text.RegularE ...
- AI 一键去水印:教你无限量使用商业图片的技巧
场景再现 刚开始注册账号(啥账号具体不表了,小编不喜欢的那个),想弄个闪亮,好看,有个性化的 Logo.作为一名非专美工小白人员,网上翻了很久作图工具,要么就是不好用,好用的大部分都收费.最后没办法, ...
- 从read 系统调用到 C10M 问题
一.前言 从上个世纪到现在,工程师们在优化服务器性能的过程中,提出了各种不同的io模型,比如非阻塞io,io复用,信号驱动式io,异步io.具体io模型在不同平台上的实现也不一样,比如io复用在bsd ...
- vivo 场景下的 H5无障碍适配实践
作者:vivo 互联网前端团队- Zhang Li.Dai Wenkuan 随着信息无障碍的建设越来越受重视,开发人员在无障碍适配中也遇到了越来越多的挑战.本文是笔者在vivo开发H5项目做无障碍适配 ...