Problem mit verschiedenen Mapnik Projektionen [solved]

Ein freundliches Hallo miteinander!

Ich bin gerade dabei Karten mittels Mapnik zu rendern und dabei verschiedene Projektionen direkt miteinander zu vergleichen. D.h. ich definiere zunächst einen Bereich und lasse mir diesen projeziert in diverse Koordinatensysteme (UTM Zone XY, allg. Mercator, Google Projektion, …) rendern. Hierzu habe ich zunächst einen eigenen Postgis/Mapnik Server gemäß diesem HowTo installiert (ich arbeite mit Ubunut 10.04) : http://weait.com/content/build-your-own-openstreetmap-server Das funktioniert auch alles soweit einwandfrei.

Um die für mich interessanten Projektionen einfach rendern zu lassen, habe ich das im Folgenden aufgeführte Python-Skript geschrieben. Ich denke es ist recht einfach zu verstehen, wenn man schonmal mit Mapnik/Python gearbeitet hat. Die Definitionen der einzelnen Projektionen stammen von http://www.spatialreference.org/

#!/usr/bin/python
import mapnik

mapfile = "osm.xml"

projections = {
    "latlon": "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs", # EPSG:4326
    "utm_32n": "+proj=utm +zone=32 +ellps=WGS84 +datum=WGS84 +units=m +no_defs", # EPSG:32632,
    "google": "+proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +a=6378137 +b=6378137 +units=m +no_defs", # SR-ORG:95
    "mercator_world": "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs", # SR-ORG:16
}

ll = (11.03, 49.42, 11.13, 49.48)

imgx = 1000
imgy = 1000

# Render an image for every projection
for projName, projDef in sorted(projections.items()):
    
    print "Projection: " + projName

    # Load the map data
    m = mapnik.Map(imgx, imgy)
    mapnik.load_map(m, mapfile)

    # Override projection defined in osm.xml    
    m.srs = projDef
    
    # Calculate projected boundaries
    prj = mapnik.Projection(projDef)
    c0 = prj.forward(mapnik.Coord(ll[0], ll[1]))
    c1 = prj.forward(mapnik.Coord(ll[2], ll[3]))
    
    # Apply bounding box
    bbox = mapnik.Envelope(c0.x, c0.y, c1.x, c1.y)
    m.zoom_to_box(bbox)
    
    # Render image
    im = mapnik.Image(imgx, imgy)
    mapnik.render(m, im)
    view = im.view(0, 0, imgx, imgy)
    view.save(projName + ".png", "png256")

Nun stellt sich mir aber folgendes Problem: die UTM-Projektion (utm_32n im Skript) erzeugt kein vernünftiges Ergebnis :frowning:. Das dabei erzeugte Bild ist einfach Ozean-blau. Zur Demonstration sind unten die Bilder zu sehen. Leider ist natürlich genau die UTM-Projektion die für mich wichtigste ;). Da ich auch nach ausführlichem Googlen und durchstreifen mehrerer Foren keine Lösung finden konnte, frage ich nun hier um Hilfe zu diesem Phänomen!!?? Hat vielleicht irgendjemand die Lösung oder zumindest einen brauchbaren Hinweis? Vielleicht habe ich auch einfach nur etwas übersehen?

Ich bin wirklich für jeden sachdienlichen Hinweis dankbar :slight_smile:

Grüße aus der Frankenmetropole Nürnberch…

google - Projektion:

mercator_world - Projektion:

latlon - Projektion:

utm_32n - Projektion:

Für den Fall, dass außer mir noch jemand über das Problem stolpern sollte, Daten eines lokalen Bezugssystems (z.B. UTM Zone 32) aus einem gobalen Bezugssystem (z.B. EPSG:4326) mit Mapnik rendern zu wollen, hier ist die Lösung:

http://old.nabble.com/Problems-with-some-Mapnik-projections-to28751475.html

Ein kleiner Patch hat das problem gelöst :wink: