最近在尝试给小地球添加一些标签,比如指示城市名,但是一直添加失败。
1 不显示的原因
后来发现,原来不是我添加失败,而是在添加标签的时候,如果不指定填充色和轮廓颜色,默认是白色,好巧不巧的,我添加标签的位置是白色背景,所以一直看不到,所以其实标签添加成功了,只是因为颜色的缘故,看不见罢了。
2正确添加标签的方法
在osgEarth2.10.2中正确添加标签的方法如下:
osg::ref_ptr<osg::Group> mRoot = new osg::Group(); //智能指针方式
osg::ref_ptr<osg::Group> cityLabels = new osg::Group;
mRoot.get()->addChild(cityLabels);
//添加的标签如果需要指定其在地球的位置,则需要指定其使用的空间参考系
osgEarth::SpatialReference* wgs84= osgEarth::SpatialReference::get("wgs84");
//添加的标签内容
QString mName="宜宾";
//根据上述的空间参考系,及该点在参考系中的位置,如经纬度坐标,创建地理坐标点
osgEarth::GeoPoint point(wgs84,104.643486,28.764088);
//如果想要添加一个图标,可以如此添加
osg::Image * china = osgDB::readImageFile("/media/ybw/SSD/OSG_DATA/MAIN_DATA/icon/27.png");
//修改标签内容的风格,这步有时候还挺重要的,比如白底图的时候,不指定的话,就都是白色,就看不着了
osgEarth::Style style;
osgEarth::Symbology::TextSymbol * textStyle = style.getOrCreateSymbol<osgEarth::Symbology::TextSymbol>();
textStyle->fill()=osgEarth::Symbology::Color(osg::Vec4f(1.0,0.0,0.0,0.5));//字体内部填充色
textStyle->halo()=osgEarth::Symbology::Color(osg::Vec4f(1.0,1.0,0.0,1.0));//字体外部轮廓色
textStyle->size()=10.0; //字体大小
textStyle->pixelOffset()=osg::Vec2s(1,1.0); //标签相对于指定位置的偏移量
//在指定位置,放置创建一个标签
osg::ref_ptr<osgEarth::Annotation::PlaceNode> pn = new osgEarth::Annotation::PlaceNode(point,mName.toStdString(),style,china);
cityLabels.get()->addChild(pn);