2010-08-25 15 views
7

Czy istnieją biblioteki open source (najlepiej python), które przekonwertują plik kml na plik obrazu?programowo konwertuje kml na obraz

Mam aplikację internetową o otwartym kodzie źródłowym, która umożliwia użytkownikom rysowanie kształtów na mapie Google Earth, a ja chciałbym udostępnić im plik pdf zawierający mapę z narysowanymi kształtami.

W tej chwili użytkownicy otrzymują instrukcje dotyczące korzystania z ekranu drukowania lub eksportowania pliku kml, ale ten pierwszy wydaje się trochę kiepski, a drugi nie daje mu obrazu, chyba że ma dostęp do innego oprogramowania.

Czy to marzenie o rurze?

Odpowiedz

5

Niedawno robiłam coś takiego z Mapnik. Po installing mapnik z wszystkich opcjonalnych pakietów, to skrypt Pythona można wyeksportować ścieżkę z pliku KML do PDF lub bitmapy graficzny:

#!/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

To naprawdę nie jest kwestia "nawrócenia"; KML mogą posiadać różne rzeczy - wielokąty, ikony, linki, info, itp

Jednak KML jest XML, więc nie ma powodu, dlaczego nie można przetworzyć plik KML z czymś expat lub etree aby wyodrębnić definicje wieloboków. Stamtąd możesz (na przykład) narysować je na pliku PDF.

2

Zobacz http://mapnik.org/faq/, obsługuje formaty OGR (KML jest jednym z nich). Mapnik ma wiązania Pythona i jest łatwy w użyciu.

Program renderujący Cairo obsługuje pliki PDF i SVG, wystarczy ustawić wszystko poprawnie.

0

Można conceivably użyć matplotlib i jej toolkit bazowa wykreślić zdjęć na mapie (jeśli możesz pobrać obraz mapy tła, który użytkownik chce ...).