GML到SVG的转换

尽管GML适用于地理信息交换和共享,但它并不是为图像显示而设计的,所以GML文档是无法以图像的形式显示给用户的。要将地理时空信息发布出去,就要将GML文档转换为合适的图像格式文件。此数据发布组件采用SVG作为系统的地理信息发布格式,因此需要将GML文档转换为SVG文档。

GML文档向SVG文档转换,是通过将编写好的样式表(XSL)和GML源文件,传递给XSLT处理器进行执行实现的。用户查询是变化的,相应的GML文档也是变化的,则GML文档向SVG文档转化时所用的样式表也是变化的,所以样式表应该动态生成。因此,在中介器上有一个元数据数据库,每一个元数据对应一个样式表,如元数据LineString对应一个名为LineString.xsl的样式表。当GML文档向SVG转化时,先对GML文档进行遍历,将出现的元数据所对应的样式表集成,生成一个新的样式表,根据这个样式表将GML文档转化为SVG图像,再将SVG图像返回给用户。

创建样式表,最主要的问题就是如何定义模板。根据源文档的结构,在样式表中寻找匹配的模板片断,进行相应的转换。

下面是XSL样式表文件中如何将点元素进行转换的代码片断。

<xsl:param name="pointWidth" select="5" />

<xsl:template match="gml:pointMember/gml:Point | gml:pointProperty/ gml:Point">

  <xsl:variable name="x0" select="gml:coord/gml:X" />

  <xsl:variable name="y0" select="gml:coord/gml:Y" />

  <xsl:element name="circle">

    <xsl:attribute name="cx">

      <xsl:value-of select="$x0" />

    </xsl:attribute>

    <xsl:attribute name="cy">

      <xsl:value-of select="$y0" />

    </xsl:attribute>

    <xsl:attribute name="r">

       <xsl:value-of select="$pointWidth" />

    </xsl:attribute>

  </xsl:element>

</xsl:template>

这里首先定义了pointWidth,将其定义为5GML中有point元素,而在SVG中没有point元素,所以在这里我们用5个象素的circle来代替point。可以看到,程序首先找到Point节点,将其坐标XY值读入变量x0y0中;然后输出一个上下文节点元素circle,并设置其属性cx的值为变量x0的值,设置其属性cy的值为变量y0的值,设置其属性r的值为pointWidth的值。通过此段XSL片断,就可以将GML规范中的point转换为SVG规范文档中的circle。其它的类似。GML元素到SVG元素的对应关系如下表所示:

GML元素

SVG元素

Point

circle

MultiPoint

grouped circles

LineString

polyline

MultiLineString

grouped polylines

Polygon

path

MultiPolygon

grouped paths

GML元素转换到SVG元素的对应关系

    这里只是一个最简单的说明转换过程的例子,如何将GML文档完善的转换为SVG文档,需要考虑的问题还非常的多。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cesium是一个用于可视化地理空间数据的JavaScript库,它支持加载各种地理数据格式,包括GML(Geography Markup Language)。要在Cesium中加载GML数据,您可以按照以下步骤进行操作: 1. 将GML文件转换为CZML(Cesium Language)格式。CZML是Cesium库使用的一种JSON格式,可以表示地理空间数据和时间的变化。您可以使用工具或脚本将GML文件转换为CZML。例如,可以使用开源的GDAL库或FME软件来执行此转换。 2. 在您的Web应用程序中引入Cesium库。您可以从Cesium官方网站(https://cesium.com/)下载Cesium库文件,并将其包含在您的HTML页面中。 3. 创建一个Cesium的Viewer实例,并将其关联到一个HTML元素上,以便在其中显示地理数据。 4. 使用Cesium的DataSource加载CZML文件,并将其添加到Viewer中进行显示。您可以使用Cesium的CzmlDataSource类来加载并解析CZML数据。例如,您可以使用以下代码加载CZML数据: ```javascript var viewer = new Cesium.Viewer('cesiumContainer'); // 'cesiumContainer'是HTML元素的ID var dataSourcePromise = Cesium.CzmlDataSource.load('path/to/your.czml'); dataSourcePromise.then(function(dataSource) { viewer.dataSources.add(dataSource); viewer.zoomTo(dataSource); }).otherwise(function(error) { console.log(error); }); ``` 请确保将'path/to/your.czml'替换为您的CZML文件的实际路径。 这样就可以加载并显示GML数据在Cesium的地球模型上了。您可以根据需要进行样式和交互的定制。希望这对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值