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

本文总结了解决osgEarth加载中文路径文件和TMS服务的方法,包括理解字节编码、osg加载数据的插件机制,以及在osgDB的fstream.cpp和TMS.cpp中进行的代码修改,以支持中文路径的.earth文件和TMS服务。
摘要由CSDN通过智能技术生成

  最近在做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 修

### 回答1: osgEarth是一个强大的地理信息系统开发工具包,可以用来加载和显示地理信息数据。TMS(Tile Map Service)是一种常见的地图切片服务,可以提供已切片的地图数据。 要使用osgEarth加载TMS,首先需要创建一个osgEarth的地图图层。可以使用osgEarth::Drivers::TMSOptions类来设置TMS服务的参数,如图层的名称、URL地址、图片格式等。然后,使用osgEarth::Map类将该地图图层添加到osgEarth的地图中。 接下来,可以通过osgEarth::Viewer类来创建一个osgViewer::Viewer并显示地图。使用osgEarth::MapNode类,可以将osgEarth的地图节点添加到场景图中。最后,运行osgViewer::Viewer的run方法,可以显示地图在窗口中。 在osgEarth中,TMS服务可能需要传递一些TMS的参数,如级别、行列号等,这取决于TMS服务的实现方式。osgEarth提供了诸如osgEarth::TileKey类来处理这些参数,并根据当前视角动态加载并显示地图切片。此外,osgEarth还提供了一些控制类,例如osgEarth::Util::EarthManipulator,可以用来控制场景的漫游和交互。 通过以上步骤,我们可以使用osgEarth加载TMS服务提供的地图切片数据,并显示在osgViewer中。除了TMSosgEarth还支持多种其他地图数据格式和服务,如WMS(Web Map Service)、WMTS(Web Map Tile Service)等,这使得osgEarth成为一个功能丰富的地理信息可视化工具。 ### 回答2: osgEarth是一个基于开源地理空间数据处理引擎OpenSceneGraph的软件库,它可以用来加载和渲染地理空间数据。在osgEarth加载TMS(Tile Map Service)数据源需要以下几个步骤: 1. 配置TMS地图服务:首先需要在osgEarth配置文件中添加TMS地图服务配置信息。可以指定TMS服务的名称、URL地址、图层名称等信息。 2. 创建地图图层:在osgEarth中,使用osg::ImageLayer类来创建地图图层。可以通过设置图层的名称、URL、TMS图层的名称等参数来创建TMS图层。 3. 配置地图视景:通过osgEarth配置文件配置地图视景,指定地图视图的范围、投影方式等参数。可以设置地图的中心点坐标、缩放级别等信息。 4. 加载地图数据:使用osgEarth的MapNode类来加载地图数据。可以通过调用MapNode类的load方法来加载创建的TMS图层。 5. 显示地图数据:在osgEarth中,通过osgGA::TerrainManipulator类来操作地图视景,可以通过鼠标或键盘控制地图的漫游、平移、缩放等操作。通过将MapNode添加到osgEarth视景图中,就可以显示加载TMS地图数据。 通过上述步骤,就可以实现在osgEarth加载TMS地图数据源。osgEarth提供了丰富的功能和灵活的配置选项,可以根据需要加载和渲染不同类型的地理空间数据。同时,osgEarth还支持多种地图服务标准,如WMS、WMTS等,可以根据实际需求选择合适的数据源。 ### 回答3: osgEarth是一个开源的地球可视化引擎,可以用于加载和渲染地理空间数据。TMS(Tiled Map Service)是一种常用的地图切片服务,通过将地图划分为多个小块来提高地图加载的效率。 要在osgEarth加载TMS数据,首先要创建一个osgEarth::TileSource对象。这个对象是用于加载和管理地图切片数据的接口。可以使用osgEarth::Drivers::TMSOptions类来设置和配置TMS数据源。 具体的加载过程可以分为以下几个步骤: 1. 创建一个osgEarth::TileSourceOptions对象,并设置相应的参数,包括TMS的URL地址、瓦片格式、地图范围等。 2. 使用该选项对象创建一个osgEarth::TileSource对象,这里可以使用osgEarth::Drivers::TMSOptions类的createTileSource方法来实现。 3. 创建一个osgEarth::CachedTileSource对象,用于缓存加载的地图切片数据,提高加载效率。 4. 将上面创建的CachedTileSource对象添加到osgEarth::Map对象中。 5. 使用osgEarth::MapNode对象来渲染地图数据,可以将其添加到osg::Group对象中进行显示。 最后,运行osgViewer来显示渲染后的地图。 这样,osgEarth就可以加载并渲染TMS数据了。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值