MS RFC 58:kml输出¶
- 日期
2009/03/01
- 作者
Dvaid Kana (可在 gmail.com 上了解更多信息)
- 作者
Thomas.Bonfort 可在 gmail.com 上了解更多信息)
- 作者
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,此名称可用于在 Mapfile 中设置imagetype参数。
格式也可以在 Mapfile 中定义:
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
Cairo 和Agg2现在是建设的必要条件。找到agg2后,我们将删除cairo链接。驱动程序配置选项
地图¶
对于kml对象,mapserver kml输出将生成一个<document>元素,以包含作为mapserver Mapfile 一部分的所有层。文档支持的功能包括:
文档元素 |
支持 |
MapServer等效/注释 |
---|---|---|
名称 |
是的 |
Mapfile 中的名称 |
能见度 |
不 |
如果需要,可以支持。默认值为1 |
打开 |
不 |
如果需要,可以支持。默认值为0 |
地址 |
不 |
可以支持,例如使用OWS地址(如果可用) |
AddressDetails |
不 |
|
音素 |
不 |
可以使用OWS支持?可使用ContactVoiceTelephone |
片断 |
不 |
|
描述 |
不 |
|
AbstractView |
不 |
|
TimePrimitive |
不 |
|
样式URL |
不 |
|
StyleSelector |
是的 |
将支持样式元素。层中的所有不同样式都将存储在此处,并使用StyleURL从文件夹中引用。除了与功能相关的样式外,还有一个ListStyle元素添加在文档级别。这允许控制文件夹的显示方式。有关详细信息,请参阅层部分(styleurl)设置。 |
区域 |
不 |
|
元数据 |
不 |
|
ExtendedData |
不 |
层¶
mapserver Mapfile 的每一层都将位于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。
使用 Mapfile 中的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元素。
坐标系¶
地图级别的投影应设置为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对象中设置
测试¶
开发在mapserver github中完成(https://github.com/mapserver/mapserver/)。最初在http://svn.osgeo.org/mapserver/sandbox/davidk/
文档¶
评审期意见¶
代替kml_dumpattributes,我们可以使用gml/ows_include_项
应澄清预测的错误信息,并在RFC中准确地描述。
明确定义用户对KML样式(描述气球、图标样式和GoogleEarthTOC)的控制。