zoukankan      html  css  js  c++  java
  • [原][译]从osgEarth2升级到osgEarth3的变化

    本文由南水之源翻译OE官方文档

    Upgrading from osgEarth 2.x to osgEarth 3.x

    OsgEarth 3.x的目标是使SDK更容易用于开发人员

    既是两种使用OE的人都更方便:

    1.通过API开发者

    2.通过使用earth files脚本编写地球模块的使用者

    (注:之前OE更适合 创建  xxx.earth 文件脚本修改地球环境)

    OE3.x的主要目标是:

    • 将一切都视为一个“层”,这样Map就可以成为几乎所有数据的容器。
    • 使所有图层类型更加明确,并减少对使用插件的依赖。
    • 通过避免“选项”结构模式,来简化添加“层”的API。
    • 简化创建新的或自定义层类型的方法。

    地球文件更改

    按照向下播放插件层类型的想法,地球文件中的层现在是显式的。对于2.x中的GDAL层,应该有这样的内容:

    <image name="My Layer" driver="gdal">
        <url>file.tif</url>
    </image>

    在3.x中,层类型是显式的,如下所示:

    <GDALImage name="My Layer">
        <url>file.tif</url>
    </GDALImage>

    图像和高程层类型仍然是分开的,并且使用显式类型是很好的。3.xGDAL海拔层如下所示:

    <GDALElevation name="My DEM">
        <url>dem.tif</url>
    </GDALElevation>

    下面是将旧设置映射到新的3.x格式的部分表:

    2.x3.x
    <image driver="gdal"> <GDALImage>
    <elevation driver="gdal"> <GDALElevation>
    <image driver="tms"> <TMSImage>
    <elevation driver="tms"> <TMSElevation>
    <image driver="xyz"> <XYZImage>
    <elevation driver="xyz"> <XYZElevation>
    <image driver="wms"> <WMSImage>

    复合层

    2.x中的复合层在图像或提升层中使用“复合”驱动程序。在3.x中有一个新的头等舱CompositeImageCompositeElevation类型。以下是一个例子:

    <Map>
        <CompositeImage name="combined">
            <layers>
                <TMSImage>
                    <url>http://readymap.org/readymap/tiles/1.0.0/7/</url>
                </TMSImage>
                <GDALImage>
                    <url>locallInset.tif</url>
                </GDALImage>
            </layers>
        </CompositeImage>
    </Map>

    特征源

    特性层(包含特征数据的层)对于3.x并不是新的,但它们也是显式的,就像上面的可见层类型一样。例如,在osgEarth 2.x中,您可以定义一个简单的特性层,如下所示:

    <feature_model name="states">
        <features name="states" driver="ogr">
            <url>../data/usa.shp</url>
        </features>        
        <styles>
            <style type="text/css">
                states {
                   stroke: #ffff00;
                }                    
            </style>
        </styles>        
    </feature_model>

    在osgEarth 3.x中,定义(使用嵌入式特性源)如下所示:

    <FeatureModel name="US States">
        <OGRFeatures name="US-Data">
            <url>../data/usa.shp</url>
        </OGRFeatures>
        <styles>
            <style type="text/css">
                states {
                   stroke:#ffff00;
                }                    
            </style>
        </styles>        
    </FeatureModel>

    或者,您可以将您的功能数据定义为一个单独的层并引用它。这样,多个可见层可以使用相同的特性源:

    <OGRFeatures name="data:states">
        <url>../data/usa.shp</url>
    </OGRFeatures>
    
    <FeatureModel name="US States" features="data:states">
        <styles>
            <style type="text/css">
                states {
                   stroke: #ffff00;
                }                    
            </style>
        </styles>        
    </FeatureModel>

    现在,即使是样式表也可以是一个单独的层。您可以重写上面相同的内容:

    <OGRFeatures name="data:states">
        <url>../data/usa.shp</url>
    </OGRFeatures>
    
    <Styles name="data:styles">
        <style type="text/css">
            states {
               stroke: #ffff00;
            }                    
        </style>
    </Styles>  
    
    <FeatureModel name="US States" features="data:states" styles="data:styles">         
    </FeatureModel>

    API变化

    在2.x中,通过创建“选项”结构并将其传递给新层的构造函数,创建了映射层(和其他各种东西)。在3.x中,您不再需要这样做;您只需创建一个新层并调用其setter函数即可。

    下面是在osgEarth 2.x中创建WMS映像层的示例:

    #include <osgEarthDrivers/wms/WMSOptions>
    ...
    WMSOptions wms;
    wms.url() = "http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi";
    wms.format() = "png";
    wms.layers() = "nexrad-n0r";
    wms.srs() = "EPSG:4326";
    wms.transparent() = true;
    
    ImageLayerOptions wmsLayerOptions("WMS NEXRAD", wms);
    wmsLayerOptions.cachePolicy() = CachePolicy::NO_CACHE;
    
    ImageLayer* layer = new ImageLayer(wmsLayerOptions);
    map->addLayer(layer);

    在3.x中,API更直观,没有任何中间结构:

    #include <osgEarth/WMS>
    ...
    WMSImageLayer* wms = new WMSImageLayer();
    wms->setURL("http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi");
    wms->setFormat("png");
    wms->setLayers("nexrad-n0r");
    wms->setSRS("EPSG:4326");
    wms->setTransparent(true);
    wms->options().cachePolicy() = CachePolicy::NO_CACHE;
    map->addLayer(wms);

    对所有层类型遵循相同的模式。见osgearth_map.cpp举几个例子。

  • 相关阅读:
    MyBatis 框架系列之基础初识
    从零开始实现在线直播
    面试中关于Redis的问题看这篇就够了
    Spring Boot 中使用 MyBatis 整合 Druid 多数据源
    MyBatis的foreach语句详解
    小结:“服务器端跳转”和“客户端跳转”的区别
    Centos7.3安装vsftp服务
    Spring 注解@Value详解
    Spring中@Bean与@Configuration
    数据结构之LinkList
  • 原文地址:https://www.cnblogs.com/lyggqm/p/14340552.html
Copyright © 2011-2022 走看看