Table of Contents
How to integrate mapnik with wxPython?
It is pretty easy to integrate mapnik with wxPython, here is a simple wxPython application demonstrates how to:
""" This is a simple wxPython application demonstrates how to integrate mapnik, it do nothing but draw the map from the World Poplulation XML example: http://trac.mapnik.org/wiki/XMLGettingStarted Victor Lin. (bornstub@gmail.com) Blog http://blog.ez2learn.com """ import wx import mapnik class Frame(wx.Frame): def __init__(self, *args, **kwargs): wx.Frame.__init__(self, size=(800, 500) ,*args, **kwargs) self.Bind(wx.EVT_PAINT, self.onPaint) self.mapfile = "population.xml" self.width = 800 self.height = 500 self.createMap() self.drawBmp() def createMap(self): """Create mapnik object """ self.map = mapnik.Map(self.width, self.height) mapnik.load_map(self.map, self.mapfile) bbox = mapnik.Envelope(mapnik.Coord(-180.0, -75.0), mapnik.Coord(180.0, 90.0)) self.map.zoom_to_box(bbox) def drawBmp(self): """Draw map to Bitmap object """ # create a Image32 object image = mapnik.Image(self.width, self.height) # render map to Image32 object mapnik.render(self.map, image) # load raw data from Image32 to bitmap self.bmp = wx.BitmapFromBufferRGBA(self.width, self.height, image.tostring()) def onPaint(self, event): dc = wx.PaintDC(self) memoryDC = wx.MemoryDC(self.bmp) # draw map to dc dc.Blit(0, 0, self.width, self.height, memoryDC, 0, 0) if __name__ == '__main__': app = wx.App() frame = Frame(None, title="wxPython Mapnik Demo By Victor Lin") frame.Show() app.MainLoop()
The key point of this program is this:
# create a Image32 object image = mapnik.Image(self.width, self.height) # render map to Image32 object mapnik.render(self.map, image) # load raw data from Image32 to bitmap self.bmp = wx.BitmapFromBufferRGBA(self.width, self.height, image.tostring())
We create an Image32 object, and render map on to that image, then load raw data of image into wxPython's Bitmap object. That's it! Now you can use your memory dc to do whatever you like
memoryDC = wx.MemoryDC(self.bmp) # draw map to dc dc.Blit(0, 0, self.width, self.height, memoryDC, 0, 0)
Screenshots
Attachments
- wxMapnikScreenshot.png (156.7 kB) - added by victorlin 21 months ago.
- demo.py (1.6 kB) - added by victorlin 21 months ago.

