【问题标题】:programmatically converting kml to image [closed]以编程方式将 kml 转换为图像 [关闭]
【发布时间】:2010-08-25 17:05:02
【问题描述】:

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

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

现在向用户提供了使用 Print Screen 或导出 kml 的说明,但前者似乎有点蹩脚,后者不会给他们图像,除非他们可以访问其他软件。

这是白日梦吗?

【问题讨论】:

    标签: python open-source kml google-earth


    【解决方案1】:

    我最近对Mapnik 做了类似的事情。在installing 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()
    

    【讨论】:

      【解决方案2】:

      参见http://mapnik.org/faq/,它支持 OGR 格式(KML 就是其中之一)。 Mapnik 具有 python 绑定,易于使用。

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

      【讨论】:

        【解决方案3】:

        这不是真正的“转换”问题; KML 可以容纳各种各样的东西 - 多边形、图标、链接、信息等。

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

        【讨论】:

          【解决方案4】:

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

          希望对你有帮助。

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

          【讨论】:

          • 链接失效了,很遗憾
          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 2012-01-14
            • 1970-01-01
            • 2010-10-04
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-04-16
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多