zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    学习记录
    cxf client端借口类型找不到问题
    zookeeper dubbo 问题解决录
    unkow jdbc driver : http://maven.apache.org
    推荐eclipse插件Properties Editor
    WPS for Linux,系统缺失字体
    Android 联系人字母排序(仿微信)
    Android之ORMLite实现数据持久化的简单使用
    设计模式之多例模式
    设计模式之单例模式
  • 原文地址:https://www.cnblogs.com/2008nmj/p/14418994.html
Copyright © 2011-2022 走看看