Wow, thank you Mike. This is quite a bit of info. I am reading over the Google explanation of different ways to use and represent Coordinates. Also very interesting and useful is the Map Provider Tutorial on the Modest Maps site about cutting up a an existing map (The Oakland Bus Lines).

I definitely understand the basic concept of generating the tiles. Now, from what else I understand, and you have touched upon, one will only generate as many tiles as are needed for any particular application. For example, if I were making a map of Central Park, I would generate tiles only for the park and not include the rest of the city and beyond. And in this example, if I were to be allowing for say 10 levels of zoom, then I would be generating 10 sets of tiles at different resolutions for those zoom levels correct?

Once I get a little further your XML settings for minimum / maximum zoom levels will fit into place.

Thank you very much, I'm sure I will have more questions but this is a great start.

Collin


On May 5, 2008, at 12:39 PM, Michal Migurski wrote:

Hello Collin,

There's kind of a lot buried in your question. I'm also new to Mapnik,
but I've had a lot of experience dealing with maps as a consumer for
our Modest Maps project. A lot of my current work in tile generation
is tuned specifically for consumption by that particular Flash-based
library.

Some short answers: generating tiles is just like generating lots of
small images, each one covering a small square area of your projected
world. Because there are *so many* tiles in an extensive map, it
usually makes sense to use a caching layer and generate only those
tiles that you need, at whatever zoom level is requested by your user.
I'm not sure what books would be available on a topic as green as this
one, but I did recently order Krygier's Making Maps out of curiosity
(it hasn't shipped yet):
        http://www.amazon.com/gp/product/1593852002

Mapnik has a "render_tile_to_file()" that takes some extra parameters
above and beyond "render_to_file" - seems relevant here, but I haven't
been able to find a satisfactory explanation for how it works, so I'm
ignoring it at the moment.

It helps to understand how a typical slippy map divides the world into
x, y, and z coordinates. Google and MS both have short primers here:
        http://msdn.microsoft.com/en-us/library/bb259689.aspx
        
http://code.google.com/apis/maps/documentation/overlays.html#Google_Maps_Coordinates

Once you start dealing with multiple zoom levels, you'll find that
your style rules need minimum and maximum scale denominators, e.g.:
        <MaxScaleDenominator>100000</MaxScaleDenominator>
        <MinScaleDenominator>50000</MinScaleDenominator>

Numbers that seem to work for the projection above are:
        Zoom 1, min/max: 200000000 / 500000000
        Zoom 2, min/max: 100000000 / 200000000
        Zoom 3, min/max: 50000000 / 100000000
        Zoom 4, min/max: 25000000 / 50000000
        Zoom 5, min/max: 12500000 / 25000000
        Zoom 6, min/max: 6500000 / 12500000
        Zoom 7, min/max: 3000000 / 6500000
        Zoom 8, min/max: 1500000 / 3000000
        Zoom 9, min/max: 750000 / 1500000
        Zoom 10, min/max: 400000 / 750000
        Zoom 11, min/max: 200000 / 400000
        Zoom 12, min/max: 100000 / 200000
        Zoom 13, min/max: 50000 / 100000
        Zoom 14, min/max: 25000 / 50000
        Zoom 15, min/max: 12500 / 25000
        Zoom 16, min/max: 5000 / 12500
        Zoom 17, min/max: 2500 / 5000
        Zoom 18, min/max: 1000 / 2500

Paul Smith from Everyblock has an excellent high-level article on ALA
that explains how Mapnik fits into a broader system for tile delivery:
        http://www.alistapart.com/articles/takecontrolofyourmaps

FWIW, the decision to use OpenLayers and TileCache in Paul's write-up
is definitely not set in stone. For a project I'm working on
currently, I've written some of my own tile-rendering code in Python,
and I'm serving up the imagery in a selection of Modest Maps and
OpenLayers front ends. For the tile-rendering portion, I've been using
a bunch of the helper classes from Modest Maps to handle coordinate
systems and projections, specifically the Core.Coordinate class and
Microsoft projection:
        http://modestmaps.mapstraction.com/trac/browser/trunk/py/ModestMaps

OpenLayers in particular takes a bit of wrangling to act like the
Mercator projection used by Google, Yahoo, Microsoft, and others. This
projection looks like it's fast becoming a de facto standard for
general web cartography. One way to get your OpenLayers map to behave
properly is to feed these args to its constructor in a dictionary:

        maxExtent: new OpenLayers.Bounds(-20037508.3427892,
-20037508.3427892, 20037508.3427892, 20037508.3427892),
        numZoomLevels: 18,
        maxResolution: 156543.0339,
        units: 'm',
        displayProjection:  new OpenLayers.Projection('EPSG:4326'),
        projection: 'EPSG:900913',
Something I'm handling at the moment is the need to overshoot your
tile boundaries a bit when rendering, and ways to make that less of a
hit. The general idea here is that if you have derived features that
cross a tile boundary (for example, a really fat road whose centerline
is on one tile, but whose width extends onto a second tile), you want
to add some padding to your tiles to account for such features before
cutting them back, otherwise the road will never show up on the second
tile and your map will look wrong. OpenStreetMap renders their tiles
in swaths of 8x8 with a 128 pixel padding to make this less of a
performance hit, for example.

I hope this braindump is helpful, I'm elbows-deep in all of this right
now, and when I come up for air in a week or two I'll try to write all
of this up in an article of some kind. Paul and Dominic on this list
have been wildly helpful with installation & technical assistance.

-mike.

On May 5, 2008, at 7:10 AM, Collin wrote:

Hello,

I am completely new to this stuff so please bear with me. I am just
teaching myself Python and Django and don't have a background in
programming really (I can find my way around in Javascript and spent
a lot of time doing Max/MSP stuff so i am not completely ignorant
either).

It took me a week but I was able to get Mapnik installed properly on
OS X Leopard.

I have now gone through the two short tutorials on the Mapnik Wiki
and am able to generate a .png of the world and alter the colors,
one while setting those parameters in an XML file.

Now what? How does one generate tiles rather than one image? And for
that matter, is the idea to generate a set of tiles for each zoom
level you plan to support? Maybe I am missing some common knowledge
about this and if so I apologize, and ask if someone could please
point me to resources on this. Where does a beginner start?

Are there any books this list could recommend on web cartography? I
just ordered this one, which seemed pretty good:
http://tinyurl.com/6m5y3b


Thanks!

----------------------------------------------------------------
michal migurski- [EMAIL PROTECTED]
                 415.558.1610

_______________________________________________
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