4
我想從GPS軌道記錄中使用mapnik和python渲染地圖。我從數據庫中獲取GPS數據,所以它只是一個數組(lat,long)。Python + Mapnik:如何渲染帶有GPS軌道的地圖的示例
有沒有人知道這樣做的例子?我知道我需要首先創建一個形狀文件,但我對mapnik很陌生,到目前爲止我還沒有真正理解它。也許有一個很好的例子,我會得到它:-)
感謝
我想從GPS軌道記錄中使用mapnik和python渲染地圖。我從數據庫中獲取GPS數據,所以它只是一個數組(lat,long)。Python + Mapnik:如何渲染帶有GPS軌道的地圖的示例
有沒有人知道這樣做的例子?我知道我需要首先創建一個形狀文件,但我對mapnik很陌生,到目前爲止我還沒有真正理解它。也許有一個很好的例子,我會得到它:-)
感謝
最簡單的方法實際上是使用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的文檔有點弱,但如果你參考,你應該能夠建立在這個基礎上;
哪裏實際的地圖數據來自哪裏? – otmezger
您必須將地圖數據添加爲另一圖層(來自任何數據源)。這將在空間上映射GPS座標而不在下面(例如,空間中的點)。您可以從OpenStreetMaps或其他來源(Google地圖,Bing地圖等)添加地圖圖層,具體取決於適合您的答案的信息 – Mark
。你能告訴我如何使用其他來源?我知道我可以使用我自己的postgis來使用OSM數據,但這對我來說太過分了。我需要一個運行它的服務器等......我正在尋找一種更簡單的方法,如果你說可以使用谷歌地圖添加一層地圖,我會接受它!或者甚至是OSM的在線版本......你知道這方面的任何例子嗎?謝謝 – otmezger