2013-03-28 18 views
4

我想從GPS軌道記錄中使用mapnik和python渲染地圖。我從數據庫中獲取GPS數據,所以它只是一個數組(lat,long)。Python + Mapnik:如何渲染帶有GPS軌道的地圖的示例

有沒有人知道這樣做的例子?我知道我需要首先創建一個形狀文件,但我對mapnik很陌生,到目前爲止我還沒有真正理解它。也許有一個很好的例子,我會得到它:-)

感謝

回答

2

最簡單的方法實際上是使用KML文件。安裝simplekml模塊,然後運行您的陣列以創建KML文件。

import simplekml 
kml = simplekml.Kml() 
for i, coord in enumerate(coords): 
    # assuming coord is a lat, lon tuple 
    kml.newpoint(name="Point %s" % i, coords=[coord]) 

kml.save("GPS_tracking_data.kml") 

現在你可以加載到mapnik作爲一個數據源並繪製它;

import mapnik 
# Setup the map 
map_canvas = mapnik.Map(width_in_px, height_in_px) 
map_canvas.background = mapnik.Color('rgb(0,0,0,0)') # transparent 

# Create a symbolizer to draw the points 
style = mapnik.Style() 
rule = mapnik.Rule() 
point_symbolizer = mapnik.MarkersSymbolizer() 
point_symbolizer.allow_overlap = True 
point_symbolizer.opacity = 0.5 # semi-transparent 
rule.symbols.append(point_symbolizer) 
style.rules.append(rule) 
map_canvas.append_style('GPS_tracking_points', style) 

# Create a layer to hold the ponts 
layer = mapnik.Layer('GPS_tracking_points') 
layer.datasource = mapnik.Ogr(file="GPS_tracking_data.kml", layer_by_index=0) 
layer.styles.append('GPS_tracking_points') 
map_canvas.layers.append(layer) 

# Save the map 
map_canvas.zoom_all() 
mapnik.render_to_file(map_canvas, 'GPS_tracking_points.png', 'png') 

這應該只是做。 Python + mapnik的文檔有點弱,但如果你參考,你應該能夠建立在這個基礎上;

  1. The mapnik wiki
  2. The python mapnik package docs
+0

哪裏實際的地圖數據來自哪裏? – otmezger

+0

您必須將地圖數據添加爲另一圖層(來自任何數據源)。這將在空間上映射GPS座標而不在下面(例如,空間中的點)。您可以從OpenStreetMaps或其他來源(Google地圖,Bing地圖等)添加地圖圖層,具體取決於適合您的答案的信息 – Mark

+0

。你能告訴我如何使用其他來源?我知道我可以使用我自己的postgis來使用OSM數據,但這對我來說太過分了。我需要一個運行它的服務器等......我正在尋找一種更簡單的方法,如果你說可以使用谷歌地圖添加一層地圖,我會接受它!或者甚至是OSM的在線版本......你知道這方面的任何例子嗎?謝謝 – otmezger