1、测试数据我们主要是用osgearth_viewer这个库,让osgearth直接加载下载下来的tif文件。为此,我们要为下载下来的tif文件写一个.earth的配置文件,.earth文件里面主要包含tif文件的地址信息,截图如下:
在这个.earth文件中,最重要的一条信息就是:
<image driver="gdal" name="world-tiff">
<url>D:/矩形区域_#24_卫图_Level_13.tif</url>
</image>
2、这样子我们可以通过读取这个.earth文件来读取我们下载的ID为“矩形区域_#24_level_13.tif”这个文件,读取的时候我们要用到osgearth_viewer这个命令,在dos环境下输入命令读取,截图如下:
3、Osgearth_viewer表示我们要用这个库来读取,D:/gdal_tiff.earth表示D盘下的.earth文件。意思就是我们要用osgearth_viewer这个库来读取D盘下的gdal_tiff.earth文件。由于之前已经说明这个.earth是我们下载的tif文件的配置文件,因此通过这行命令就可以读取tif文件了。需要说明的是,由于tif文件都比较大,因此直接用osgearth加载的话可能会比较慢,所以需要大家耐心等待。
加载完成之后如果显示是这样子的,说明文件没有损坏:
4、把地图放大,可以明显看到我们下载的地图,如图所示:
5、如果加载出来的数据某一部分是黑的或者全部都是黑的,如图所示。说明数据已经损坏,损坏原因不明,可能是BigeMap软件本身的缺陷。数据一旦损坏请重新下载,不然切出的地图数据也会有问题的。
6、数据切片
前两部分主要是说明了数据的准备,这部分主要是进行数据的切片。数据切片我们主要用到两个东西。一个就是数据的配置文件——.earth文件;另一个就是osgearth提供的切片工具osgearth_package。
earth配置文件如图所示:
7、里面包含了我们要切割的所有源数据的地址信息。
另外我们还需要在DOS环境下输入命令,进行切割,如图所示:
8、Osgearth_package表示我们要用这个工具进行切图;--tms表示我们要用到的源数据的配置文件为:gdal_tiff.earth;--out表示输出文件夹;--Max-level表示切图的最大层级。
通过上述命令,osgearth就会通过源数据图的分辨率自动计算可以切多少层,每层切多少瓦片。切图过程需要一定时间,切完之后的文件如图所示:
可以看到切完之后生成了一个.xml文件,这个文件是对切片的配置文件,包括文件ID和索引等一些基本信息,如果想要读取这些瓦片数据的话,直接读取这个.xml配置文件即可。
9、完整演示
前面我们叙述过,osgearth读取文件需要用osgearth_viewer这个工具读取数据的.earth配置文件,而经过切片之后,切片数据会生成一个.xml的配置文件,要想读取切片之后的数据就要读取这个.xml文件,因此osgearth要想读取切片完成之后的数据,就要读取.earth文件,而这个.earth文件是指向包含切片数据信息的.xml文件的。这个.earth文件的详细信息如图所示:
10、将.earth指向.xml文件
至此,一个完整的数据准备过程结束了。
1、错误描述编译完OSG,运行osgViewer.exe获取网络的.osg格式数据,在读取.osg数据时报错“无法定位序数354于动态链接库libeay32.dll”
2、修复尝试
拷贝3rdParty_VC11_x86_x64目录中的libeay32.dll覆盖当前的libeay32.dll,还是持续报错。
最好尝试将3rdParty_VC11_x86_x64中与OSG程序相关的.dll都拷贝并覆盖运行程序同目录下的.dll。最终运行osgViewer.exe
3、解决方案
osgViewer.exe同级目录下的某一dll文件所依赖的libeay32.dll的版本高于当前的依赖版本。所以剔除了此依赖关系,就可正常运行。
遇到此问题时,可换种思路,替换依赖libeay32.dll的库文件。
给你一些提示#include<iostream>
#include<io.h>
using namespace std
int main(){
_finddata_t file
long lf
//输入文件夹路径
if((lf = _findfirst("d:\\OSG\\Data\\*.*", &file))==-1)//这个里面需要修改
cout<<"Not Found!"<<endl
else{
//输出文件名
cout<<"file name list:"<<endl
while(_findnext( lf, &file)==0){
cout<<file.name<<endl //你需要写入到文件
}
}
_findclose(lf)
return 0
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)