程序化将KML转换为图像
有没有什么开源的库(最好是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()