前言
osgVerse实现了一种轻量级的地球可视化方案。该方案通过实现TMS(Tile Map Service)插件,采用动态LOD(Level of Detail)层级构建技术,构建地球瓦片系统。与osgEarth相比,osgVerse实现地球可视化的区别在于:1)完全基于OSG的插件体系构建地球瓦片系统;2)未像osgEarth一样对着色器进行封装而自成一套系统;3)完全采用DatabasePager来实现瓦片的调度。本章将重点解析osgVerse基于OSG插件机制实现地球瓦片系统的动态构建逻辑。
目录
- 1 在osgverse中显示地球
- 2 tms插件实现地球瓦片系统的动态构建
1 osgverse中显示地球
命令如下:
.\osgviewer.exe 0-0-0.verse_tms -O "URL=https://webst01.is.autonavi.com/appmaptile?style%3d6&x%3d{x}&y%3d{y}&z%3d{z} UseWebMercator=1 UseEarth3D=1"

2 tms插件实现地球瓦片系统的动态构建
virtual ReadResult readNode(const std::string& path, const Options* options) const
{
std::string fileName(path);
std::string ext = osgDB::getLowerCaseFileExtension(path);
if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED;
bool usePseudo = (ext == "verse_tms");
if (usePseudo)
{
fileName = osgDB::getNameLessExtension(path);
ext = osgDB::getLowerCaseFileExtension(fileName);
}
std::vector<std::string> values; osgDB::split(fileName, values, '-');
if (options && values.size() > 2)
{
int x = atoi(values[0].c_str()) * 2, y = atoi(values[1].c_str()) * 2,
z = (values[2] == "x") ? 0 : atoi(values[2].c_str()) + 1, countY = 2;
std::string pseudoAddr = options->getPluginStringData("URL"); bool changed = true;
while (changed) pseudoAddr = replace(pseudoAddr, "%3d", "=", changed);
osg::Vec3d extentMin = osg::Vec3d(-180.0, -90.0, 0.0), extentMax = osg::Vec3d(180.0, 90.0, 0.0);
std::string strX = options->getPluginStringData("FlatExtentMinX"),
strY = options->getPluginStringData("FlatExtentMinY");
if (!strX.empty()) extentMin[0] = atof(strX.c_str()); if (!strY.empty()) extentMin[1] = atof(st

最低0.47元/天 解锁文章
3773

被折叠的 条评论
为什么被折叠?



