[mapserver-users] Rewarping/Reprojection with GDAL and -wo EXTRA_SOURCE parameter

Eichner, Andreas - SID-NLKM Andreas.Eichner at sid.sachsen.de
Wed Dec 18 07:25:52 PST 2013


Hello Heiko,

the problem is the way mapserver builds the source extent. A quick fix might be introducing a processing directive to force mapserver using the layer's full extent:

diff --git a/mapdraw.c b/mapdraw.c
index 992838d..7f2179e 100644
--- a/mapdraw.c
+++ b/mapdraw.c
@@ -948,6 +948,9 @@ int msDrawVectorLayer(mapObj *map, layerObj *layer, imageObj *image)
   if(layer->transform == MS_TRUE) {
     searchrect = map->extent;
 #ifdef USE_PROJ
+    if (msLayerGetProcessingKey(layer, "FORCE_FULL_EXTENT"))
+      searchrect = layer->extent;
+    else
     if((map->projection.numargs > 0) && (layer->projection.numargs > 0))
       msProjectRect(&map->projection, &layer->projection, &searchrect); /* project the searchrect to source coords */
 #endif

With this small patch you can rebuild mapserver and use
  PROCESSING "FORCE_FULL_EXTENT=YES" 
In a vector layer .

As said, this should be considered a quick fix. A bug should be reported on this as other parts in the code path seem to deal more nicely in such situations.

HTH

> -----Ursprüngliche Nachricht-----
> Von: Heiko Schröter [mailto:schroete at iup.physik.uni-bremen.de]
> Gesendet: Mittwoch, 18. Dezember 2013 12:19
> An: Eichner, Andreas - SID-NLKM; mapserver-users at lists.osgeo.org
> Betreff: Re: [mapserver-users] Rewarping/Reprojection with GDAL and -
> wo EXTRA_SOURCE parameter
> 
> I've omitted the postgis stuff in the mapfile, because of access
> restrictions.
> In the EPSG file i have placed this dummy epsg code for reprojection:
> 
> <snip>
> <0815> +proj=ortho +over +lon_0=0 +lat_0=90 +ellps=WGS84 +datum=WGS84
> +units=m +no_defs  <>
> <snap>
> 
> 
> MAP
>      NAME WELT
> 
>      OUTPUTFORMAT
>        NAME "aggpng24"
>        DRIVER AGG/PNG
>        MIMETYPE "image/png"
>        IMAGEMODE RGB
>        EXTENSION "png"
>      END
> 
>      STATUS ON
>      SHAPEPATH "/your/shape/path/"
> 
>      TRANSPARENT ON
>      MAXSIZE 10000
> 
>      # Requesting polar plot with a dummy "EPSG:0815" in epsg file
>      # <0815> +proj=ortho +over +lon_0=0 +lat_0=90 +ellps=WGS84
> +datum=WGS84 +units=m +no_defs  <>
>      PROJECTION
>       "init=epsg:4326"
>      END
> 
>      WEB
>       IMAGEPATH "/var/www/localhost/htdocs/tmpimages/"
>       IMAGEURL "/tmpimages/"
>        METADATA
>         "ows_srs" "EPSG:4326 EPSG:0815 EPSG:0816 EPSG:3857
> EPSG:900913"
>         "wms_enable_request" "*"
>       END
>      END
> 
>      LAYER
>          EXTENT -180 -90 180 90
>          NAME "KARTE1"
>          TYPE RASTER
>          STATUS OFF
>          OPACITY 100
>          DATA "YourMap.png"
>          METADATA
>              "wms_title" "karte layer"
>          END
>          PROJECTION
>              "init=epsg:4326"
>          END
> 
>          CLASS
>              NAME "karte_class"
>              OUTLINECOLOR 0 0 0
>              COLOR 180 180 180
>              SYMBOL 0
>          END
>      END # Layer
> 
>      LAYER
>          TYPE LINE
>          STATUS OFF
>          EXTENT -180 -90 180 90
>          NAME "GRID"
>          OPACITY 50
>          METADATA
>              "wms_title" "grid layer"
>          END
>          PROJECTION
>              "init=epsg:4326"
>          END
>          CLASS
>              NAME "Graticule"
>              STYLE
>              COLOR 180 90 0
>              MAXWIDTH 2
>              MINWIDTH 2
>              END
>          END
>          GRID
>              LABELFORMAT "DD" MAXARCS 1 MININTERVAL 15 MAXINTERVAL 60
> MAXSUBDIVIDE 360
>          END
>      END # Layer
> END # Ende Map
> 
> 
> 
> 
> 
> Am 18.12.2013 11:27, schrieb Eichner, Andreas - SID-NLKM:
> > Can you provide a simple test case, probably a MAP file with inline
> data? I've created some simple test data but I am unable to reproduce
> the problem.
> >
> >> -----Ursprüngliche Nachricht-----
> >> Von: Heiko Schröter [mailto:schroete at iup.physik.uni-bremen.de]
> >> Gesendet: Dienstag, 17. Dezember 2013 21:01
> >> An: Eichner, Andreas - SID-NLKM; mapserver-users at lists.osgeo.org;
> >> Heiko Schröter
> >> Betreff: Re: [mapserver-users] Rewarping/Reprojection with GDAL
> and -
> >> wo EXTRA_SOURCE parameter
> >>
> >> Seems not to work. Failure can be reproduced by changing BBOX
> params.
> >> I've setup a test site with three layers so you may have a look.
> >> Blue Marble = RASTER
> >> Grid = LINE
> >> Coloured Rect = POSTGIS
> >>
> >>
> >> Warping ok from epsg4326->ortho:
> >>
> >> http://www.iup.uni-bremen.de/warehouse/cgi-bin/laura?BBOX=-
> 6500000,-
> >> 6500000,6500000,6500000&FORMAT=IMAGE/PNG&FROMDAT=2006-08-
> >> 06%2000:00&HOEHE=-
> >>
> 1&LAYERS=KARTE1,WILLI,GRID&MAP=/var/www/localhost/mapserver/laura.map
> >>
> &PRODUKT=stro3_21&REQUEST=GETMAP&SERVICE=WMS&SRS=EPSG:0815&STYLES=&TI
> >> ME=2006-10-06%2000:00/2006-10-08%2023:59&TODAT=2006-08-
> >> 07%2023:59&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=600&HEIGHT=600
> >>
> >> Warping distorted:
> >>
> >> http://www.iup.uni-bremen.de/warehouse/cgi-bin/laura?BBOX=-
> 4500000,-
> >> 4500000,4500000,4500000&FORMAT=IMAGE/PNG&FROMDAT=2006-08-
> >> 06%2000:00&HOEHE=-
> >>
> 1&LAYERS=KARTE1,WILLI,GRID&MAP=/var/www/localhost/mapserver/laura.map
> >>
> &PRODUKT=stro3_21&REQUEST=GETMAP&SERVICE=WMS&SRS=EPSG:0815&STYLES=&TI
> >> ME=2006-10-06%2000:00/2006-10-08%2023:59&TODAT=2006-08-
> >> 07%2023:59&TRANSPARENT=FALSE&VERSION=1.1.1&WIDTH=600&HEIGHT=600
> >>
> >>
> >>
> >> Am 17.12.2013 17:57, schrieb Eichner, Andreas - SID-NLKM:
> >>> Can you try if PROCESSING "POLYLINE_NO_CLIP=YES" helps on TYPE
> LINE
> >> layers?
> >>>> -----Ursprüngliche Nachricht-----
> >>>> Von: Heiko Schröter [mailto:schroete at iup.physik.uni-bremen.de]
> >>>> Gesendet: Dienstag, 17. Dezember 2013 16:46
> >>>> An: Eichner, Andreas - SID-NLKM; mapserver-users at lists.osgeo.org
> >>>> Betreff: Re: [mapserver-users] Rewarping/Reprojection with GDAL
> >> and -
> >>>> wo EXTRA_SOURCE parameter
> >>>>
> >>>> Thanks for the hint, but sorry no, does not change rewarping
> >>>> behaviour
> >>>> of POLYGON or LINE Layers.
> >>>> Distortion and missing parts do remain.
> >>>>
> >>>> The odd thing:
> >>>> The projection of all layers is ok if the BBOX equals or is
> >> greater
> >>>> than
> >>>> max extension of the map.
> >>>> i.e. BBOX=-6500000,-6500000,6500000,6500000 [proj=ortho units=m]
> >>>> By "zooming" in i.e. reducing the BBOX the RASTER layer rewarps
> >> ok,
> >>>> POLYGON and LINE layers do not.
> >>>>
> >>>>
> >>>> Am 17.12.2013 16:11, schrieb Eichner, Andreas - SID-NLKM:
> >>>>> Looks like that causes the same effect as setting
> >>>>>      PROCESSING "LOAD_WHOLE_IMAGE=YES"
> >>>>>
> >>>>>> -----Ursprüngliche Nachricht-----
> >>>>>> Von: mapserver-users-bounces at lists.osgeo.org
> [mailto:mapserver-
> >>>> users-
> >>>>>> bounces at lists.osgeo.org] Im Auftrag von Heiko Schröter
> >>>>>> Gesendet: Dienstag, 17. Dezember 2013 14:09
> >>>>>> An: mapserver-users at lists.osgeo.org
> >>>>>> Betreff: [mapserver-users] Rewarping/Reprojection with GDAL
> and
> >> -
> >>>> wo
> >>>>>> EXTRA_SOURCE parameter
> >>>>>>
> >>>>>> To make use of it in mapserver a hint has been given in an old
> >>>>>> mailing
> >>>>>> thread (sorry, lost the source) to adjust the following code
> >>>> snippet
> >>>>>> in
> >>>>>> resample.c:
> >>>>>>
> >>>>>> Version: mapserver-6.4.0
> >>>>>> resample.c
> >>>>>> <snip>
> >>>>>> /* -----------------------------------------------------------
> --
> >> --
> >>>> ---
> >>>>>> -- */
> >>>>>>       /*      Project desired extents out by 2 pixels, and
> then
> >>>> strip
> >>>>>> to      */
> >>>>>>       /*      available
> >>>>>> data.                                                 */
> >>>>>>       /*
> >>>>>> --------------------------------------------------------------
> --
> >> --
> >>>> --
> >>>>>> */
> >>>>>>       memcpy( &sOrigSrcExtent, &sSrcExtent, sizeof(sSrcExtent)
> );
> >>>>>>       sSrcExtent.minx = floor(sSrcExtent.minx-1.0);
> >>>>>>       sSrcExtent.maxx = ceil (sSrcExtent.maxx+1.0);
> >>>>>>       sSrcExtent.miny = floor(sSrcExtent.miny-1.0);
> >>>>>>       sSrcExtent.maxy = ceil (sSrcExtent.maxy+1.0);
> >>>>>> <snap>
> >>>>>>
> >>>>>> Changing the -/+1.0 to -/+1250.0, for example, warps the
> RASTER
> >>>> image
> >>>>>> correctly.
> >>>>>>
> >>>>
> >>>> --
> >>>> ----------------------------------------------------------------
> --



More information about the mapserver-users mailing list