资源描述
osgEarth学习笔记
这是个人在学习osgEarth时依照体会或从别地方看到做一种简朴整顿,有些东东就是官方文档翻译过来,都是依照自己需要感觉需要记录下来什么东西就随便记录下来了,也没有个条理,都是用到哪记到哪,别见怪。对个人在初期使用osgEarth时有诸多协助,因此特发上来,但愿对人们也有协助
osgEarth学习笔记
1. 通过earth文献创立图层时,可以指定各种影像数据源和各种高程数据源,数据源顺序决定渲染顺序,在earth文献中处在最前在渲染时处在最底层渲染;因此如果有高低精度不同影响数据或者高程数据,在创立earth文献时要将粗精度数据放在上方xml节点,高精度放在其下面节点;
2. osgEarth自带各种驱动器,不同驱动器驱动不同数据源,自己也可以扩展驱动器读取相应数据;
3. 可以通过profile属性指定数据投影方式或者数据分页方式以及地理空间延展;osgEarth通过profile创立数据四叉树,每个四叉树节点数据瓦片通过TileKey类来标示;一种地形数据能否正常工作要看创立它驱动器与否可以创立和相应profile兼容数据瓦片;例如,如果要生成地球数据,就需要指定global-geodetic 或者global-mercator profile,相应数据源要可以在这种profile下生成相应地形数据;
4.通过earth文献,最基本也是最重要功能是咱们可以指定生成地形坐标属性(地理坐标或投影坐标)影像数据、高程数据、矢量数据、模型数据、以及缓冲位置,通过这些基本要素就可以容易生成咱们想要地形;
5. osgEarth只能使用16或32位高程数据源;
6. 如果直接使用原始影像、高程以及矢量数据,可以用GDAL驱动器,在这种状况下需要注意几种性能问题。第一,将数据源预先进行坐标变换,变换为目的地形坐标,否则osgEarth会对源数据进行坐标投影变换,这将减少数据加载及解决速度。如果预先已经将数据源进行对的坐标变换,osgEarth就可以省略这个环节,从而提高其实时解决速度;第二,预先对影像数据进行瓦片解决,例如tiff格式影像数据,它是逐行扫描存储,而osgEarth是每次读取一种瓦片数据,如果预先对影像数据进行瓦片解决,在动态过程中osgEarth就不需要每次读取整个大块影像数据然后提取其需要瓦片数据,而可以直接读取相应瓦片数据即可,这样就大大提高了瓦片数据读取速度。可以通过gdal_translate工具对影像数据进行瓦片解决;第三,创立金字塔数据集可以使osgEarth读取数据更加高效,可以用gdaladdo工具创立金字塔数据集;总之,要想提高osgEarth解决效率,就要预先创立高效数据瓦片构造,除了用gdal、vpb等工具外,也可以通过osgEarth数据缓冲机制创立预解决瓦片数据集。例如咱们可以创立一种如下earth文献将数据缓冲到指定目录:
<map name="bluemarble" type="geocentric" version="2">
<!--Add a reference to the image -->
<image name="bluemarble" driver="gdal">
<url>c:/data/bluemarble.tif</url>
</image>
<options>
<!--Tell osgEarth to cache the tiles in a TMS format-->
<cache type="tms">
<path>c:/osgearth_cache</path>
<!--Tell osgEarth to cache the tiles to JPG to save disk space-->
<format>jpg</format>
</cache>
</options>
</map>
这种缓冲方式只能缓冲在执行该文献时浏览过地形数据,而不能自动缓冲所有数据,要想自动缓冲所有数据,就需要用到osgEarth自带一种工具,osgearth_seed,通过osgearth_seed --max-level 7 bluemarble.earth将数据所有缓冲到指定位置,通过这种方式缓冲后,咱们就拥有了一种完整TMS数据源,咱们可以直接通过文献目录方式访问该数据源,也可以将该数据源拷贝到咱们自己本地web服务目录下。详情见http://osgearth.org/wiki/DataPreparation。除此之外还可以用MapTiler以及TileCache工具创立瓦片数据源,用它创立瓦片数据源也可以直接在osgEarth下使用;
7. 可以通过两种方式将osgEarth集成到咱们自己osg应用程序中,第一种就是直接通过earth文献方式,直接将earth文献读入作为一种osg节点加入场景即可,此外一种方式就是通过osgEarthAPI。通过API方式大体需要如下几种环节:创立map对象——创立影像数据层——创立高程数据层——将影像数据层以及高程数据层加入到map对象——依照前面创立map对象创立mapNode节点——将mapNode节点加入到场景;示例见http://osgearth.org/wiki/DevelopersGuide。无论是通过earth文献创立地形还是通过API创立地形,咱们都可以在运营时对其进行修改,如果是用earth文献创立地形,需要先找到该earth文献相应mapNode,通过以上两种方式创立mapNode,咱们可以对地形进行修改操作,如添加新影像、高程数据,移除特定影像、高程数据,重新制定影像、高程数据顺序等;
8. 如果咱们地形用是地心坐标系,可以会遇到当相机距离地面非常近时候地形被裁减掉问题,要解决这个问题咱们可以通过设立相机远近裁剪比率或者创立AutoClipPlaneHandler来解决。AutoClipPlaneHandler可以动态监视相机,当相机距离地面很近时动态调节相机近裁减面;
9. 在地形上放置模型对象时可以使用ObjectPlacer类,通过该类可以直接通过经纬度坐标进行模型放置操作;
10. osgEarth目的是可以在osg中开发基于地理信息应用,可以以便地浏览地理模型数据,可以与开放原则地理数据兼容;osgEarth渲染地形模式分为两种:实时在线模式(直接使用原始数据渲染生成)以及离线模式(数据预解决成瓦片数据或地形数据库);
11. osgEarth使用于如下几种状况应用:迅速以便地运营地形地图数据;使用开放原则地形地图数据,如WMS、TMS、WCS等;通过Web服务方式集成本地存储地形地图数据;系统规定以瘦客户端方式运营;经常解决随着时间变化数据;集成商业数据;
12. 在使用osgEarth自带漫游器EarthManipulator时,如果给漫游器设立一种矩阵或者给漫游器设立一种TetherNode然后再解除,然后再移动相机位置,这时计算出Center会有一种跳跃,然后才正常,导致这个问题因素是给漫游器设立了参照节点(通过SetNode函数)导致,设立了参照节点后漫游器要依照参照节点重新计算Center和相机姿态等参数,在以上两种状况发生时,在重新计算Center时浮现了偏差,要想避免以上两种状况下导致移动异常,可以不让相机结合参照节点重新计算Center,即将Pan函数中recalculateCenter注释掉即可;
13. Map类型分为geocentric和projected两种类型,即地心方式和投影方式,要建立圆形地球就用geocentric类型,用这种类型如果要制定profile,只有geodetic(WGS84投影)和mercator(墨卡托投影)两种模式;
14. Earth文献详解:
<!—type 属性可以是geocentric和projected两种模式,分别相应地心坐标系和平面投影坐标系,默认是地心坐标模式。Version是osgEarth主版本号,必要有版本号-->
<map name=”myMap” type=”geocentric”/”projected” version=”2”>
<!—定义地图各图层运营时显示属性-->
<options>
<!—定义数据缓冲机制,缓冲类型有三种,tms、sqlite3以及tile cache,默认是tms,如果将cache_only设为true,osgEarth将只加载缓冲数据,不加载任何非缓冲数据,默认是false-->
<cache type=”tms”/”sqlite3”/”tilecache” cache_only=”false”>
<!—缓冲数据存储目的目录,合用于tms以及tilecache 两种类型,直接指定缓冲目录-->
<path>C:/myCache</path>
<!—缓冲数据存储目的文献,合用于sqlite3,指定数据库文献名-->
<path>C:/myCache.db</path>
<!—缓冲目的文献类型,合用于tms以及tilecache两种类型,如果没有指定类型,将默认用影像数据或高程数据类型-->
<format>jpg</format>
<!—tms类型,仅合用于tms类型,注意如果该类型是google,索引就是反-->
<tms_type>google</tms_type>
<!—缓冲文献最大值,单位是MB,不懂得该属性与否只是合用于sqlite3,有待拟定-->
<max_size>300</max_size>
</cache>
<!—坐标投影属性,该属性相称于渲染数据地理空间上下文,它决定了系统以哪种方式将世界坐标数据投影到屏幕像素。为了对的渲染影像数据以及高程数据,osgEarth需要懂得数据源profile以及渲染时profile以进行必要转换。-->
<profile name=”myProfile”>
<!—空间参照系统初始化字符串,该字符串值可以参照PROJ4或WKT,下面是用PROJ4定义WGS84投影 profile,srs以及作用范畴定义同样合用于平面投影模式-->
<srs>prog=latlong +ellps=WGS84 +datum=WGS84</srs>
<!—如果只想让该profile作用在某个区域,可以给其指定范畴-->
<xmin>-10.2</xmin>
<xmax>-10</xmax>
<ymin>20</ymin>
<ymax>30</ymax>
<!—由于WGS84比较知名,因此可以用下面简化方式代替上面定义-->
<profile>global-geodetic</profile>
<!—此外一种知名球体投影就是墨卡托投影(yahoo、google、微软、openstreetmap都是用这种投影方式),这种投影方式长处是可以在任何纬度或者预留区域对的地显示文本信息,可以用下面简化方式定义-->
<profile>global-mercator</profile>
<!—也可以不用简化方式,简化方式使用默认椭球体,也可以通过定义srs自己定义椭球体-->
<srs>+proj=latlong +a=6800000 +b=6800000</srs>
<!—定义垂直空间参照系统,相称于垂直高程大地基准-->
<vsrs>egm96-meters</vsrs>
</profile>
<!—定义地形引擎如何渲染影像数据和高程数据-->
<terrain>
<!—定义如何从上层高程数据采集当前层需要高程数据,例如如果影像数据可以分割到17层,而高程数据到7层,那么8-17层高程数据就需要从第7层去采集,下面属性就指定了以何种方式去采集相应高程值,一共有四种采集方式,分别是nearest(采集近来相邻点)、bilinear(双线插值)、average(平均值插值)、triangulate(依照相邻四个点插值)-->
<elevation_interpolation>nearest/bilinear/average/triangulate</elevation_interpolation>
<!—定义与否启动地形表面光照,默认是启动-->
<lighting>true</lighting>
<!—定义如何加载地形数据(数据加载方略),可以定义加载模式mode,分为standard(原则加载模式)、sequential(顺序加载模式)以及preemptive(优先级加载模式),默认是原则加载模式,preemptive加载模式不同于顺序加载模式,当需要加载最高档瓦片时需要从最低档开始逐级加载,而preemptive模式可以直接跳过中间级直接加载最高档,同步还可以设定不同数据加载优先级,例如可以设定优先加载影像数据而后加载高程数据等,这样可以在视觉上得到优化解决。此外还可以指定加载数据时每个CPU创立线程数量(loading_threads_per_core)或者加载数据使用总线程数量(loading_threads),以及编译地形数据即构建地形瓦片所使用线程数量(compile_threads),注意,加载数据时每个CPU创立线程数量和加载数据使用总线程数量不能同步指定,只能指定其中一种-->
<loading_policy mode=”preemptive” loading_threads_per_core=”3” compile_threads=”2” ></loading_policy>
<!—定义各种影像数据叠加时如何集成最后影像数据,一共有四种方式,分别是auto(自动)、multitexture(多重纹理)、texture_array(纹理数组)、multipass(多通道),默认是auto方式,这种方式是系统自动选取一种纹理组合办法,它一方面检测硬件所支持各种办法然后选取第一种。Multitexture方式会为每个影像层指定它自己影响纹理单元然后通过GPU进行组合,容许最大纹理层数量要受GPU限制,texture_array是使用一种二维纹理数组通过GPU进行组合,multipass方式是通过创立各种渲染通道进行纹理组合,这种方式没有纹理层数量限制,但会影像系统性能,由于它要给每个纹理层创立一种渲染通道-->
<compositor>auto/multitexture/texture_array/multipass</compositor>
<!—定义地形瓦片分割最大层数-->
<max_lod>10</max_lod>
<!—定义瓦片范畴系数,也就是瓦片Lod范畴最大值系数,系统默认是依照瓦片宽度与该系数相乘作为范畴最大值,该值默认是4,通过该系数可以对不同地形图层lod可见范畴进行控制以提高效率,特别是对于带有文本图层或者测绘标记图层,可以将该系数设小以大大提高系统渲染性能-->
<min_tile_range_factor>4.5</min_tile_range_factor>
<!—定义瓦片数据采样率,通过设定不同采样率以得到不同精细限度地形瓦片,默认是1.0,详情可参照osgTerrain-->
<sample_ratio>1.2</sample_ratio>
<!—定义地形瓦片边沿率,osgTerrain会在不同瓦片之间绘制边沿以防止不同瓦片之间浮现缝隙,该值默认是0.02,如果该值太小,在不同瓦片之间就也许会浮现缝隙,如果太大,也许会导致不必要渲染而影响系统渲染性能,对于高度变化比较大地形或者是做了高程夸张地形可以尽量将该值设大某些,以免浮现缝隙-->
<skirt_ratio>0.05</skirt_ratio>
<!—定义高程夸张系数,默认是1.0,也就是正常渲染高程真实高度-->
<vertical_scale>2.0</vertical_scale>
<!—定义边沿缓冲率,就是地形瓦片延展率,例如将地形做镶嵌或者重投影时为了可以精确覆盖到所有瓦片数据需要将瓦片范畴进行恰当放宽,如果设定0.2,放宽倍数就是1.02-->
<edge_buffer_ratio>0.02</edge_buffer_ratio>
</terrain>
<!—指定与否对整个map启用光照-->
<lighting>true</lighting>
</options>
<!—指定影像数据,在同一种map中imagename必须是唯一;在image下子要素,有些是公共,有些是针对特定driver。咱们可以给影像数据指定driver(驱动器),不同驱动器用于驱动不同影像数据源;可以指定cacheid(影像数据缓冲标记),一种影像缓冲标示相应特定缓冲目录或缓冲数据库文献,如果不指定,系统会依照驱动器创立默认缓冲标记;可以指定影像数据细分最小层数min_level以及最大层数max_level;可以指定可见范畴min_range以及max_range,该值是影像数据块距离相机距离(单位是米),当影像图层数据块不在该范畴内时图层将不显示,等同于lod节点可见范畴;可以指定该影像数据加载权重loading_weight,详情可见loading_policy,权重越大,加载优先级越高;可以指定影像瓦片数据黑名单文献名blacklist_filename,当系统祈求影像数据瓦片时,如果包括该瓦片影响文献不存在,系统就会把该祈求数据瓦片放入到一种黑名单中,这样可以避免再次祈求该无效数据,从而提高数据祈求效率。如果黑名单中没有任何记录,该黑名单就处在被禁用状态,也不会影像系统性能。-->
<image name=”myImage”>
<!—指定该影像数据使用profile,给该数据源指定profile后将覆盖map全局profile,默认状况下,影像驱动器会自动判断数据源应当使用profile,如果咱们觉得驱动器无法自动判断得到数据源profile时就要手动指定profile;-->
<profile>global_geodetic</profile>
<!—指定无数据页nodata_image,某些影像数据服务器,如果客户端祈求某些层上没有祈求相应影像数据,就会显示无数据提示,通过设定该属性可以让系统也显示无数据状态提示图片信息-->
<nodata_image>someURL</nodata_image>
<!—指定无数据信息图片透明背景色-->
<transparent_color>0 0 255 200</transparent_color>
<!—指定该图层与否启用数据缓冲,默认是启用-->
<cache_enabled>true</cache_enabled>
<!—指定缓冲数据文献格式,为该数据源指定缓冲格式后将覆盖该map全局缓冲格式,如果不指定,系统将默认使用源数据文献格式-->
<cache_format>png</cache_format>
<!—指定影像数据不透明度,默认是1.0,完全不透明,值越小越透明-->
<opacity>0.5</opacity>
<!—指定与否启用该图层,默认是启用-->
<enabled>true</enabled>
<!—指定该影像数据被分割时单个瓦片大小(像素宽、高)-->
<tile_size>40</tile_size>
<!—指定最大瓦片缓冲个数,指定该值是为了提高瓦片拼接效率,默认值是16-->
<l2_cache_size>20</l2_cache_size>
</image>
//特定驱动器属性设立,驱动器分为影像/高程驱动器、模型驱动器、特性驱动器、缓冲驱动器以及地形引擎驱动器5大类;
//影像/高程驱动器
<!—agglite驱动器,该驱动器将矢量数据栅格化为位图然后然后将其转换为地形瓦片纹理层-->
<image name=”myAggliteImage” driver=”agglite”>
<!—定义矢量特性(features)数据,矢量数据属性定义都要通过特性节点features来定义,矢量特性数据也要指定自己驱动器,它不直接创立矢量数据几何体,只是用来读取矢量数据,当前矢量数据驱动器重要是ogr及GDAL,支持矢量数据文献格式就是驱动器支持所有文献格式 -->
<features name=”myWorld” driver=”ogr”>
<!—指定矢量数据源位置-->
<url>../data/world.shp</url>
<!—指定读取数据源某一层,只有数据源包括各种层时才可用-->
<layer></layer>
<!—指定预解决几何体缓冲,所有矢量几何体都将作为面对象进行缓冲,相称于后台缓冲,通过预先在后台多解决一某些矢量数据,从而在显示区域发生变化时载入数据比较快,从而减少给视觉导致数据显示延迟-->
<buffer distance=”0.02”/>
<!—指定驱动器要驱动文献类型-->
<ogr_driver>ESRI Shapefile</ogr_driver>
</features>
<!—指定数据绘制风格,如颜色、透明度、纹理贴图等等,这种风格设立普通是用于矢量数据绘制,osgEarth可以通过两种方式定义风格,一种是CSS(重叠样式表),一种是SLD(通过xml指定样式,还在开发中),当给数据指定风格时,可以各整个数据层指定通过风格,也可以将数据分解成各种类class,然后给每个类指定不同风格(数据源需要可以分解成不同类)-->
<!—指定线风格,颜色、宽度、透明度-->
<style type="text/css">
element {
stroke:#FF0000;
stroke-width:2.0;
stroke-opacity:0.5;
}
</style>
<!—指定面风格-->
<style type="text/css">
element {
fill:#FF0000;
fill-opacity:0.5;
}
</style><!—分解成不同类分别设立不同风格,下面是依照frence变量进行类划分并设立不同风格-->
<features name="world" driver="ogr">
<url>data/world.shp</url>
<ogr_driver>ESRI Shapefile</ogr_driver>
</features>
<class name="french-speaking">
<query>
<expr> french="true" </expr>
</query>
<style type="text/css">
world {
fill:#FFFF00;
fill-opacity:0.5;
}
</style>
</class>
<class name="non-french-speaking">
<query>
<expr> french="false" </expr>
</query>
<style type="text/css">
world {
fill:#FF0000;
fill-opacity:0.5;
}
</style>
</class>
<!—指定绘制几何体类型,点、线、面-->
<geometry_type>line</geometry_type>
//ArcGIS驱动器,是从ESRI服务器读取影像数据
//复合驱动器 ,可以将各种影像数据源(可以使用各自不同驱动器)复合成一种逻辑图层,其实是一种伪装驱动器,不是真实驱动器
<image name="grouped layer" driver="composite">
<image name="component 1" driver="tms">
...
</image>
<image name="component 2" driver="wms">
...
</image>
...
</image>
//GDAL驱动器,使用该驱动器,指定源数据url时可以指定文献也可以指定某个目录(不必将所有文献都打包成一种文献),如果指定了目录,还可以指定要加载该目录下某些类型文献(通过指定扩展名),此外,如果指定是目录,系统递归遍历该目录下所有文献将要加载文献生成一种逻辑图层,需要注意是,该目录下所有数据必要是统一坐标系统以及同样波段和波段插值;基于性能考虑,最佳对源数据预先进行分块分级解决以及坐标重投影预解决,这样可以大大提高系统在运营时性能。如果系统读取到源数据与运营时规定投影方式不匹配,系统就会在运营时对数据进行重投影,这样就会减少系统性能,如果想在这种状况下提高系统性能,可以让系统缓存重投影后数据:
<cache reproject_before_caching="true">
<path>/files/my_cache_folder</path>
</cache>
<image name="boston_inset" driver="gdal">
<url>../data/boston-inset.tif</url>
<tile_size>256</tile_size>
</image>
//通过指定目录方式加载高程数据示例:
<heightfield name="terrain" driver = "gdal">
<!--To load the files in a directory,just point the URL to a directory instead of a file-->
<url>..\data\terrain</url>
<!--Tell the GDAL driver to just look for tifs. Other files types will be ignored.-->
<extensions>tif</extensions>
<!—对于高程数据,最佳将tile_size设立为32或者64,默认状况下tile_size值是256-->
<tile_size>32</tile_size>
</heightfield>
<!—指定数据分层最大层数,如果不指定,系统将自动计算最大层数,这种方式特别合用于缓存自动计算瓦片数据时-->
<max_data_level>10</max_data_level>
//osg驱动器,直接通过osg文献读写插件读取相应类型影响数据或高程数据
//tilecache驱动器,读取tilecache磁盘缓存数据,通过tilecache工具可以从WMS服务器创立或缓存地图数据到磁盘,然后通过该驱动器进行离线读取。
<image name="world" driver="tilecache">
<url>F:/data/tilecache/mapdata</url>
<layer>world</layer>
<format>jpeg</format>
</image>
//tileservice驱动器,从NASA服务器读取数据
//tms驱动器,通过tms服务方式读取数据
//wms驱动器,通过wms服务方式读取数据
//VPB驱动器,从vpb生成地形数据库读取相应影像和高程数据,注意,osgEarth只能读取合用VPB使用—terrain选项创立地形数据库。这样一来咱们就可以同步使用vpb地形数据库以及原始影像、高程数据,可以在不变化既有vpb地形数据基本上在已有vpb地形上叠加此外影像数据。
<!—指定在用vpb生成地形数据库时(--splits选项)使用主分割层-->
<primary_split_level>5</primary_split_level>
<!—指定在用vpb生成地形数据库时使用次分割层-->
<secondary_split_level>11</secondary_split_level>
<!—指定vpb地形数据使用profile-->
<profile>global-geodetic</profile>
<!—指定vpb地形数据库使用目录构造,分为nested,task,以及 flat三种类型. 默认是 flat类型 -->
<!—指定使用vpb中影像数据层layer,默认是第0层-->
<layer>0</layer>
//模型驱动器
// feature_geom驱动器,该驱动器就是将矢量数据创立成几何对象进行渲染
<!—定义特性数据-->
<features></features>
<!—定义风格-->
<style></style>
<!—定义分类(为不同分类指定不同风格)-->
<class></class>
<!—定义高度偏移,生成几何体前将数据相对海平面偏移特定高度重要是为理解决z-fighting问题-->
<height_offset>10000</height_offset>
<!—指定生成最大三角形大小(三角形边最大长度,单位是度,仅用于地心坐标地形上),通过控制三角形大小可以较好将非凸多边形构成三角形映射成椭球体,默认值是5.0-->
//feature_overlay驱动器,该驱动器采用osgSim::OverlayNode将矢量数据作为投影纹理覆盖到地形上。这种覆盖节点方式对于平面投影坐标模式是很适合,但对于球体地心坐标来说有一定限制,通过覆盖节点方式将矢量数据投影成纹理只能覆盖不到一半地球大小,并且在背面会显示穿透效果。
<features></features>
<!—定义风格-->
<style></style>
<!—定义分类(为不同分类指定不同风格)-->
<class></class>
<!—指定纹理单元,默认是auto-->
<texture_unit>1</texture_unit>
<!—指定覆盖纹理大小,默认是1024-->
<texture_size>2048</texture_size>
<!—指定覆盖节点基准高度,默认是0-->
<base_height>100</base_height>
//feature_stencil驱动器,该驱动器采用模板缓冲技术将矢量数据覆盖到地形上
<features></features>
<!—定义风格-->
<style></style>
<!—定义分类(为不同分类指定不同风格)-->
<class></class>
<!—指定挤压距离,即在模板体各个方向对其进行挤压,这是为了防止对于那些覆盖范畴比较大几何体容易导致z-fighting问题而做解决,如果存在单个特性数据几何体覆盖区域范畴特别大,就要增长该值,默认值是300000-->
<extrusion_distance>400000</extrusion_distance>
<!—定义高程数据,高程数据定义属性以及子要素基本与影像数据相似,特别需要注意是,在定义瓦片大小时,默认值是256,这个值对于影像数据是适当,但对于高程数据来说太大,应当将其设为比较小值,例如32,否则会减少系统性能-->
<elevation name="srtm" driver="wms">
<url>http://localhost/cgi-bin/mapserv.exe?map=srtm30_plus.map</url>
<layers>srtm30plus</layers>
<format>tiff</format>
<tile_size>32</tile_size>
</elevation>
<!—定义模型数据,属性涉及名称、驱动器driver、最小可视范畴值min_range(层次节点LOD范畴)、最大可视范畴值max_range、与否以覆盖方式覆盖到地形上overlay,对于指定可视范畴值,如果指定了gridding,该范畴将作用于被分割一种个网格而不是模型几何体自身-->
<model name="roads" driver="feature_stencil">
<features name="roads" driver="ogr">
<url>../data/roads-utm.shp</url>
</features>
<!—指定网格划分,模型数据源容许咱们将非地形数据图层添加到地形地形图上,某些驱动器可以将矢量数据或者特性数据转换为几何体或者覆盖层,对于海量特性数据或者覆盖区域范畴特别大数据如果不对其进行优化解决,将严重影响系统性能,其中方式之一就是对其进行网格划分,对于不同驱动器,网格划分实现方式也不同样,自带模型特性数据驱动器,例如feature_stencil和feature_geom驱动器就可以将几何体数据划分为一种个小网格-->
<!—指定一种单元格最大值cell_size,涉及宽和高;指定裁切技术,即如何决定某些数据属于哪个单元格,共有两种方式:crop切割方式以及centroid形心方式,crop切割方式是将几何体依照格网进行切割,不同某些分别属于不同网格即可,centroid形心方式是判断几何体形心,形心落在哪个网格,就以为该几何体属于哪个网格-->
<gridding cell_size="1000" culling_technique="crop"/>
<style type="text/css">
roads {
stroke:#ffff00;
stroke-width:10;
}
</style>
<!—指定几何体类型-->
<geometry_type>line</geometry_type>
</model>
<!—指定overl
展开阅读全文