以编程方式将KML转换为图像

7
有没有任何开源库(最好是Python),可以将kml文件转换为图像文件?
我有一个开源的基于Web的应用程序,允许用户在Google Earth地图上绘制形状,我想提供给他们包含他们绘制的地图形状的pdf。
目前,用户会得到使用Print Screen或导出kml的说明,但前者似乎有些不太好,而后者不会提供图像,除非他们拥有其他软件来打开。
这是个空想吗?
5个回答

6

我最近使用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()

3
请看http://mapnik.org/faq/,它支持OGR格式(其中之一是KML)。Mapnik具有Python绑定并且易于使用。
Cairo渲染器支持PDF和SVG,您只需要正确设置所有内容。

0
你可以使用Matplotlib及其工具包Basemap来在地图上绘制图像(如果您可以检索到用户想要的背景地图图像...)。

0

链接已经失效,很遗憾。 - Pekka

-1

这并不是一个“转换”的问题;KML可以包含各种各样的东西——多边形、图标、链接、信息等。

然而,KML是XML格式,因此您可以使用类似expatetree的工具解析KML文件以提取多边形定义。从那里,您可以(例如)在PDF上绘制它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接