MS RFC 58:kml输出

日期

2009/03/01

作者

dvaid假名(gmail.com上的david.kana)

作者

thomas.bonfort(gmail.com的thomas.bonfort)

作者

Yewondwossen Assefa(加州dmsolutions.ca的Yassefa)

作者

迈克尔·史密斯(美国陆军司令部的迈克尔·史密斯)

状态

规划

版本

MAPServer 6

目的

此RFC的目的是为MapServer 6.0提供一个kml输出。最初的工作是由DavidKana在2009年谷歌代码之夏完成的。

该项目的主要任务是实现用于生成主要由GoogleEarth应用程序使用的kml输出的kml驱动程序。KML渲染代码基于MS RFC 54中描述的新渲染器API。

第一个意图是使用谷歌提供的原始kml库libkml,但由于其复杂性,已经包含在mapserver中的libxml2被选择用于XML生成。

一般功能

一般的想法是提供一种输出格式,可以在地图级别设置,并允许从地图服务器 Mapfile 生成kml或kmz输出。可以使用mapserver cgi(示例模式=map)或通过wms请求生成输出。

输出格式

输出格式的默认名称为kml,此名称可用于在映射文件中设置imagetype参数。

格式也可以在映射文件中定义:

OUTPUTFORMAT
  NAME kml
  DRIVER "KML"
  MIMETYPE "application/vnd.google-earth.kml+xml"
  IMAGEMODE RGB
  EXTENSION "kml"
  FORMATOPTION 'ATTACHMENT=gmap75.kml'  #name of kml file returned
END

也将通过MiniZip库支持kmz输出。

构建

  • 在Windows上:nmake.opt中有一个标志kml

  • 在Linux上:--使用kml

  • 开罗和Agg2现在是建设的必要条件。找到agg2后,我们将删除cairo链接。驱动程序配置选项

地图

对于kml对象,mapserver kml输出将生成一个<document>元素,以包含作为mapserver映射文件一部分的所有层。文档支持的功能包括:

文档元素

支持

MapServer等效/注释

名称

是的

Mapfile 中的名称

能见度

如果需要,可以支持。默认值为1

打开

如果需要,可以支持。默认值为0

地址

可以支持,例如使用OWS地址(如果可用)

AddressDetails

音素

可以使用OWS支持?可使用ContactVoiceTelephone

片断

描述

AbstractView

TimePrimitive

样式URL

StyleSelector

是的

将支持样式元素。层中的所有不同样式都将存储在此处,并使用StyleURL从文件夹中引用。除了与功能相关的样式外,还有一个ListStyle元素添加在文档级别。这允许控制文件夹的显示方式。有关详细信息,请参阅层部分(styleurl)设置。

区域

元数据

ExtendedData

mapserver映射文件的每一层都将位于kml<folder>元素中。支持的文件夹元素包括:

文件夹元素

支持

MapServer等效/注释

名称

是的

层的名称。如果不可用,名称将与层的索引(第1层)连接。

能见度

是的

始终设置为1

打开

默认值为0

atom:authorAtom:linkaddressAddressDetailsPhoneNumberSnippet

描述

可以使用OWS描述支持

AbstarctView

TimePrimitive

样式URL

是的

用户可以使用kml_文件夹_显示层或地图级别metedata来选择设置。可能的值为“check”(默认)、“radiofolder”、“checkoff only”、“checkhidechildren”。

RegionMetadataExtendedData

层中的每个元素都将位于kml<placemark>元素内。如KML参考中所述:“位置标记是具有相关几何图形的特征。在GoogleEarth中,“位置”面板中将显示一个位置标记作为列表项。带有点的放置标记有一个与之关联的图标,该图标在3D查看器中标记地球上的一个点。(在Google Earth 3D查看器中,只有一个点标记可以单击或翻转。其他几何图形对象在3D查看器中没有图标。要让用户在3D查看器中单击某些内容,您需要创建一个包含点和其他几何对象的多几何对象。);

对于多边形和线图层,当特征与标签关联时,将创建包含点几何图形和特征几何图形的多几何图形元素。点特征将位于多边形或直线的中间。

<Folder>
    <name>park</name>
    <visibility>1</visibility>
    <styleUrl>#LayerFolder_check</styleUrl>
    <Placemark>
      <name>Ellesmere Island National Park Reserve</name>
      <styleUrl>#style_line_ff787878_w4.0_polygon_ff00ffc8_label_ff0000ff</styleUrl>
      <MultiGeometry>
        <Polygon>
          <outerBoundaryIs>
            <LinearRing>
              <coordinates>
              …
         <Point>
          <coordinates>
      -70.86810858,82.12291871
      </coordinates>
        </Point>
      </MultiGeometry>
    </Placemark>
</Folder>

placemark元素中支持的功能包括:

Placemark元素

支持

MapServer等效/注释

名称

是的

附在特征上的标签。如果没有标签,则使用层名称和形状ID指定默认名称(例如park.1)

能见度

是默认设置为真

打开

地址

AddressDetails

音素

片断

这是功能的简短描述。如果需要,可以支持它。

描述

