【GIS】——使用Python bindings操作mapnik

2023-05-16

背景介绍

使用mapnik有三种方式:

1.使用XML配置文件
2.使用Python bindings
3.使用C++中的API

这里我们先介绍第二种Python bindings,并采用这种方式做一个Demo。

步骤:

1.检查mapnik是否安装成功

mapnik-config -v

如果安装成功,输入完上面的命令回车后,会显示mapnik的版本

2.检查Python bindings

python -c "import mapnik;print mapnik.__file__"

我的显示 D:\01software\Java\mapnik-v2.2.0\python\2.7\site-packages\mapnik__init__.pyc

3.准备数据

从以下地址下载shapefile,这是world border polygons。
https://github.com/mapnik/mapnik/wiki/data/110m-admin-0-countries.zip

下载之后解压,会出现四个文件
ne_110m_admin_0_countries.shp
ne_110m_admin_0_countries.shx
ne_110m_admin_0_countries.dbf
ne_110m_admin_0_countries.prj

我在D:\01software\Java\mapnik-v2.2.0文件夹下建立了一个shapefile文件夹,然后里面放解压后的110m-admin-0-countries文件夹。

一会我们就要用到ne_110m_admin_0_countries.shp作为数据源。如果你想知道它长什么样,可以用QGIS软件将它打开。

这里写图片描述


这里写图片描述


这里写图片描述

本来的shapefile如图所示,现在我们用mapnik渲染出不一样的‘世界’。

4.编写python代码

在ne_110m_admin_0_countries.shp所在的文件夹下,打开命令窗口,输入python,进入python解释器。

引入mapnik模块

import mapnik

定义一个地图,变量为m,地图的背景色为steelblue

m = mapnik.Map(600,300)
m.background = mapnik.Color('steelblue')

定义样式s和规则r

s = mapnik.Style()
r = mapnik.Rule()

定义多边形符号polygon_symbolizer
地图上的多边形填充上#f2eff9
并把符号绑定在规则r上

polygon_symbolizer = mapnik.PolygonSymbolizer()
polygon_symbolizer.fill = mapnik.Color('#f2eff9')
r.symbols.append(polygon_symbolizer)

定义线符号line_symbolizer,颜色为rgb(50%,50%,50%),宽度为0.1
同样把这个符号绑定在规则r上

line_symbolizer = mapnik.LineSymbolizer()
line_symbolizer.stroke_color = mapnik.Color('rgb(50%,50%,50%)')
line_symbolizer.stroke_width = 0.1
r.symbols.append(line_symbolizer)

把规则绑定在样式上

s.rules.append(r)

把样式命名为‘My Style’绑定在map上

m.append_style('My Style',s)

定义数据源(后面的路径使用的是相对路径,因为我命令窗口就是在这个文件所在的文件夹打开的,所以路径如下所示,也可以使用绝对路径,但是我没尝试成功)

ds = mapnik.Shapefile(file='ne_110m_admin_0_countries.shp')

定义layer,将layer绑定数据源和样式

layer = mapnik.Layer('world')
layer.datasource = ds
layer.styles.append('My Style')

把layer绑定到map上,并放大

m.layers.append(layer)
m.zoom_all()
mapnik.render_to_file(m,'world.png', 'png')
print "rendered image to 'world.png'"

然后打开world.png

这里写图片描述

(可选)简练world.py

我们也可以在ne_110m_admin_0_countries.shp所在的文件夹建立world.py 文件,然后用Editplus将文件打开,一起粘下如下代码,然后保存。并在此文件夹下打开命令窗口,执行

python world.py

就会重写world.png。 你可以修改其中的颜色值来重写world.png看效果。

import mapnik
m = mapnik.Map(600,300)
m.background = mapnik.Color('steelblue')
s = mapnik.Style()
r = mapnik.Rule()
polygon_symbolizer = mapnik.PolygonSymbolizer()
polygon_symbolizer.fill = mapnik.Color('#f2eff9')
r.symbols.append(polygon_symbolizer)

line_symbolizer = mapnik.LineSymbolizer()
line_symbolizer.stroke_color = mapnik.Color('rgb(50%, 50%, 50%)')
line_symbolizer.stroke_width = 1

r.symbols.append(line_symbolizer)
s.rules.append(r)
m.append_style('My Style',s)
ds = mapnik.Shapefile(file='ne_110m_admin_0_countries.shp')
layer = mapnik.Layer('world')
layer.datasource = ds
layer.styles.append('My Style')
m.layers.append(layer)
m.zoom_all()
mapnik.render_to_file(m,'world.png', 'png')
print "rendered image to 'world.png'"

总结

渲染关系

Map—Layer—Style—Rule—symbols(从右向左依次渲染,但是需要先定义Map)
Layer—datasource
Layer—Style

经过了这个Demo,初步了解了mapnik做的事情,但是还不是很明白,继续学习……

更新

line_symbolizer表示的是地图上线条的样式,但是line_symbolizer.stroke_color并不能改变颜色值,而直接用line_symbolizer.stroke又会报错,还不知道什么原因。下篇文章用xml形式的style文件不会出现这个问题。

参考文章:

https://github.com/mapnik/mapnik/wiki/GettingStartedInPython

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【GIS】——使用Python bindings操作mapnik 的相关文章

