[Talk-de] Neuer Kartenstil auf openstreetmap.de

Stephan Knauss osm at stephans-server.de
So Feb 20 18:09:28 UTC 2011


On 20.02.2011 18:33, M∡rtin Koppenhoefer wrote:
> Apropos (Du scheinst Dich auszukennen): wie wird eigentlich die
> z_order bei Mapnik innerhalb desselben Layers (gemeint ist mit
> demselben layer-tag-wert) bestimmt/vorgegeben? Macht das osm2pgsql?

ja, das berechnet osm2pgsql. Hier der code:
http://trac.openstreetmap.org/browser/applications/utils/export/osm2pgsql/output-pgsql.c?rev=25198
303	
304	static int add_z_order(struct keyval *tags, int *roads)
305	{
306	    const char *layer   = getItem(tags, "layer");
307	    const char *highway = getItem(tags, "highway");
308	    const char *bridge  = getItem(tags, "bridge");
309	    const char *tunnel  = getItem(tags, "tunnel");
310	    const char *railway = getItem(tags, "railway");
311	    const char *boundary= getItem(tags, "boundary");
312	
313	    int z_order = 0;
314	    int l;
315	    unsigned int i;
316	    char z[13];
317	
318	    l = layer ? strtol(layer, NULL, 10) : 0;
319	    z_order = 10 * l;
320	    *roads = 0;
321	
322	    if (highway) {
323	        for (i=0; i<nLayers; i++) {
324	            if (!strcmp(layers[i].highway, highway)) {
325	                z_order += layers[i].offset;
326	                *roads   = layers[i].roads;
327	                break;
328	            }
329	        }
330	    }
331	
332	    if (railway && strlen(railway)) {
333	        z_order += 5;
334	        *roads = 1;
335	    }
336	    // Administrative boundaries are rendered at low zooms so we 
prefer to use the roads table
337	    if (boundary && !strcmp(boundary, "administrative"))
338	        *roads = 1;
339	
340	    if (bridge && (!strcmp(bridge, "true") || !strcmp(bridge, "yes") 
|| !strcmp(bridge, "1")))
341	        z_order += 10;
342	
343	    if (tunnel && (!strcmp(tunnel, "true") || !strcmp(tunnel, "yes") 
|| !strcmp(tunnel, "1")))
344	        z_order -= 10;
345	
346	    snprintf(z, sizeof(z), "%d", z_order);
347	    addItem(tags, "z_order", z, 0);
348	
349	    return 0;
350	}






Mehr Informationen über die Mailingliste Talk-de