[Mapit] BoundingBoxes | TileSets | Coordinates

Bernhard Herzog bh at intevation.de
Tue May 22 15:21:33 CEST 2001


Frank.Schumacher at t-online.de (Frank Schumacher) writes:

> Hallo,
> 
> vor kurzem habe ich MapIt heruntergeladen und noch einige Fragen offen, die
> ich mir selbst noch nicht beantworten konnte, da ich im Code noch nicht so
> zu Hause bin. Außerdem ist Python noch ziemlich neu für mich.
> Aber zur Sache.

I'm replying in English for the mailing list participants who don't know
German.

First of all, the epscut script was created as a quick hack to render
the europe sample map (http://www.mapit.de/mapit/europe.de/) because we
wanted to have free example data set. The map was generated from PDF
files from the CIA World Factbook. Any usefulness beyond this is more or
less accidental :)

> 1. Herstellung eines Tile-Sets aus einer EPS:
> Ich habe schon gesehen, dass es funktioniert.
> a) Wie kann ich einen Offset vom Ursprung der BoundingBox definieren, ab dem
> das Tileset beginnt. Oder besser noch: eine InnerBoundingBox als Untermenge
> der BoundingBox definieren, die die erlaubte und gewünschte Region des
> Tilesets definiert?

[is there a way to select a subregion of the eps for rendering with
epscut instead of the whole BoundingBox?]

Well, there isn't one at the moment. The easiest solution is probably to
edit the EPS file by hand so that the BoundingBox comment describes your
region of interest.

> b) Was ist, wenn das aus einer EPS-Datei generierte Tileset nicht aufgeht.
> Soll heissen: Bei definierter Tilegröße in Pixeln gibt es Randtiles, die
> entweder über die BoundingBox ins Niemandslands hinausragen (oder die Grenze
> der BBox nicht ganz erreichen)? Wird hinzugedichtet oder abgeschnitten? Wie?
> Wo im Code stehts?

[What happens at the border of the Tilesets (in case the tiles don't fit
the region exactly)?]

If the BoundingBox is accurate and you use only integers for the factors
argument to the make_tile_hierarchy function the generated tiles should
fit exactly. However, since the BoundingBox comment describes the
bounding box with integers it's possible that there's a thin white
border.

> 2. Beziehung zwischen Pixelgröße der Tiles und den Koordinaten (EPSCUT)
> a) Wie genau ergeben sich die Koordinaten aus den Pixelgrößen des Tilesets
> bei der Verwendung von EPSCUT? Wo im Code steht das? 

[In epscut, where does the tilesets coordinate system come from?]

The unit of the coordinate system is one pixel in the tileset for the
highest magnification factor. The origin is the lower left corner of the
lower left tile (1x1.png), x increases to the right, y increases
upwards.

The relevant code is in make_tile_hierarchy. The coordinate system is
derived from the bounding box, the overview_size and the highest
magnification factor. The scaling factors are chosen so that the
bounding box fits exactly into overview_size while preserving the aspect
ratio. The sizes of the tile larger tile sets are basically just
multiples of overview_width and overview_height.

> Und ist das an
> vorhandene Koordinatensysteme anzupassen (etwa in der Weise, dass ich den
> Markern, die ich schon Gauß-Krüger-koordiniert habe, auf diese Weise eine
> passende Karte unterschieben kann)?

[How do I convert between the MapIt! internal coordinate system and
other coordinate systems?] 

MapIt! itself only deals with the coordinate system used for the tiles
and markers. However, if you know how to convert your coordinates to the
standard postscript coordinate system, i.e. the one which BoundingBox
comment uses, you can add the following lines to make_tile_hierarchy to
make epscut print the transformation from the standard postscript
coordinate system to the internal coordinate system. With that
information you should be able to transform your makers.

    # Print the transformation from EPS coordinates to MapIt internal
    # coordinates
    llx, lly, urx, ury = eps.bbox    
    print "Transformation from EPS-coordinates (px, py)"
    print "to MapIt! coordinates (mx, my):"
    print "mx = %.17g * (px - %.17g)" % (reference_size[0] / float(eps.width),
                                         llx)
    print "my = %.17g * (py - %.17g)" % (reference_size[1] / float(eps.height),
                                         lly)



  Bernhard
-- 
Intevation GmbH                                 http://intevation.de/
Sketch                                 http://sketch.sourceforge.net/
MapIt!                                               http://mapit.de/




More information about the Mapit mailing list

This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)