Artem's ExampleCode, via: https://lists.berlios.de/pipermail/mapnik-users/2006-March/000050.html
On 06/03/06, Artem Pavlenko <artem at pavlenko.uklinux.net> wrote:
I would like Python code examples and especially code for Postgis retrieval.
Yep, postgis plug-in is undocumented so here is some info: (based on latest changes in svn e.g. there are two ways to create a Layer at the moment:
- params = {"name":"value",....} lay = CreateLayer?(params) #python dict
- lay = Layer(type="postgis",host="127.0.0.1",...) #named arguments
)
PostGIS parameters/named args: "type" -> "postgis" "name" -> layer name "host" -> localhost or whatever .. "dbname" -> database name "user" -> user name "password" ->password "table" -> table name with geometry column (properly created and defined "geometry_columns") or SQL statement returning (amongst others) GID and WKB geometry (see python example below).
My attempt to render OS Mastermap according their own published 'in-house' styling (unfinished). I used ogr2ogr to convert GML to PostgreSQL.
Cheers, Artem
#!/usr/bin/env /opt/python/bin/python from mapnik import * def load_styles(Map) : s=Style() r=Rule('buildingFill') r.filter=Filter("[osgb:descriptivegroup] = 'Building'") r.symbols.append(PolygonSymbolizer(Color('#ffcc99'))) s.rules.append(r) r=Rule('stepFill') r.filter=Filter("[osgb:descriptiveterm] = 'Step'") r.symbols.append(PolygonSymbolizer(Color('#cccc99'))) s.rules.append(r) r=Rule('glasshouseFill') r.filter=Filter("[osgb:descriptivegroup] = 'Glasshouse'") r.symbols.append(PolygonSymbolizer(Color('#ffcc99)'))) s.rules.append(r) r=Rule('heritageFill') r.filter=Filter("[osgb:descriptivegroup] = 'Historic Interest'") r.symbols.append(PolygonSymbolizer(Color('#cc9966'))) s.rules.append(r) r=Rule('inlandWaterFill') r.filter=Filter("[osgb:descriptivegroup] = 'Inland Water'") r.symbols.append(PolygonSymbolizer(Color('#99ffff'))) s.rules.append(r) r=Rule('naturalEnvironmentFill','area') r.filter=Filter("[osgb:descriptivegroup] = 'Natural Environment'") r.symbols.append(PolygonSymbolizer(Color('#ccffcc'))) s.rules.append(r) r=Rule('naturalEnvironmentFill','area') r.filter=Filter("[osgb:descriptivegroup] = 'Natural Environment'") r.symbols.append(PolygonSymbolizer(Color('#ccffcc'))) s.rules.append(r) r=Rule('pathFill','area') r.filter=Filter("[osgb:descriptivegroup] = 'Path'") r.symbols.append(PolygonSymbolizer(Color('#cccccc'))) s.rules.append(r) r=Rule('roadFill','Road or Track') r.filter=Filter("[osgb:descriptivegroup] = 'Road Or Track'") r.symbols.append(PolygonSymbolizer(Color('#cccccc'))) s.rules.append(r) r=Rule('structureFill','Structure') r.filter=Filter("[osgb:descriptivegroup] = 'Structure'") r.symbols.append(PolygonSymbolizer(Color('#cc9966'))) s.rules.append(r) r=Rule('tidalWaterFill','Tidal Water') r.filter=Filter("[osgb:descriptivegroup] = 'Tidal Water'") r.symbols.append(PolygonSymbolizer(Color('#99ffff'))) s.rules.append(r) r=Rule('unclassifiedFill','Unclassified') r.filter=Filter("[osgb:descriptivegroup] = 'Unclassified'") r.symbols.append(PolygonSymbolizer(Color('#ffffff'))) s.rules.append(r) r=Rule('railFill','Rail') r.filter=Filter("[osgb:descriptivegroup] = 'Rail' and [osgb:make]='Manmade'") r.symbols.append(PolygonSymbolizer(Color('#cccccc'))) s.rules.append(r) r=Rule('manmadeLandformPattern','') r.filter=Filter("[osgb:descriptivegroup] = 'Landform' and [osgb:make]='Manmade'") #r.symbols.append(PolygonPatternSymbolizer("/home/artem/pattern1.png",25,25)) s.rules.append(r) r=Rule('naturalLandformPattern','') r.filter=Filter("[osgb:descriptivegroup] = 'Landform' and [osgb:make]='Natural'") r.symbols.append(PolygonSymbolizer(Color('#ff0000'))) s.rules.append(r) r=Rule('madeSurfaceFill','Manmade') r.filter=Filter("[osgb:make]='Manmade'") r.symbols.append(PolygonSymbolizer(Color('#cccc99'))) s.rules.append(r) r=Rule('naturalSurfaceFill','Natural') r.filter=Filter("[osgb:make]='Natural'") r.symbols.append(PolygonSymbolizer(Color('#ccffcc'))) s.rules.append(r) r=Rule('madeSurfaceFill','Unknown') r.filter=Filter("[osgb:make]='Unknown'") r.symbols.append(PolygonSymbolizer(Color('#cccc99'))) s.rules.append(r) r=Rule('multipleSurfaceFill','Multiple') r.filter=Filter("[osgb:make]='Multiple'") r.symbols.append(PolygonSymbolizer(Color('#ffffcc'))) s.rules.append(r) #TODO! else filter m.append_style("TopographicArea",s) #line styles s=Style() r=Rule('buildingOverheadLine','Building Overhead') r.filter=Filter("[osgb:descriptivegroup] = 'Building' and [osgb:physicalpresence]='Overhead' ") r.symbols.append(LineSymbolizer(Color('#ff0000'),0.5)) #s.rules.append(r) r=Rule('structureOverheadLine','Structure Overhead') r.filter=Filter("[osgb:descriptiveterm] = 'Overhead Construction'") r.symbols.append(LineSymbolizer(Color('#ff0000'),0.5)) s.rules.append(r) r=Rule('buildingLine','Structure Overhead') r.filter=Filter("[osgb:descriptivegroup] = 'Building'") r.symbols.append(LineSymbolizer(Color('#ff0000'),0.7)) s.rules.append(r) r=Rule('waterBoldLine','Mean High Water (Springs)') r.filter=Filter("[osgb:descriptiveterm] = 'Mean High Water (Springs)'") r.symbols.append(LineSymbolizer(Color('#0099ff'),4.0)) s.rules.append(r) r=Rule('waterDashedLine','Mean Low Water (Springs)') r.filter=Filter("[osgb:descriptiveterm] = 'Mean Low Water (Springs)'") stk=Stroke() stk.color=Color('#0099ff') stk.add_dash(5.0,5.0) stk.width=1.0 r.symbols.append(LineSymbolizer(stk)) s.rules.append(r) r=Rule('waterLine','Inland Water') r.filter=Filter("[osgb:descriptivegroup] = 'Inland Water'") r.symbols.append(LineSymbolizer(Color('#0099ff'),0.7)) s.rules.append(r) r=Rule('general feature','line',0.001,5.0) r.filter=Filter("([osgb:featurecode] = 10046 or [osgb:featurecode] = 10058 ) and [osgb:physicallevel] = 'Edge/Limit'") s_=Stroke() s_.color=Color('#333333') s_.add_dash(4.0,4.0) s_.width=0.7 r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) r=Rule('general feature','line',0.001,5.0) r.filter=Filter("([osgb:featurecode] = 10046 or [osgb:featurecode] = 10058) and not ([osgb:physicallevel] = 'Edge/Limit')") s_=Stroke() s_.color=Color('#333333') s_.width=0.7 r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) r=Rule('general feature','line',0.001,5.0) r.filter=Filter("[osgb:featurecode] = 10168 or [osgb:featurecode] = 10189 or [osgb:featurecode] = 10052") s_=Stroke() s_.color=Color('#333333') s_.width=0.4 s_.add_dash(4.0,4.0) r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) r=Rule('water','line',0.001,5.0) r.filter=Filter("[osgb:featurecode] = 10087 or [osgb:featurecode] = 10085") s_=Stroke() s_.color=Color('#0099ff') s_.width=0.7 r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) r=Rule('rail','line',0.001,5.0) r.filter=Filter("[osgb:featurecode] >= 10162 and [osgb:featurecode] <=10164") s_=Stroke() s_.color=Color('#333333') s_.width=0.7 s_.add_dash(10,5) r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) r=Rule('slope','line',0.001,5.0) r.filter=Filter("[osgb:featurecode] = 10098") s_=Stroke() s_.color=Color('#669966') s_.width=2.0 s_.add_dash(4,4) r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) r=Rule('slope','line',0.001,5.0) r.filter=Filter("[osgb:featurecode] = 10097") s_=Stroke() s_.color=Color('#669966') s_.width=0.6 s_.add_dash(4,4) r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) r=Rule('parish','line',0.001,5.0) r.filter=Filter("[osgb:featurecode] = 10136") s_=Stroke() s_.color=Color('#ff00ff') s_.width=4.0 s_.add_dash(4,8) r.symbols.append(LineSymbolizer(s_)) s.rules.append(r) m.append_style("TopographicLine",s) def create_map(width,height) : m=Map(width,height) m.background=Color('white') params = {"type":"postgis","name":"mastermap-line","host":"localhost", "dbname":"gis","user":"postgres","password":"postgres", "table":"(select * from basingstoke where geometrytype(wkb_geometry)='POLYGON' and \"osgb:descriptivegroup\" <> 'Landform') as polygons"} lyr=CreateLayer(params) lyr.styles.append("TopographicArea") m.layers.append(lyr) params["table"]="(select * from basingstoke where geometrytype(wkb_geometry)='LINESTRING' and \"osgb:descriptivegroup\" <> 'Landform') as linestrings" lyr=CreateLayer(params) lyr.styles.append("TopographicLine") m.layers.append(lyr) #m.zoom_to_box(lyr.envelope()) m.zoom_to_box(Envelope(461000,153500,461400,153900)) return m if __name__=="__main__": m = create_map(1200,800) load_styles(m) render_to_file(m,'mastermap.png','png')
