Convert Rasters for Map Serving
Overview
The following scripts convert images into suitable geotiffs for fast map serving without losing clarity. Completely based upon Paul Ramsey's Geotiff for Dummies guide.
Either run in the folder containing the geotiffs or pass directory as argument. Generated files are created in an 'output' sub-folder.
Follow up process would be to build a vrt - see Mosaic thousands of raster images
Projection set?
Check that the source file have a projection set? Check by using gdalinfo.exe <some file> in the command line window. If not then a -s_srs "EPSG:27700" can be added to the gdal_translate line in each batch file.
First up, convert GeoTiffs into more GeoTiffs. All these scripts are attached to this page.
@ECHO OFF SET runDir=%cd% :: if provided directory if "%~1"=="" ( echo no folder given ) else ( cd /d %1 echo processing tiff files in %cd% ) echo processing tiff files in %cd% :: create \output folder if not present IF NOT EXIST %cd%\output ( mkdir output ) :: set compression, tiles and colour space for %%f in (*.tif) do ( :: echo %cd%\%%f gdal_translate -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -co TILED=YES "%cd%\%%f" "%cd%\output\%%f" ) :: add overviews cd output for %%f in (*.tif) do ( gdaladdo --config COMPRESS_OVERVIEW JPEG --config PHOTOMETRIC_OVERVIEW YCBCR --config INTERLEAVE_OVERVIEW PIXEL -r average "%cd%\%%f" 2 4 8 16 ) cd /d %runDir%
Convert ECW files into GeoTiffs
@ECHO OFF SET runDir=%cd% :: if provided directory if "%~1"=="" ( echo no folder given ) else ( cd /d %1 echo processing tiff files in %cd% ) echo processing tiff files in %cd% :: create \output folder if not present IF NOT EXIST %cd%\output ( mkdir output ) :: set compression, tiles and colour space for %%f in (*.ecw) do ( :: echo %cd%\%%f gdal_translate -of GTiff -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -co TILED=YES "%cd%\%%f" "%cd%\output\%%~nf.tif" ) :: add overviews cd output for %%f in (*.tif) do ( gdaladdo --config COMPRESS_OVERVIEW JPEG --config PHOTOMETRIC_OVERVIEW YCBCR --config INTERLEAVE_OVERVIEW PIXEL -r average "%cd%\%%f" 2 4 8 16 ) cd /d %runDir%
Convert single band GeoTiffs into GeoTiffs.
@ECHO OFF SET runDir=%cd% :: if provided directory if "%~1"=="" ( echo no folder given ) else ( cd /d %1 echo processing tiff files in %cd% ) echo processing tiff files in %cd% :: create \output folder if not present IF NOT EXIST %cd%\output ( mkdir output ) :: set compression, tiles and colour space for %%f in (*.tif) do ( :: echo %cd%\%%f gdal_translate -expand rgb -co COMPRESS=JPEG -co PHOTOMETRIC=YCBCR -co TILED=YES "%cd%\%%f" "%cd%\output\%%f" ) :: add overviews cd output for %%f in (*.tif) do ( gdaladdo --config COMPRESS_OVERVIEW JPEG --config PHOTOMETRIC_OVERVIEW YCBCR --config INTERLEAVE_OVERVIEW PIXEL -r average "%cd%\%%f" 2 4 8 16 ) cd /d %runDir%
Creating a Web Mapping Service
Create a tileindex. This can be done in QGIS or command line.
cd <folder> dir /s/b *.tif > optfile.txt gdaltindex tileindex.shp --optfile optfile.txt
If you have multiple folders to process you can create a batch file that takes in a input file containing a list of directories
With an input.txt such as:
Create a .map file.
MAP EXTENT 0 0 700000 1300000 INCLUDE "_common.map" UNITS METERS TEMPLATEPATTERN '.' IMAGECOLOR 238 238 237 IMAGETYPE AGG_Q RESOLUTION 72 SHAPEPATH "../../" SIZE 512 512 MAXSIZE 8192 STATUS ON CONFIG "MS_ERRORFILE" "D:/mapserver/tmp/logs/base_rasters_debug.log" NAME "Raster_WMS" PROJECTION "init=epsg:27700" END DEBUG 0 IMAGETYPE png OUTPUTFORMAT NAME "png" MIMETYPE "image/png" DRIVER "AGG/PNG" EXTENSION "png" IMAGEMODE "RGBA" #CHANGED TRANSPARENT TRUE FORMATOPTION "TRANSPARENT=ON" END OUTPUTFORMAT NAME "AGG_JPEG" MIMETYPE "image/jpeg" DRIVER "AGG/JPEG" EXTENSION "JPG" IMAGEMODE "RGB" FORMATOPTION "interlace=off" END LEGEND IMAGECOLOR 255 255 255 KEYSIZE 20 10 KEYSPACING 5 5 LABEL SIZE small TYPE bitmap BUFFER 0 COLOR 0 0 0 FORCE FALSE MINDISTANCE -1 MINFEATURESIZE -1 OFFSET 0 0 PARTIALS TRUE MAXLENGTH 25 WRAP " " END POSITION LL STATUS OFF END QUERYMAP COLOR 255 255 0 SIZE -1 -1 STATUS OFF STYLE HILITE END SCALEBAR COLOR 0 0 0 IMAGECOLOR 255 255 255 INTERVALS 4 LABEL SIZE MEDIUM TYPE BITMAP BUFFER 0 COLOR 0 0 0 FORCE FALSE MINDISTANCE -1 MINFEATURESIZE -1 OFFSET 0 0 PARTIALS TRUE END POSITION LL SIZE 200 3 STATUS OFF STYLE 0 UNITS MILES END WEB IMAGEPATH "D:\mapserver\tmp\\" IMAGEURL "" TEMPLATE "globexml.xml" METADATA ows_title "Rasters" ows_srs "EPSG:27700" ows_abstract "WMS Rasters" ows_enable_request "*" END END LAYER NAME "Aerial" TYPE RASTER STATUS OFF METADATA "ows_title" "Aerial Imagery" "ows_abstract" "Aerial Imagery" END TILEINDEX "<folder>\tileindex.shp" END END
Create an iShare basemap legacy mapsource
- mapsource > map name should be the .map file above.
- details > name should be the name of the layer in the .map file.
- details > URL should be the mapserver end-point.
Test the WMS and then publish.