7

kmlファイルを画像ファイルに変換するオープンソースライブラリ(できればPython)はありますか?

ユーザーがGoogleEarthマップに図形を描画できる、オープンソースのウェブベースのアプリケーションがあります。描画した図形を含む地図を含むPDFを提供したいと思います。

現在、ユーザーにはPrint Screenの使用またはkmlのエクスポートの手順が提供されていますが、前者は少し足りないようで、後者は他のソフトウェアにアクセスできない限り画像を提供しません。

これは夢の裏切りですか?

4

5 に答える 5

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()
于 2010-10-20T15:28:08.980 に答える
2

http://mapnik.org/faq/を参照してください。OGR形式をサポートしています(KMLはその1つです)。MapnikにはPythonバインディングがあり、使いやすいです。

CairoレンダラーはPDFとSVGをサポートしているので、すべてを正しく設定する必要があります。

于 2010-08-27T07:33:16.290 に答える
0

それは実際には「変換」の問題ではありません。KMLは、ポリゴン、アイコン、リンク、情報など、あらゆる種類のものを保持できます。

ただし、KMLはXMLであるため、 expatetreeなどを使用してKMLファイルを解析してポリゴン定義を抽出できなかった理由はありません。そこから、(たとえば)PDFにそれらを描くことができます。

于 2010-08-27T07:23:47.517 に答える
0

この投稿「HTML5、JavaScript、およびCanvasを使用したインタラクティブなマッピング」をご覧ください。HTML5のcanvas要素を使用してKMLをレンダリングすることです。

それが役に立てば幸い。

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

于 2010-09-25T23:13:19.213 に答える
0

MatplotlibとそのツールキットBasemapを使用して、マップ上に画像をプロットすることができます(ユーザーが必要とする背景マップ画像を取得できる場合...)。

于 2010-12-10T08:16:29.983 に答える