Ubuntu16.04 Flask+Python-Mapnik + PostGIS 矢量切片初体验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yh0503/article/details/84376593

基础概念

栅格数据、矢量数据

这部分份内容我就不赘述了,感兴趣的请自行传送浏览。
矢量数据:传送门
栅格数据:传送门
栅格数据、矢量数据对比:传送门A传送门B传送门C
推荐关于栅格数据的博客:栅格那点事儿

栅格切片、矢量切片

栅格切片
栅格切片图层将底图作为图像文件(例如,JPG 或 PNG 格式)交付给客户端应用程序,这些图像文件已经预渲染并存储在服务器上,并由客户端按原样显示。栅格切片图层最适合于为您的地图提供地理环境的底图,例如影像(比如在世界影像底图中)或基于要素的地图,例如地形、国家地理、海洋和其他底图。栅格切片图层也可以由静态业务图层组成,例如数据的专题地图。

切片图层格式可通过 Internet 快速传输,并且很容易为大多数常见的地图软件应用程序所理解,因此这些底图不仅与 ArcGIS 和使用 ArcGIS API 构建的 Web 应用程序兼容,还与使用 OGC 协议(例如 WMS/WMTS)的第三方应用程序兼容。栅格切片图层的其他优点如下:
• 适用于各种应用程序和设备(Web、桌面和移动设备),其中包括 ArcMap 等桌面应用程序和旧版 web 浏览器。
• 提供高端制图功能,如高级标注放置和符号系统。
• 支持各种栅格数据源,如影像和高程数据。
• 可通过 Web 制图应用程序打印。

矢量切片
矢量切片图层引用一组 web 可用的矢量切片以及这些切片应被绘制的相应样式。矢量切片与栅格切片类似,但是它们存储数据的矢量表示。也就是说,地理要素以客户端应用程序可理解的格式表示为点、线和面。不同于栅格切片图层,矢量切片图层能够适应显示设备的分辨率,并且可以改变样式以用于多种用途。矢量切片文件比栅格切片文件更小,这意味着制图更快、性能更好。切片访问性能和矢量绘制的结合使切片能够适应任意显示分辨率(设备不同,分辨率可能不同)。

相关资源:

MVT

Mapbox矢量图块规范:传送门

矢量切片的意义

个人愚见:

  • 相对栅格数据,数据传输量更小,前端体验更好。
  • 相对栅格数据,粒度更小,可以控制到要素级别,支持按需获取。
  • 实时性更好,支持数据更新,切图更快。
  • 信息保存更完整,细节保存完整。
  • 样式可修改,定制型更强。

矢量切片实现

awesome-vector-tiles(关于矢量切片实现的一下资料,算是比较全的了)

Mapnik

基础

关于Mapnik、Python-Mapnik的基础概念、安装、学习资料,参考上一篇:传送门

Mapnik XML文件配置

<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs" background-color="#00000000">
    <Layer name="grid_polygons" status="on" srs="+proj=longlat +ellps=GRS80 +no_defs ">
        <StyleName>grid_polygons</StyleName>
        <Datasource>
            <Parameter name="table">(select geom from grid_polygons) as grid_polygons</Parameter>
            <Parameter name="type">postgis</Parameter>
            <Parameter name="host">localhost</Parameter>
            <Parameter name="port">5432</Parameter>
            <Parameter name="user">postgres</Parameter>
            <Parameter name="password">postgres</Parameter>
            <Parameter name="dbname">postgres</Parameter>
            <Parameter name="max_size">20</Parameter>
        </Datasource>
    </Layer>
    <Style name="grid_polygons">
        <Rule>
            <PolygonSymbolizer fill="#FF7F24"/>
            <LineSymbolizer stroke-width=".5" stroke="#000000"/>
        </Rule>
    </Style>
</Map>
  • 坐标系查询:传送门(这块主要是在xml配置坐标系时使用)

  • 缩放级别和缩放比例尺分母对应关系:传送门

Mapnik 优化策略

Flask框架

Flask 是一个 Python 实现的 Web 开发微框架,轻巧简单容易上手。
官方资料:传送门

矢量切片服务端

参考代码:传送门

矢量切片前端渲染

这块可以使用Openlayers或Leaflet开发,前端这块的代码我就不贴了。

测试结果

500-600w的面数据,13-14级 实时加载无压力,12级略慢。

最后附上一张效果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yh0503/article/details/84376593