Robert Coup wrote:

> Yeah, it's something I've been thinking about cleaning up.
> 
> Currently by default it:
>  - find the geometry from the geometry_columns table 
>  - figures out whether it needs to do transforms based on the map 
> projection & the geometry field projection
>  - takes all your filters and figures out which attribute fields it needs
>  - constructs a query for those attribute fields and the geometry
>  - does a where clause for the map extent against the geometry field
>  - runs it
> 
> Bad things:
>  - filters are all done in mapnik (if you're drawing all the data that's 
> fine, otherwise it gets too much data out)

This is a really important factor in the speed of tile rendering. In the 
past week, I've worked on the complete osm.xml file, adjusting filters 
and sql queries to optimize what's fetched from the db, and how many 
mapnik filters are needed.

In the end, I achieved an average speedup by a factor of 1.75 on my 
server*. The downside would be that some sql queries are getting rather 
long, and not as easy to understand for some people (although no real 
trickery is involved). Adding new filters means you also have to edit 
the sql.

I'll be commiting the simpler cases to SVN first. We'll have to see 
whether some of the more complex or longer queries can be reworked by 
doing more preprocessing in osm2pgsql.

* Running mod_tile's speedtest on a .5x.5 degree area boxed around 
Antwerp, z0 to z18.

>  - using custom sql is ... interesting - the general pattern is 
> table="(SELECT blah FROM ... WHERE ...) AS x", but you need to make sure 
> field names all line up.

For my optimisation experiment, I wrote a small perl script to fetch all 
the filters from the rules, eliminating duplicates, and all fields used 
in the Text/ShieldSymbolizer. I've been thinking about extending it to 
do better analysis and even suggest queries for a given layer/style(s) 
combination.

>  - edit the map xml / script, add a new filter and it just works
>  - great for simple use cases 

For average and simple stylesheets, this would usually suffice.

> I've been wondering whether we do something like:
> 
>  table= -> current behaviour

The current behaviour already breaks if you add a filter without adding 
it to the select in a subquery, unless you're doing 'select *' there.

>  sql= -> all on your own, you need to make sure the 
> fields/geometries/everything are correct.

+1 though, although I hope it would still add the bbox, obviously.


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

Reply via email to