是的

当用户单击功能时,这些信息将显示在描述气球中。<description>元素支持纯文本以及HTML格式元素的子集。定义描述的两种方法:

AbstractView

TimePrimitive

样式URL

是的

引用文档中定义的样式

StyleSelector

区域

元数据

几何图形

是的

取决于层类型

有关图层的一般注释

  • 每个层上的labelcache都已关闭

  • 应设置投影块。如果未设置,则假定数据在lat/lon投影中(将向用户发送一条调试消息:调试消息1)

  • 可以使用元数据将矢量层输出为栅格:“kml_outputsraster”“true”

  • 用户可以使用kml_文件夹_dsiplay层或地图级别metedata来选择设置。可能的值为“check”(默认)、“radiofolder”、“checkoff only”、“checkhidechildren”。

  • 用户可以使用metedata kml_description或kml_include_项定义附加到每个功能的描述。

  • 用户可以使用metedata kml_altitudemode指定如何解释<coordinates>元素中的高度分量。可能的值有:绝对值、相对值、钳位值。http://code.google.com/apis/kml/documentation/kmlreference.html_altitudemode

  • 用户可以使用metedata kml_extrude指定是否将Linearing连接到地面。http://code.google.com/apis/kml/documentation/kmlreference.html细分

  • 用户可以使用metedata kml镶嵌来指定是否允许线性化跟随地形。http://code.google.com/apis/kml/documentation/kmlreference.html挤出

点图层

  • 每个层都将在一个文件夹元素中。

  • 每个特征将由一个位置标记表示。

  • 点图层的几何元素将在kml中表示为点几何元素。支持的元素包括:

线层

  • 每个层都将在一个文件夹元素中。

  • 层中的每个特征都将由一个位置标记表示。

  • 如果将标签附着到线条上,几何图形元素将表示为包含一个linestring元素和一个表示标签位置的点元素的多几何图形。如果特征上没有附加标签,则几何图形元素将是一个线条字符串。

多边形层

  • 每个层都将在一个文件夹元素中。

  • 每个特征将由一个位置标记表示。

  • 如果标签附着到多边形上,几何体元素将表示为包含多边形元素和表示标签位置的点元素的多几何体。

注释层

尚不支持。

栅格层

  • 每个层都将在一个文件夹元素中。

  • 将为图层创建一个groundoverlay功能,其中包括指向生成的栅格图像的href链接和范围(地图范围)的latlongbox。

  • 使用映射文件中的ImagePath和ImageURL设置生成Href。

WMS层

尚不支持。

造型

如第4节所述,来自层的所有不同样式将存储在文档级别,并使用样式URL从文件夹中引用。

点图层

点图层将使用kml的iconstyle样式元素进行样式设置。将从IConStyle对象创建和引用表示符号的图像。如果将标签附着到点上,还将使用labelstyle元素。labelstyle将设置颜色参数。

<Style id="style_label_ff0000ff_symbol_star_13.0_ff000000">
    <IconStyle>
      <Icon>
        <href>>http://localhost/ms_tmp/4beab862_19bc_0.png</href>
      </Icon>
    </IconStyle>
    <LabelStyle>
      <color>ff0000ff</color>
    </LabelStyle>
</Style>

线层

线条层将使用kml的linestyle样式元素进行样式化。将使用线条样式的颜色和宽度参数。如果将标签附加到层上,还将使用labelstyle元素。

多边形层

多边形图层将使用kml的polystyle样式元素进行样式化。将使用polystyle的颜色参数。如果在 Mapfile 中定义了轮廓,则将使用附加线条样式。如果将标签附加到层上,还将使用labelstyle元素。

属性

如图层部分所述,定义描述的两种方法:

  • kml_description

  • kml_include_items

坐标系

地图级别的投影应设置为epsg:4326。如果未设置,驱动程序将自动设置。如果层的投影与epsg:4326不同,则预计层会有投影块。

警告和错误消息

  • 当 Mapfile 的投影未设置或与lat/lon投影不同时,驱动程序会自动将投影设置为espg:4326。如果映射为调试模式,则发送以下消息:«“kmlrenderer::checkprojection:mapfile projection set to epsg:4326”

  • 如果Web对象中未设置ImagePath和ImageURL,则在调试模式下发送以下消息:«kmlrenderer::StartNewLayer:ImagePath和ImageURL应在Web对象中设置

测试

开发在地图服务器GitHub(https://github.com/MapServer/MapServer/).)中完成它最初是在http://svn.osgeo.org/mapserver/sandbox/davidK/

文档

评审期意见

  • 代替kml_dumpattributes,我们可以使用gml/ows_include_项

  • 应澄清预测的错误信息,并在RFC中加入准确的措辞。

  • 明确定义用户对KML样式(描述气球、图标样式和GoogleEarthTOC)的控制。

投票历史

采用2010/04/08,条件是该RFC应进行清洁和升级,并提供更多细节。这允许将源代码从沙盒移动到主干

  • 丹尼尔、史蒂文、塔玛斯、阿塞菲、汤克、杰夫姆的+1

  • 史蒂文的+0