Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 以编程方式将kml转换为图像_Python_Open Source_Kml_Google Earth - Fatal编程技术网

Python 以编程方式将kml转换为图像

Python 以编程方式将kml转换为图像,python,open-source,kml,google-earth,Python,Open Source,Kml,Google Earth,是否有任何开源库(最好是python)可以将kml文件转换为图像文件 我有一个基于web的开源应用程序,允许用户在Google Earth地图上绘制形状,我想为他们提供一个pdf,其中包含他们绘制的形状的地图 目前,向用户提供了使用打印屏幕或导出kml的说明,但前者似乎有点蹩脚,后者不给他们提供图像,除非他们可以访问其他软件 这是白日梦吗 这不是一个真正的“转化”问题;KML可以保存各种各样的东西——多边形、图标、链接、信息等等 但是,KML是XML,因此没有理由不能使用或之类的内容解析KML文

是否有任何开源库(最好是python)可以将kml文件转换为图像文件

我有一个基于web的开源应用程序,允许用户在Google Earth地图上绘制形状,我想为他们提供一个pdf,其中包含他们绘制的形状的地图

目前,向用户提供了使用打印屏幕或导出kml的说明,但前者似乎有点蹩脚,后者不给他们提供图像,除非他们可以访问其他软件


这是白日梦吗

这不是一个真正的“转化”问题;KML可以保存各种各样的东西——多边形、图标、链接、信息等等

但是,KML是XML,因此没有理由不能使用或之类的内容解析KML文件以提取多边形定义。从那里你可以(例如)在PDF上绘制它们

请参见,它支持OGR格式(KML就是其中之一)。Mapnik具有python绑定,易于使用

Cairo renderer支持PDF和SVG,您只需正确设置所有内容。

看看这篇文章“HTML5、JavaScript和画布的交互式映射”。它是关于使用HTML5画布元素呈现KML的

希望能有帮助


最近,我和我的同事做了类似的事情。使用所有可选软件包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()

可以想象,您可以使用Matplotlib及其工具包Basemap在地图上绘制图像(如果您可以检索用户想要的背景地图图像…。

不幸的是,链接已失效