高度模板¶
介绍¶
KML中的高度模板允许您使用数据的属性作为GoogleEarth中功能的“高度”。
备注
本教程假设geoserver正在http://localhost:8080上运行。
入门¶
为了本教程的目的,您只需要安装带有版本配置的geoserver和google earth。Google Earth可从http://earth.google.com免费获得。/ <http://earth.google.com/>`_.
第一步¶
默认情况下,geoserver渲染所有高度为0的功能,因此它们在GoogleEarth中似乎平放在世界表面上。
查看 topp:states
在GoogleEarth中,最简单的方法是使用网络链接。在谷歌地球,在 Places ,右键单击 Temporary Places ,然后转到 .在对话框中,填写 topp:states
作为 Name ,以下URL作为 Link ::
http://localhost:8080/geoserver/wms/reflect?layers=topp:states&format=application/vnd.google-earth.kml+xml

Topp:谷歌地球上的州¶
第二步¶
一个有趣的用于高度的值是每个州的人口(这样人口更多的州在地图上显得更高)。我们可以通过创建一个名为 height.ftl
在下面的geoserver数据目录中 workspaces/topp/states_shapefile/states
.要设置填充值,我们在此新文件中输入以下文本:
${PERSONS.value}
这将使用 PERSONS
属性作为每个特征的高度。为了欣赏我们的手工艺品,我们可以用鼠标右键单击我们的临时位置(称为 topp:states
)和选择 Refresh :

人口身高¶
第三步¶
看看我们的人口地图,我们发现加利福尼亚州比全国其他地方矮,而且一般来说,所有的州都太高了,我们无法从方便的角度看高度。为了将物体缩小到更易于管理的尺寸,我们可以将所有高度值除以100。只需将我们之前编写的模板更改为:
${PERSONS.value / 100}
再次刷新我们的视野,我们看到我们的高度场消失了。查看geoserver日志(在logs/geoserver.log下的数据目录中),我们看到如下内容:
Caused by: freemarker.core.NonNumericalException: Error on line 1, column 3 in height.ftl
Expression PERSONS.value is not numerical
但是,我们知道 PERSONS
字段是数字,即使它在shapefile中声明为字符串值。为了强制转换,我们可以附加 ?number
,像这样::
${PERSONS.value?number / 100}
一场决赛 Refresh 把我们带到一张尺寸合适的美国地图上:

比例高度¶
第四步¶
我们还可以做一些调整。默认设置是创建一个“实体”外观,以查找具有高度的特征,但GoogleEarth也可以创建与地面断开连接的浮动多边形。要关闭“连接到地面”功能,请添加一个名为“extrude”的格式选项,其值为“false”。也就是说,改变 Link 在网络链接中:
http://localhost:8080/geoserver/wms/reflect?layers=topp:states&format=application/vnd.google-earth.kml%2Bxml&format_options=extrude:false
对于谷歌地球如何解释高度场,我们也有一些选择。默认情况下,高度被解释为相对于地面的高度,但我们也可以设置相对于海平面的高度,或忽略该高度(用于在不删除模板的情况下恢复“平面”外观)。这由名为altitudemode的格式选项控制,其值汇总如下。
altitudeMode |
Purpose |
高度模式 |
将高度解释为相对于地面的高度 |
绝对的 |
将高度解释为相对于海平面的高度 |
钳位 |
完全忽略高度 |