[Talk-de] WMS/orthofoto/JOSM

Hermann Schwaerzler hermann.schwaerzler at chello.at
Fr Jul 13 09:45:53 UTC 2007


hallo

ich habe ja zugesagt, ein HOW-TO zum thema
"orthofotos via mapserver/WMS in JOSM verwenden"
zu machen.
nachdem ich keine zeit habe, in absehbarer zeit ein richtiges howto zu
machen, hier mal schnell eine stichwortsammlung, die vielleicht auch
schon weiterhilft (ACHTUNG: langer text!). ich habe aber natürlich schon
zeit, fragen zu beantworten. :-)

*mapserver*
ich verwende debian testing am desktop, drum habe ich es mir einfach
gemacht:
"apt-get install cgi-mapserver"
installiert das cgi-programm des mapservers (und alles was dazu gehört).
die ausgabe, des dabei installierten mapserv-binaries:
"/usr/lib/cgi-bin/mapserv -v"
  MapServer version 4.10.2 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP
  OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=FREETYPE SUPPORTS=WMS_SERVER
  SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT
  SUPPORTS=WCS_SERVER SUPPORTS=THREADS SUPPORTS=GEOS INPUT=EPPL7
  INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE DEBUG=MSDEBUG

wichtig dürfte es sein, bei INPUT auch GDAL dabei zu habe, weil damit
ganz viele bild-formate verfügbar werden (u.a. GeoTIFF). und natürlich
muss "SUPPORTS=WMS_SERVER" da stehen!

*orthofoto*
mein bild ist ein GeoTIFF. mit den (ebenfalls via apt-get) installiert
gdal-utilities ("apt-get install gdal-bin" komme ich zu den notwendigen
informationen:

"gdalinfo orthofoto.tif":
  Driver: GTiff/GeoTIFF
  Size is 34367, 24572
  Coordinate System is:
  PROJCS["unnamed",
    GEOGCS["MGI",
        DATUM["Militar_Geographische_Institute",
            SPHEROID["Bessel 1841",6377397.155,299.1528128000033,
                AUTHORITY["EPSG","7004"]],
            AUTHORITY["EPSG","6312"]],
        PRIMEM["Greenwich",0],
        UNIT["degree",0.0174532925199433],
        AUTHORITY["EPSG","4312"]],
    PROJECTION["Transverse_Mercator"],
    PARAMETER["latitude_of_origin",0],
    PARAMETER["central_meridian",10.33333333333333],
    PARAMETER["scale_factor",1],
    PARAMETER["false_easting",0],
    PARAMETER["false_northing",-5000000],
    UNIT["metre",1,
        AUTHORITY["EPSG","9001"]]]
  Origin = (-35000.000000000000000,253516.509826782130403)
  Pixel Size = (0.500000000000000,-0.500000000000000)
  Metadata:
    AREA_OR_POINT=Area
  Image Structure Metadata:
    COMPRESSION=PACKBITS
  Corner Coordinates:
  Upper Left (-35000.000, 253516.510) ( 9d52'9.99"E, 47d25'12.22"N)
  Lower Left (-35000.000, 241230.510) ( 9d52'13.47"E, 47d18'34.36"N)
  Upper Right (-17816.500, 253516.510) (10d 5'49.88"E, 47d25'14.72"N)
  Lower Right (-17816.500, 241230.510) (10d 5'51.66"E, 47d18'36.86"N)


*map-file*
das ist denke ich mir das entscheidende. mit hilfe von
http://mapserver.gis.umn.edu/docs/howto/wms_server
und
http://www.mobilegeographics.com/mapserver/
habe ich folgendes map-file zusammengeschustert (es kann so übernommen
werden und muss nur in den angegebenen positionen angepasst werden):
bei EXTENT sind die anzugebenden werte
x-wert-minimum y-wert-minimum x-wert-maximum y-wert-maximum
des orthofotos. diese am besten mit gdalinfo ermitteln
("Corner Coordinates" [siehe oben]).

  MAP
     NAME Map_Name
     STATUS ON
     EXTENT -35000.000 241230.510 -17816.500 253516.510  # !!anpassen!!
     UNITS METERS  # !!anpassen!!; weglassen, wenn einheit grad ist
     WEB
       METADATA
         "wms_title"     "WMS Titel"  ##required
         "wms_onlineresource" "http://localhost/cgi-bin/mapserv?" ##requ
         "wms_srs"       "EPSG:4326"  ##recommended
       END
     END
     # projection muss angepasst werden an die projektion des orthofotos
     PROJECTION  "proj=tmerc"
               "lon_0=10d20"
               "x_0=0" "y_0=-5000000"
               "ellps=bessel"
               "towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232"
               "units=m" "no_defs"
     END

     LAYER
         NAME "Orthofoto"
         METADATA
            "wms_title"    "Titel"  ##required
         END
         TYPE RASTER
         STATUS ON
         DATA "/home/hermann/tmp/orthofoto.tif"   #!!anpassen!!
         PROJECTION  "proj=tmerc"  ## recommened  #!!anpassen!! wie oben
               "lon_0=10d20"
               "x_0=0" "y_0=-5000000"
               "ellps=bessel"
               "towgs84=577.326,90.129,463.919,5.137,1.474,5.297,2.4232"
               "units=m" "no_defs"
         END
     END
  END

in einer text-datei speichern (z.b. als "orthofoto.map").

*URL*
lokal einen http-server starten. ich verwende apache. dort muss das
verzeichnis, in dem das "mapserv"-programm liegt z.b. als "cgi-bin"
verfügbar sein.
jetzt müsste folgende url funktionieren (anpassen muss man den pfad bei
"map=" und den namen bei "layers=" [NAME bei LAYER im mapfile]).
http://localhost/cgi-bin/mapserv?map=/pfad/zu/orthofoto.map&SERVICE=WMS&VERSION=1.1.1&request=GetMap&layers=Orthofoto&srs=EPSG:4326

diese URL so in JOSM als weitere daten-quelle beim WMS-plugin angeben.

sie kann auch im browser getestet werden, dann muss am ende aber noch
ein "&width=80&height=80" angefügt werden. das dabei runtergeladene bild
wird zumindest bei mir nicht dargestellt. es funktionier in JOSM
trotzdem, solange nicht eine fehlermeldung oder eine aufforderung eine
datei vom typ "application/vnd.ogc.wms_xml" zu speichern erscheint.


*tuning*
das laden des bildes kann relativ lange dauern. deswegen kann es
sinnvoll sein, folgendes zu tun:

um den faktor 2 bis 3 schneller geht's im JOSM, wenn der mapserver das
orthofoto nicht umprojizieren muss. d.h. wenn man mit gdalwarp das bild
selbst auf WGS84 umprojiziert.

nochmal einen vorteil (ca 100% schneller) bringt es, mit "gdaltranslate
-co TILED=YES" das bild in tiles aufteilt.


so, das war's einstweilen
hermann




Mehr Informationen über die Mailingliste Talk-de