随机推荐

  • Nrf52832 freeOS系统移植

    最近因为项目开发需要 xff0c 需要多任务的操作系统在nrf52832上运行 xff0c 于是根据例程移植了下FreeOS系统 根据例程F nRF5 SDK 15 2 0 9412b96 examples ble peripheral b
  • tf 使用

    1 发布自己的tf xff1a 其实就是发布你建立的坐标系 步骤如下 xff1a 1 定义一个广播 xff0c 相当于发布话题时定义一个发布器 xff0c 还是以官方的小乌龟例程为例 xff1a span class hljs keywor
  • 解决问题:xshell6评估已过期

    一 问题描述 今天打开xshell xff0c 发现报错 xff1a 34 xshell6评估过期 34 无法打开xshell xff0c 当时急着要用xshell xff0c 所以 xff0c 是有这个问题的 二 解决方法 1 进入xsh
  • 华为机试题: 水仙花数

    描述 水仙花数又称阿姆斯特朗数 水仙花数是指一个n 位数 n 3 xff0c 它的每个位上的数字的n 次幂之和等于它本身 xff08 例如 xff1a 1 3 43 5 3 43 3 3 61 153 xff09 求输入的数字是否为水仙花数
  • 【手把手教你树莓派3 (二)】 启动wifi模块

    概述 树莓派3内置了wifi和蓝牙模块 xff0c 我们不用像以前的版本那样 xff0c 再去购买一个外接的模块练到raspberry上 当我们第一次启动了树莓派的时候 xff0c 必然使用了网线 xff0c 但是之后的每一次使用 xff0
  • 社区活动 | Apache Kylin × Apache RocketMQ Meetup 深圳站

    9 月 7 日 xff0c Apache Kylin Meetup 即将走进深圳 xff01 本次 Meetup 由 Apache Kylin 与 Apache RocketMQ 联合举办 xff0c 邀请到来自腾讯 阿里 平安云以及 Ky
  • 【手把手教你树莓派3 (六)】使用 motion 和 mjpg 做视频监控器

    概述 买了一个罗技的usb接口的摄像头 xff0c 想通过raspberry pi做一个视频的实时监控器 xff0c 看了一下这各功能可以通过两款软件实现 xff1a motion和mjpg streamer xff0c 先来简单介绍下这两
  • 【zookeeper】data/zookeeper_server.pid: No such file or directory FAILED TO WRITE PID 报错

    今天在配置zk的伪集群 xff0c 发现了如下报错 xff1a 上网查看有的说是因为zoo cfg配置文件 61 前后有空格 xff0c 查了以后我的配置文件并没有空格 xff0c 所以我排除了这个原因 最后解决 xff1a zk的配置文件
  • golang tag 之 gomodifytags

    链接 xff1a gomodifytags原文链接 gomodifytags 是go工具 xff0c 用来修改 更新struct字段的标签tag 使用gomodifytags可以很方便的update add delete struct的字段
  • Vscode Clangformat 配置

    1 xff0c vscode 安装 c 43 43 intellisense 即可自动安装clangformat 格式化工具 2 xff0c vs setting Clang format path 配置 一般位置就是 vscode ext
  • 计算机基本原理之内存编址

    内存编址目的 存储器由一块块的空间 xff08 存储单元 xff09 组成 xff0c 为了方便寻找到每一块空间 xff0c 我们需要对每一个空间进行标识 内存编址 内存编址概述 芯片 存储器由若干个芯片构成 内存容量 存储器的大小 内存容
  • PowerDesigner—你知道CDM、LDM、PDM、OOM的区别吗?

    导读 在本篇文章中 xff0c 你将会了解到PowerDesigner工具中的三种模型CDM xff0c OOM xff0c PDM的区别和联系 PowerDesigner 简称PD xff0c 是一种数据建模工具 xff0c 适合于开发大
  • 基础 HTML之目录问题(相对路径和绝对路径区别)

    导读 复习HTML知识的时候 xff0c URL的路径的写法是我们经常会用到的一块内容 相对路径和绝对路径的问题不难 xff0c 只要明白各自的道理 xff0c 同时清楚 这些字符的含义就可以了 原文链接 xff1a http www jb
  • 【Android开发—智能家居系列】(一):智能家居原理

    来到JCZB公司的第二天 xff0c 就接到了开发类似于小米智能家庭APP的任务 组长让我在手机上安装上此款APP xff0c 给了我个小米智能插座 xff0c 就让我开始了解需求 这便开启了我的智能家居旅程 说实话 xff0c 我也真是o
  • 【Android开发—智能家居系列】(二):用手机对WIFI模块进行配置

    在实际开发中 xff0c 我开发的这款APP是用来连接温控器 xff0c 并对温控器进行控制的 有图为证 xff0c 哈哈 上一篇文章 Android开发 智能家居系列 xff08 一 xff09 xff1a 智能家居原理 的文末总结中写到
  • 【POI】——获得单元格的值,并转化成字符串

    本篇文章分享一些在做导入导出EXCEL功能时用到的工具类的一些代码 span class hljs javadoc span class hljs javadoctag 64 param span cell span class hljs
  • ElementUI实现文件手动上传

    ElementUI实现文件手动上传 HTML部分 lt el upload ref 61 34 upload 34 multiple 61 34 true 34 file list 61 34 fileList 34 auto upload
  • 【工具篇】——利用EditPlus进行Json数据格式化

    从接口返回的数据基本都是json格式的数据 之前我要查看数据的内容 xff0c 为了方便我阅读 xff0c 我会直接复制这段数据到在线JSON校验格式化工具中进行格式化和校验 但是没网的时候 xff0c 就不能靠它了 而EditPlus是我
  • 【GIS】——mapnik在windows上的安装

    mapnik是瓦片生成器 这里先不解释了 xff0c 等用过了再谈理解 下载步骤 1 下载安装包 官网地址 xff1a http mapnik org http mapnik org pages downloads html 3 0 12还
  • 【GIS】——使用Python bindings操作mapnik

    背景介绍 使用mapnik有三种方式 xff1a 1 使用XML配置文件 2 使用Python bindings 3 使用C 43 43 中的API 这里我们先介绍第二种Python bindings xff0c 并采用这种方式做一个Dem