程序化将KML转换为图像

7 投票
5 回答
7601 浏览
提问于 2025-04-16 03:17

有没有什么开源的库(最好是Python写的),可以把kml文件转换成图片文件?

我有一个开源的网页应用,用户可以在谷歌地图上画形状,我想给他们提供一个包含他们绘制的地图和形状的PDF文件。

现在用户只能按照说明使用“打印屏幕”或者导出kml文件,但前者感觉有点不靠谱,后者如果没有其他软件就不能得到图片。

这是不是一个不切实际的想法?

5 个回答

0

看看这篇文章“使用HTML5、JavaScript和Canvas进行互动地图”。它讲的是如何用HTML5的画布元素来显示KML文件。

希望对你有帮助。

http://indiemaps.com/blog/2010/06/interactive-mapping-with-html5-javascript-and-canvas/

3

可以查看一下 http://mapnik.org/faq/,它支持OGR格式(KML就是其中一种)。Mapnik有Python的接口,使用起来很简单。

Cairo渲染器支持PDF和SVG格式,你只需要正确设置好所有的东西就可以了。

6

我最近用 Mapnik 做了类似的事情。在 安装 Mapnik 以及所有可选的包之后,这个 Python 脚本可以把 KML 文件中的路径导出为 PDF 或位图图形:

#!/usr/bin/env python

import mapnik
import cairo

m = mapnik.Map(15000, 15000, "+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 +wktext +no_defs") # end result: OpenStreetMap projection
m.background = mapnik.Color(0, 0, 0, 0)

bbox = mapnik.Envelope(-10000000, 2000000, -4000000, -19000000) # must be adjusted
m.zoom_to_box(bbox)

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

polygonSymbolizer = mapnik.PolygonSymbolizer()
polygonSymbolizer.fill_opacity = 0.0
r.symbols.append(polygonSymbolizer)

lineSymbolizer = mapnik.LineSymbolizer(mapnik.Color('red'), 1.0)
r.symbols.append(lineSymbolizer)

s.rules.append(r)
m.append_style('My Style',s)

lyr = mapnik.Layer('path', '+init=epsg:4326')
lyr.datasource = mapnik.Ogr(file = './path.kml', layer = 'path')
lyr.styles.append('My Style')
m.layers.append(lyr)

# mapnik.render_to_file(m,'./path.png', 'png')

file = open('./path.pdf', 'wb')
surface = cairo.PDFSurface(file.name, m.width, m.height)
mapnik.render(m, surface)
surface.finish()

撰写回答