第18.1节 OE3.1实例

您所在的位置:网站首页 osgearth_package切片 第18.1节 OE3.1实例

第18.1节 OE3.1实例

2024-07-03 21:35| 来源: 网络整理| 查看: 265

致谢

感谢网友提出这个问题。大家有问题也可以在评论区提出,有问必有答。如果涉及商业需求,需要较完整/详尽的工程,可以联系作者133-2459-8743。

问题描述

网友提出要做一个基于osgearth的导弹按轨迹飞行的程序,并放置一些地面站。我准备基于最新的oe版本,分几个步骤把这个功能给做出来。节号命名为18.1, 18.2以示连贯。oe当前最新版本是3.1,说老实话不是很稳定。我们做为商业公司,做军工的,稳定性为首要,升级版本是很慎重的,我看调研了好长时间了,还没有升。

本节资源

本文集包括本节所有资源包括模型代码都在此下载,按节的序号有文件或文件夹:

【击此打开网盘资源链接】

本节功能

1. 本节要完成一个可以加载本地瓦片的功能,这往往是做球的第一步。为了保证程序简单,我们只加载本地影像数据,举一反三,高程瓦片之类的,用户可以根据自己的切片数据自行设计。

2. 具体细节瓦片我们加载data/image下的,我们弄了几张图片当示例。可以看到瓦片0级,1级,2级是满的,突然跳到第8级,有几张台湾的高清数据。因此本节用户可以将操作器拉到台湾那里,会有高清的显示。

3. 加载高程我们直接使用一个全球900m的高程图,使用gdal加载,全球900米的高程图要放在data\elevation\900_ludi_haiyang.tif,高程图在网盘的公共数据文件夹下。 image.png

具体实现和方法

1. oe提供了丰富的示例,我们可以使用osgEarth_Viewer arcgisonline.earth来看一看在线的,发现高程也有,是影像也有。都是瓦片化的。那么我们直接看它咋搞的,本地建一个不就行了吗?

2. arcgisonline.earth里的影像标签使用的是ArcGISServerImage,如下:

http://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/

在代码中对应的是ArcGISServer和ArcGISServer.cpp,看代码我们要先关注它究竟从网上下载了什么,发现了下载了以下东西:

1) bool ArcGISServer::MapService::init( const URI& _uri, const osgDB::ReaderWriter::Options* options )函数中下载了一个json文件,URL通过调试得知在这里:http://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/?f=pjson

从浏览器里打开网址下载,然后给存到本地data\image\base.json

2) 在GeoImage ArcGISServerImageLayer::createImageImplementation(const TileKey& key, ProgressCallback* progress) const 函数中下载的就是瓦片数据了,URL如下: http://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/tile/0/0/0.jpeg 放浏览器里一打开,是瓦片数据,我们也在本地也建上:data\image\0\0\0.jpeg,我们像模像样的下载0级,1级,2级的瓦片,然后再取几张台湾的8级做点高清的数据。框架就算完工了。

3. 在我们自己的工程里,把ArcGISServer和ArcGISServer.cpp改个名字,将ArcGIS整个替换成MyGIS, image.png

然后在earth文件中将标签名称和URL一修改:

./image

这就是要读本地的./image文件夹下的影像了,此外我们还要修改上面两处下载数据的地方,一个是读json的bool ArcGISServer::MapService::init,现在叫bool MyGISServer::MapService::init了, 将这个:std::string json_url = uri.full()+ sep + std::string(“f=pjson”); 直接改成:std::string json_url = uri.full()+"/base.json"; 这样他就读我们./image/base.json文件了。

然后是读瓦片时接URL的函数: GeoImage ArcGISServerImageLayer::createImageImplementation 现在叫 GeoImage MyGISServerImageLayer::createImageImplementation了 将: buf full()



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3