小伙伴在用百度高德这类地图的时候有木有发现当地图放大到一定倍数之后就会出现三维效果(2.5纬)。作为一个爱寻根究底的人,我们一定会问,这种地图是如何实现的呢?基于arcgis或者超图吗?NONONO,这类软件太贵!基于Unity3D这类开源的三维引擎做的?NONONO,这是真三维地图。笔者的原则就是能用开源软件就绝不会用商业软件。由于现在主流的制作web地图的开源软件是geoserver+openlayers+postgresql。因此笔者就思索如何基于geoserver和openlayer制作一个伪三维地图。
由于geoserver不支持直接导入三维模型,隐藏笔者直接着眼于sld,看看能不能通过sld来表达三维效果,经过网上的搜索,找到了类似的配置,试验一下成功。
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<!-- a Named Layer is the basic building block of an SLD document -->
<NamedLayer>
<Name>default_polygon</Name>
<UserStyle>
<!-- Styles can have names, titles and abstracts -->
<Title>Default Polygon</Title>
<Abstract>A sample style that draws a polygon</Abstract>
<!-- FeatureTypeStyles describe how to render different features -->
<!-- A FeatureTypeStyle for rendering polygons -->
<FeatureTypeStyle>
<Rule>
<PolygonSymbolizer>
<Geometry>
<ogc:Function name="isometric">
<ogc:PropertyName>geom</ogc:PropertyName>
<ogc:Literal>0.00001</ogc:Literal>
</ogc:Function>
</Geometry>
<Fill>
<CssParameter name="fill">#dddddd</CssParameter>
</Fill>
<Stroke>
<CssParameter name="stroke">#999999</CssParameter>
<CssParameter name="stroke-width">0.1</CssParameter>
</Stroke>
</PolygonSymbolizer>
</Rule>
</FeatureTypeStyle>
<FeatureTypeStyle>
<Rule>
<PolygonSymbolizer>
<Geometry>
<ogc:Function name="offset">
<ogc:PropertyName>geom</ogc:PropertyName>
<ogc:Literal>0</ogc:Literal>
<ogc:Literal>0.00001</ogc:Literal>
</ogc:Function>
</Geometry>
<Fill>
<CssParameter name="fill">#ffffe0</CssParameter>
</Fill>
<Stroke>

本文介绍如何利用开源软件geoserver和openlayers,结合postgresql,制作伪三维地图。作者通过研究sld文件,成功实现了类似百度地图的2.5纬效果,并调整样式以按比例尺展示,使得地图在特定缩放级别呈现三维效果。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



