Graham,

Yes Pablo's example should help. Basically Layers are an ordered list when 
attached to a Map, so you can grab then via indexing.

If you need to find a layer by name then you should loop through all layers 
until you match a name.

e.g.:

def find_layer_by_name(m,name):
   for lyr in m.layers:
       if lyr.name == name:
           return lyr
   return None

I've just also added a test which demonstrates the indexing functionality and 
the ability to load a map, then modify the layers within:

http://trac.mapnik.org/browser/trunk/tests/python_tests/layer_modification_test.py

That test was added to trunk but the basic functionality should work fine with 
any version of Mapnik.

The one catch is that datasources are validated at load time, which is why I 
left out the <Datasource /> element completely in that test. The alternative 
is: http://trac.mapnik.org/ticket/682

Dane


On Dec 21, 2010, at 9:23 AM, Graham Jones wrote:

> Thanks Pablo - I will have a look at your example and see if I can get it 
> working.
> 
> Regards
> 
> Graham.
> 
> On 21 December 2010 16:47, Pablo Carreira <[email protected]> wrote:
> Hi Graham, 
> 
> >What I would like to do is combine the two - have the main map definition in 
> >an XML file, but then tweak it using python before rendering (ie switching 
> >layers on and off, changing datasources >etc.).
> 
> >If anyone could confirm if this is supposed to be possible it would be 
> >appreciated, as would any pointers to examples or documentation?
> 
> 
> 
> Very interesting.
> 
> I've managed to do something like that, layer definitions in XML and some 
> styles in python, look at the example:
> 
> Bye.
> 
> 
> 
> 
> 
> import mapnik
> 
> 
> 
> mapfile='map_definitions.xml'
> m = mapnik.Map(5600, 2400)
> mapnik.load_map(m, mapfile)
> lay=m.layers[0] #this is a layer that was created in XML
> s = mapnik.Style()
> r=mapnik.Rule()
> 
> 
> t = mapnik.TextSymbolizer('name', 'DejaVu Sans Book', 10, 
> mapnik.Color('black'))
> t.allow_overlap=1
> t.label_placement=mapnik.label_placement.line
> 
> 
> r.symbols.append(t)
> s.rules.append(r)
> m.append_style('My Style',s)
> lay.styles.append('My Style')
> bbox = mapnik.Envelope(228723,7485713,230810,7484489)
> m.zoom_to_box(bbox)
> mapnik.render_to_file(m, 'temp_teste.jpg','jpeg')
> 
> 
> 
> 
> _______________________________________________
> Mapnik-users mailing list
> [email protected]
> https://lists.berlios.de/mailman/listinfo/mapnik-users
> 
> 
> 
> 
> -- 
> Graham Jones
> Hartlepool, UK.
> 
> _______________________________________________
> Mapnik-users mailing list
> [email protected]
> https://lists.berlios.de/mailman/listinfo/mapnik-users

_______________________________________________
Mapnik-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/mapnik-users

Reply via email to