Mapnik for java

目的

这是一个简单的基于Spring和libmapnik JNI的切片服务器。

要求

需要mapnik3的mapnik-jni纽带:https://github.com/springmeyer/mapnik-jni。docs:https://spatialinteractive.github.io/mapnik-jni/javadocs/mapnik/package-summary.html

Mapnik的原始作者并不保管这个jni工具,但是可以在下面链接找到:

 git@github.com:jlnr/mapnik-jni.git

Once cloned, the repository will require the libmapnik3.0-dev package. Then a simple make will result in the build/dist/libmapnik-jni.so file to be generated.

Copy this libmapnik-jni.so to /usr/lib/jni/ directory, the libmapnik-jni.jar into /usr/share/java, then you should be done with the mapnik bindings setup.

Data

Using osm2pgsql, load a postgis database, then edit the file simplemap.xml, the postgresql configuration around line 140 to adapt to your setup.

Launch

$ mvn jetty:run

Then a minimalist webserver should be available at http://localhost:8080/demo.

Results

Chambéry

Caveats

This is not much than a Proof-of-Concept ! Do not expect to use it in production, as there is no caching of the generated tiles, which can take ~ 1 minute on my computer to render ...

https://github.com/pmauduit/mapnik-java

2.5 Mapnik渲染引擎概述

Mapnik是一一个开源的Python/C++地图渲染引擎,为开发制图应用程序提供渲染工具,它的功能是将文件形式的地图数据(包含- -些地理对象,如图层、地理空间数据集等等),按照定义好的渲染样式而渲染生成相应的图片文件。其核心是一一个C++的共享库,该共享库能提供空间数据访问和可视化的方法、算法。Mapnik支持多种操作系统,可以在多线程环境下很好的运行,主要面向一些提供GIS服务的Web应用开发。

目前有三种使用Mapnik的方法,分别是将其视为一个C++共享库来调用、通过编写Python脚本使用和通过编写XML配置文件来使用。另外,Mapnik也支持Node.js Web开发框架、Ruby和Java语言开发,支持多种gis数据格式。

2.5.1 渲染对象数据组织结构

Mapnik渲染对象的数据组织结构包括地图对象、图层、风格、规则、符号等内容,使用者可以通过定义渲染样式文件或相关API来构建渲染对象,典型的Mapnik渲染对象数据组织结构如图2.10所示。

mapnik-jni.jar和mapnik sdk的关系:

5 基于Hadoop和Mapnik的分布式渲染方案设计

5.1 Mapnik渲染机制与流程分析

虽然Mapnik提供了面向Python、C++、node.js、Ruby和Java的接口,但由于Mapnik自身版本和操作系统差异性等问题,目前使用最成熟的和最广泛的Mapnik开发语言仍然是Python。

Python与Java一样,也能把其他语言的模块(特别是C++)高效而简便地引用进来,而且它还是非编译型语言。本小节通过例举Python编写的两个渲染实例程序来分析讨论Mapnik渲染引擎的工作流程和内在机制。

(1)基于Mapnik Python API的渲染步骤

第一部分,声明并创建一个指定长宽像素值的Mapnik地图数据对象,默认投影坐标系为“WGS84”;设置Mapnik地图数据对象的背景颜色;

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

第二部分,声明并创建Mapnik样式对象的规则对象;

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

第三部分,声明并创建Mapnik面符号对象和线符号对象,分别设置其颜色属性或线宽属性,在使用Mapnik规则对象加载面符号对象和线符号对象后,将规则对象应用于Mapnik样式对象;

polygon_symbolizer=mapnik.PolygonSymbolizer(mapnik.Color('#f2eff9'))
line_symbolizer=mapnik.LineSymbolizer(mapnik.Color('rgb(50%,50%,50%)'),0.1)
r.symbols.append(polygon_symbolizer)
r.symbols.append(line_symbolizer)
s.rules.append(r)

第四部分,命名Mapnik样式对象并使其应用于Mapnik地图数据对象;

m.append_style('My Style',s)

第五部分,创建一个连接到Shapefile文件的Mapnik数据源对象,生成并命名一个Mapnik图层对象,将Mapnik数据源对象赋给已命名的Mapnik图层对象,使之命名为“My Style”的Mapnik样式对象应用于的Mapnik图层对象。最后,使Mapnik地图数据对象加载命名为“world”的Mapnik图层对象;

ds=mapnik.Shapefile(file='/Users/xxxx/ne_110m_admin_0_contries.shp')
layer=mapnik.Layer('world')
layer.datasource=ds
layer.styles.append('My Style')
m.layers.append(layer)

 第六部分,调用渲染方法将Mapnik地图数据渲染成png格式图片并写入当前路径;

mapnik.render_to_file(m,'world.png','png')

(2)使用渲染样式文件的渲染步骤:

5.2 面向空间数据渲染的Hadoop系统架构

5.3 基于Hadoop和Mapnik的分布式渲染方法

5.4 分布式渲染实验

>>节选自:薛纯《基于Hadoop和Mapnik的矢量数据渲染技术研究》:https://www.cnblogs.com/2008nmj/p/14430189.html

原文地址:https://www.cnblogs.com/2008nmj/p/14418994.html