Hallo Holger,

mir ist nicht ganz klar was Du da machst. Normalerweise würde ich die Kacheln verschmelzen und dann georeferenzieren. Dabei gibt man ja den EPSg Code vor. Einfacher ist es wahrscheinlich, sich mit Maperitive eine Grafik der Gegend mit einem hohen Zoom zu erstellen. Da ist dann netterweise gleich die World-File dabei. Die sollte man dann noch etwas bearbeiten und den extent (siehe unten) auslesen. Danach sieht die mapfile dann ungefähr so aus.
Grundsätzlich gibst Du im Layer den mit PROJECTION EPSG Codes des vorliegenden Materials an und im Kopf der Mapfile und bei METADATA den Code, der bspw von JOSM angefragt wird. gdal sollte das dann automatisch umsetzen. Um ein shapefile in ein sichtbares Bild umzuwandeln,brauchst Du shp2img und musst regeln festlegen, wie bestimmte Dinge in der Shapefile auszusehen haben. Siehe CLASS im Beispiel unten

mapfile header


MAP
    NAME OSM-WMS
    FONTSET "/osm/mapserver/fonts.list"
    STATUS ON
    UNITS METERS


    WEB         
        METADATA
            "wms_title"     "Thomas WMS-Server"
            "labelcache_map_edge_buffer" "-10"
            "wms_onlineresource" "to_be_replaced_by_wms.py"
            "wms_srs"       "EPSG:4326 EPSG:900913"
            "wms_connectiontimeout" "90"
        END
    IMAGEPATH    "/osm/mapserver/imagepath/"

    END
    CONFIG "PROJ_LIB" "/usr/share/proj"
    CONFIG "MS_ERRORFILE" "stderr"
    EXTENT 0 0 180 180
    MAXSIZE 4000
    SIZE 800 800
    UNITS dd
    IMAGECOLOR "#B3C6D4" 
    PROJECTION
        "init=epsg:4326"
    END

Layer eines georeferenzierten Bildes


 LAYER
    NAME "Hiddensee"
    STATUS ON
    TYPE RASTER

    DATA "/osm/mapserver/hiddensee/Hiddensee_tiled.tif"

    PROJECTION
          "init=epsg:4326"
    END

    METADATA
     "wms_title"  "Hiddensee"
     "wms_extent" "13.065000 54.504001 13.132001 54.605000"
     "wms_srs"    "EPSG:4326"
     "copyright"    ""
    END
  END

Beispiel einer gerenderten Shapefile


  LAYER
    NAME "RoadsVmap0"
    TYPE LINE
    METADATA
    "wms_title" "RoadsVmap0"        
    "wms_srs"    "EPSG:4326"  #copied from other layer
    "wms_extend" "17.071282 41.521486 24.781496 46.529345"
    END
    STATUS ON
    TRANSPARENCY 100
    PROJECTION
    "init=epsg:4326" 
    END
    CLASS
       NAME "trans-road-I" 
       STYLE
         WIDTH 2        
         COLOR 37 213 202     
       END
    END
  END

Den extent bekomme ich so “python print_wms_extent.py meinbild.tif”

Das Bild in Tiles aufteilen “gdal_translate -of GTiff -co “TILED=YES” vorher.tif nachher.tif”

Und schon vorab verschiedene Zoomlevel bereitstellen “gdaladdo -ro --config USE_RRD YES -r gauss meinbild.tif 2 4 8 16 32 64 128 256”

MINSCALEDENOM/MAXSCALEDENOM sind afaik dafür, wenn Du Rendering Regeln brauchst, also wenn der Mapserver als Renderer arbeitet wenn Du abhängig vom Zoomlevel unterschiedliche Daten/Shapefiles nehmen willst. Das sieht dann bspw so aus


LAYER
    STATUS ON 
    GROUP "default" 
    PROJECTION "init=epsg:4326" 
    END 
    CONNECTIONTYPE postgis CONNECTION "host=localhost dbname=osm user=www-data password=www-data port=5432" 
    PROCESSING "CLOSE_CONNECTION=DEFER" 
    maxscaledenom 25010 
    minscaledenom 10010
    TYPE LINE
    NAME "roadsclose"
    DATA "way from (select way, osm_id ,highway,ref, namesr, tunnel from osm_line where highway is not null order by priority desc) as foo using unique osm_id using srid=4326"
    LABELITEM "namesr"
    CLASSITEM "highway"
    CLASS
        EXPRESSION "motorway"
        TEXT ([ref])
        STYLE
            WIDTH 10
            OUTLINEWIDTH 1
            OUTLINECOLOR "#24277A"
        END
        STYLE
            WIDTH 10
            COLOR "#4F719D"
        END
        LABEL
            TYPE TRUETYPE FONT sc PARTIALS FALSE OUTLINEWIDTH 3
            PRIORITY 1
            FONT scb
            SIZE 9
            MINDISTANCE 150
            MAXLENGTH 6
            COLOR 255 255 255
            BACKGROUNDCOLOR "#FF5C1D"
            BACKGROUNDSHADOWCOLOR "#FDB462"
        END
    END