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的更多相关文章

  1. VC、OpenGL、ArcGIS Engine开发的二维三维结合的GIS系统

    一.前言 众所周知,二维GIS技术发展了近四十年,伴随着计算机软硬件以及关系型数据库的飞速发展,二维GIS技术已日臻完善.在对地理信息的分析功能上有着无可比拟的优势.一些宏观的地理信息,一维的地理信息 ...

  2. 19个三维GIS软件对比

    19个三维GIS软件对比 麦豆科研技术中心 days ago 我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方 ...

  3. 国内外主流的三维GIS软件

    我国GIS经过三十多年的发展,理论和技术日趋成熟,在传统二维GIS已不能满足应用需求的情况下,三维GIS应运而生,并成为GIS的重要发展方向之一.上世纪八十年代末以来,空间信息三维可视化技术成为业界研 ...

  4. 3DEarth PPT :一款专为GIS系统研发的三维汇报演示系统

    3DEarth PPT(三维地球汇报演示系统)又称 3DGis PPT,是专为GIS系统研发的三维汇报演示系统.对有3DGis系统的客户它可以作为一个组件(dll)嵌入原系统,对没有3DGis系统的客 ...

  5. 三维GIS引擎地图可视化渲染方案设计

    1.GIS地图可视化流程 GIS地图可视化就是将空间数据转化为地图数据再进行交互处理的方法,下图一展示了地图可视化的可编程渲染的典型管道,原始空间数据必须处理为图形API支持基础图元用以地图渲染.下图 ...

  6. 开源(免费)三维 GIS(地形,游戏)

    先写想法: 想做个简单的地形漫游,于是考虑在ww直接开发,或找个控件形式的开发组件. 最大的期望有: 1. 支持google的sketchup,快速智能三维建模 2. 设计模式做好点,最好先做成组件形 ...

  7. 数字孪生,数据驱动下的北京 CBD 智能楼宇三维可视化系统

    前言 楼宇作为建筑基础设施的主体,为人们提供着重要的生存空间.随着物联网.人工智能概念的兴起以及智慧城市如火如荼的开展,智能楼宇的重要性越发突显. 随着城市现代化建设的发展,建筑的智能化,特别是公用建 ...

  8. 类似阿里双十一的可视化看板是怎么做的?无人机三维GIS看板也来了!

    天猫双十一数据可视化看板 每年的双十一,天猫都会在整点时刻直播战绩,惊叹于可怕战绩的同时,也会被背后展示的数据大屏吸引,这样让人眼前一亮的可视化数据看板是怎么做出来的? 所谓可视化数据看板,就是挂在墙 ...

  9. Java web与web gis学习笔记(一)——Tomcat环境搭建

    系列链接: Java web与web gis学习笔记(一)--Tomcat环境搭建 Java web与web gis学习笔记(二)--百度地图API调用 JavaWeb和WebGIS学习笔记(三)-- ...

  10. 绿色城市智慧运营:Web 3D 垃圾分类 GIS 系统

    前言 感谢所有为上海疫情奉献的人,祈求上海疫情早日清零,中国加油,上海加油! <上海市生活垃圾管理条例>施行至今已有两年多,上海市民践行绿色低碳理念.主动参与生活垃圾分类的习惯基本养成,分 ...

随机推荐

  1. 全球开源 AI 游戏开发挑战赛,只等你来!

    我们在之前的文章中 预告过 (*划重点,IP 属地法国):7 月初,我们将举办一次与 AI 游戏相关的黑客松活动,这是有史以来的首次开源游戏开发挑战赛,借助人工智能工具释放你的创造力,一起打破游戏开发 ...

  2. 【Netty】Netty部分源码分析(启动流程,EventLoop,accept流程,read流程)

    源码分析 Netty源码中调用链特别长,且涉及到线程切换等步骤,令人头大:) 1 启动剖析 我们就来看看 netty 中对下面的代码是怎样进行处理的 //1 netty 中使用 NioEventLoo ...

  3. 前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件

    前端Vue自定义简单好用商品分类列表组件 侧边栏商品分类组件 , 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13148 效果 ...

  4. 未来的编程语言「GitHub 热点速览」

    又一个编程语言火了,不算新,因为它已经开发了一段时间.不过在本周 Hacker News 上风头十足,DreamBerd 除了有点意思的改 ; 分隔符为 !,之外,它还能让你用问号来标注一段你也不确定 ...

  5. 新建maven项目的时候idea的一些设置

    1.统一字符编码 2.开启注解生效激活 3.选择编译编码格式 4.设置忽略文件

  6. 【技术积累】JavaScript中的基础语法【三】

    JavaScript的条件结构 JavaScript中的条件结构主要包括if语句.if-else语句.if-else if语句和switch语句.这些条件结构用于根据不同的条件执行不同的代码块. if ...

  7. AI视频风格转换:Stable Diffusion+EBSynth

    这次转换的视频还比较稳定,先给大家看下效果. 这里传不了视频,还是放到盘盘了:https://www.aliyundrive.com/s/5mzfjLViyDa 书接上文,在上一篇文章中,我们首先使用 ...

  8. zabbix system.run

    Zabbix的system.run是一个主动模式的监控项,它允许用户在Zabbix服务器上执行自定义的命令或脚本,并获取执行结果作为监控数据. system.run监控项的配置包括以下几个关键参数: ...

  9. EF 管理数据库架构

    本章会主要了解EF提供的独立迁移项目,用独立迁移项目自动创建dgml设计关系图和sql脚本. 迁移项目通常也叫(CodeFirst代码优先),在EF中迁移项目是在,在代码中设计数据库,每次对数据库的设 ...

  10. Xshell远程连接虚拟机及连接故障排查

    用Xshell 远程连接虚拟机 如果按前面博客装好虚拟机,会发现刚装好的虚拟机直接连Xshell连不上,宿主机也ping不通虚拟机,这就需要修改VMware的默认网络配置 修改步骤: 1.在VMwar ...