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. C++'s most vexing parse

    本文地址 https://www.cnblogs.com/wanger-sjtu/p/16876846.html C++'s most vexing parse 是 Scott Meyers 在其名著 ...

  2. Django ORM:最全面的数据库处理指南

    深度探讨Django ORM的概念.基础使用.进阶操作以及详细解析在实际使用中如何处理数据库操作.同时,我们还讨论了模型深入理解,如何进行CRUD操作,并且深化理解到数据库迁移等高级主题.为了全面解读 ...

  3. zynq7000 emc启动及其加速

    背景需求 ZYNQ 7000系统在出场时需要将固件从eMMC启动,原因有2: FLASH存储空间小: SD卡容易脱落,不适合产品存放系统文件: 需要注意,ZYNQ7000 系列不支持eMMC作为BOO ...

  4. [Spring+SpringMVC+Mybatis]框架学习笔记(八):Mybatis概述

    第8章 Mybatis概述 8.1 几个概念 ORM Object-Relationship Mapping 对象关系映射,它是一种思想,它的实质是将数据库中的数据用对象的形式表现出来. JPA Ja ...

  5. 2023年ccpc大学生程序设计竞赛-crf

    第一次参加这种大型线下程序设计比赛,心情自然是很激动,但比赛中并没有想象中那么顺利,甚至可以说有些惊险,比赛开始的时候,我们三人随便看看题,顺便等着跟榜,对于签到题我们自然是相信clk可以很快地独立完 ...

  6. C语言指针--二级指针

    文章目录 前言 一.什么是二级指针 二.二级指针的使用 1.二级指针的定义 2.二级指针的赋值 3.二级指针的使用 3.1 用二级指针输出一级指针的地址 3.2 用二级指针输出一级指针中的内容 3.3 ...

  7. React:如何在普通函数中使用Hook

    解决方案

  8. cesium加载gif图片(cesium篇.43)

    https://blog.csdn.net/QQ98281642/article/details/120214325

  9. DC-SDK 开发文档

    https://resource.dvgis.cn/dc-docs/v2.x/zh/introduction/#%E5%BA%94%E7%94%A8%E9%85%8D%E7%BD%AE

  10. Druid未授权访问漏洞小记

    某一次在对某网站做渗透测试时,无意中发现了这个漏洞,在此做个记录 Druid未授权访问漏洞: Druid是阿里巴巴数据库出品的,为监控而生的数据库连接池,并且Druid提供的监控功能,监控SQL的执行 ...