高度模板

介绍

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 ,然后转到 Add ‣ Network Link .在对话框中,填写 topp:states 作为 Name ,以下URL作为 Link ::

http://localhost:8080/geoserver/wms/reflect?layers=topp:states&format=application/vnd.google-earth.kml+xml
../../../../../_images/height-none.png

Topp:谷歌地球上的州

第二步

一个有趣的用于高度的值是每个州的人口(这样人口更多的州在地图上显得更高)。我们可以通过创建一个名为 height.ftl 在下面的geoserver数据目录中 workspaces/topp/states_shapefile/states .要设置填充值,我们在此新文件中输入以下文本:

${PERSONS.value}

这将使用 PERSONS 属性作为每个特征的高度。为了欣赏我们的手工艺品,我们可以用鼠标右键单击我们的临时位置(称为 topp:states )和选择 Refresh

../../../../../_images/height-toomuch.png

人口身高

第三步

看看我们的人口地图,我们发现加利福尼亚州比全国其他地方矮,而且一般来说,所有的州都太高了,我们无法从方便的角度看高度。为了将物体缩小到更易于管理的尺寸,我们可以将所有高度值除以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 把我们带到一张尺寸合适的美国地图上:

../../../../../_images/height-math.png

比例高度

第四步

我们还可以做一些调整。默认设置是创建一个“实体”外观,以查找具有高度的特征,但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

高度模式

将高度解释为相对于地面的高度

绝对的

将高度解释为相对于海平面的高度

钳位

完全忽略高度

Next: 时间