osgEarth加载中文路径文件与文件名TMS服务

  最近在做osgEarth加载中文名字和路径的问题,参考了很多前辈的方法,终于搞定了 ,在这里自己做一个总结

1.首先要明白字节编码基本东西

2.明白osg加载数据的插件方式

具体可以参考:http://blog.csdn.net/cccstudyer/article/details/21969261


我也是参考这篇博客知道osg里面已经自带了字节转换的功能在osgDB/convertUTF,里面有把当前编码转化为UTF8和UTF16的函数。

首先按照上文博客所说,修改osgDB 的读入流文件 fstream.cpp 

#ifdef OSG_USE_UTF8_FILENAME
#define OSGDB_CONVERT_UTF8_FILENAME(s) convertUTF8toUTF16(s).c_str()
#else
#define OSGDB_CONVERT_UTF8_FILENAME(s) convertUTF8toUTF16(convertStringFromCurrentCodePageToUTF8(s)).c_str()
#endif

修改这个是不是就可以在osgEarth中可以加载含有中文路径的.earth文件呢,答案是的。但是还是不能加载TMS路径的中文服务。

你还需要在TMS.CPP中找到read入口,把osgDB::Options中获取url进行转码,对其转码有两种方式:

1.直接在url入口处进行转码,在tms的插件中有个TMSOptions 把原来return _url 进行转码到UTF8 修改为renturn convertStringFromCurrentCodePageToUTF8(_url->full());   这种方法可以解决直接加载中文的TMS服务问题。


但是对于如何加载在earth文件中的中文的TMS并不能解决,因为earth文件中的TMS服务URL并没有执行这段代码,其是从osgDB::Options中获取得到的 因此要想根本解决这个问题需要在TMS.cpp文件读取中进行修改

osgDB::convertStringFromCurrentCodePageToUTF8(location);



把图中的location进行转码,然后你就可以用中文路径earth文件加载中文的TMS服务了。

注意:本人研究C++功底薄弱,还望大家见谅,希望可以给需要的人提供一些思路


你可能感兴趣的:(osg/osgEarth)