OsgGIS 项目解析

OsgGIS的project其实就是一个指令集.执行该指令集就可以从要素和栅格数据中编译出OSG的3D几何体.(对于开发者而言,意味着使用osgGISProjects::Project类).可以通过xml文件定义整个project 然后使用osggis_build命令行工具来编译.

      本文对project所使用的xml定义文件做基本的解释.

项目文件:

      有两种方式都可以创建一个项目:通过编程或者通过xml文件.我们选择使用xml文件作为project文件的框架是因为:1)xml便于人们阅读和理解2)很多人都很熟悉xml文件的语法格式3)已经存在大量的工具来读写和装换xml数据.

     project文件类似于Makefile,它定义了一些列的构建目标和规则.下面是一个基本的project文件:

    view plaincopy to clipboardprint?
<?xml version="1.0" ?> 
<project name="sample"> 
 
    <!-- A layer is a primary build target: --> 
    <layer name="roads" source="roads" target="out/roads.ive"> 
        <slice min_range="0" max_range="1e6" graph="roads"/> 
    </layer> 
 
    <!-- A source references a vector GIS source layer: --> 
    <source name="roads"> 
        <uri>source/roads.shp</uri> 
    </source> 
 
    <!-- A filter graph defines the assembly pipeline for turning features into 3D geometry: --> 
    <graph name="roads"> 
        <filter type="Transform"> 
            <property name="localize" value="true"/> 
        </filter> 
        <filter type="BuildGeom"> 
            <property name="color" value="vec4(1,.6,.4,1)"/> 
        </filter> 
        <filter type="Collect"/> 
        <filter type="BuildNodes"/> 
    </graph> 
 
</project> 
<?xml version="1.0" ?>
<project name="sample">

    <!-- A layer is a primary build target: -->
    <layer name="roads" source="roads" target="out/roads.ive">
        <slice min_range="0" max_range="1e6" graph="roads"/>
    </layer>

    <!-- A source references a vector GIS source layer: -->
    <source name="roads">
        <uri>source/roads.shp</uri>
    </source>

    <!-- A filter graph defines the assembly pipeline for turning features into 3D geometry: -->
    <graph name="roads">
        <filter type="Transform">
            <property name="localize" value="true"/>
        </filter>
        <filter type="BuildGeom">
            <property name="color" value="vec4(1,.6,.4,1)"/>
        </filter>
        <filter type="Collect"/>
        <filter type="BuildNodes"/>
    </graph>

</project>
 

所有的元素都定义在<project>下.其中<layer> <source>和<graph>分别定义了project中的不同的组件.下面我们来一一说明.

 语法规则

  下面是project文件中的一些语法规则:

   1.次序性:元素在xml文件中出现的次序是不重要的。有更多元素通过name来引用其他元素.被引用的元素在xml文件中的位置是不重要的.

   2.独特性:元素的name只要求在相同元素类型的所有元素中唯一.例如:每一个source元素的名字应该是所有的source中是唯一的.一个source和一个layer同名是可以的。

   3.路径分割符:在所有平台上,路径分隔符都是前斜线("/").

   4.属性名称:在属性名称中连字符(-)和下划线(_)是被认为是同一个字符.也就是说,use-terrain-srs和user_terrain_srs是同一个名称.

包含文件(include file)

   project文件有可能会很巨大而且很复杂,比如:

   1.需要编译好几十个图层

   2.同一组数据源(datasource)需要在不同的项目中共享

   3.同一组资源文件需要在不同的项目中共享

   可以通过include元素来合并project文件.被include的文件自己本身也需要有project元素.

   下面是范例代码:

   view plaincopy to clipboardprint?
<project name="sample"> 
 
    <include>data/source.xml</include> 
    <include>resources.xml</include> 
 
    ...  
</project> 
<project name="sample">

    <include>data/source.xml</include>
    <include>resources.xml</include>

    ...
</project>
 

include元素可以在文档中的任何位置出现,和其它元素一样,其位置不构成任何影响.

路径和URI(Paths and URIs)

  许多元素都会引用外部文件,例如数据文件或者其他需要include的项目文件.文件的路径可以是绝对路径也可以是相对路径。如果是相对路径,那么相对是指相对于包含此引用的项目文件自身的路径.(应该是指直接包含) 下面是范例代码:

view plaincopy to clipboardprint?
...  
    <source name="trees"> 
        <uri>c:/data/trees.shp</uri> 
    </source>     
 
    <source name="roads"> 
        <uri>source_data/roads.shp</uri> 
    </source> 
    ... 
...
    <source name="trees">
        <uri>c:/data/trees.shp</uri>
    </source>  

    <source name="roads">
        <uri>source_data/roads.shp</uri>
    </source>
    ...
 

在树元素(name="trees")中uri引用了一个绝对路径.而在道路元素(name="roads")中,uri引用了一个相对路径。这个相对路径是相对于包含此source界面的项目文件的位置的.


Project Elements
下面是project文件中的主要元素
<project> - 顶级元素
<layer> - 编译一个图层的起点
<graph> -将图层组合为场景图的管道
<source> - 引用矢量数据源
<terrain> - 引用地形数据源
<resource> - 引用外部的纹理、模型或者其他资源
<include>? - 引用外部文件
<script>? - 嵌入式的Lua代码
<map> - 运行时地图定义


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhuliangxiong/archive/2009/04/21/4096240.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值