2010-08-25 24 views
7

Esistono librerie open source (preferibilmente python) che convertono un file kml in un file immagine?conversione a livello di codice kml nell'immagine

Ho un'applicazione basata sul Web open source che consente agli utenti di disegnare forme su una mappa di Google Earth, e vorrei fornire loro un pdf che contenga la loro mappa con le forme che hanno disegnato.

In questo momento agli utenti vengono fornite le istruzioni per l'uso di Stampa schermo o l'esportazione del kml, ma il primo sembra un po 'debole e quest'ultimo non gli dà un'immagine a meno che non abbia accesso ad altro software.

È un sogno da pipa?

risposta

5

Recentemente ho fatto qualcosa di simile con Mapnik. Dopo installing Mapnik con tutti i pacchetti opzionali, questo script Python può esportare un percorso da un file KML per un PDF o bitmap:

#!/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 [email protected] +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() 
0

Non si tratta in realtà di "convertire"; KML di può contenere un sacco di cose - poligoni, icone, link, informazioni, ecc

Tuttavia, KML è XML, quindi non c'è alcun motivo per cui non si poteva analizzare il file KML con qualcosa come expat o etree per estrarre il definizioni di poligono. Da lì è possibile (ad esempio) disegnarli su un PDF.

2

Vedere http://mapnik.org/faq/, supporta i formati OGR (KML è uno di questi). Mapnik ha collegamenti Python ed è facile da usare.

Il rendering di Cairo supporta PDF e SVG, è sufficiente impostare tutto correttamente.

0

È concettualmente, potrebbe usare Matplotlib e la sua mappa di base toolkit per tracciare le immagini su una mappa (se riesci a recuperare l'immagine della mappa di sfondo che l'utente vuole ...).