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

Heiko Schröter schroete at iup.physik.uni-bremen.de
Wed Dec 18 09:55:37 PST 2013


Hello Andreas,

thanks for the patch.

The POSTGIS (i.e. POLYGON) and RASTER layers are fine in any zoom or pan 
level. The LINE layer is ok if the BBOX has not been paned to far of 
center (for the "ortho" projection) and if extremly zoomed in the poles 
are cut.

It looks like that POLYGON and LINE Layers are treated a little bit 
differently.

If you like here is the test site with the patch included.

Zoomed in, plus poles cut out in LINE layer:
http://www.iup.uni-bremen.de/warehouse/cgi-bin/laura?BBOX=-2500000,-2500000,2500000,2500000&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:0816&STYLES=&TIME=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

Half a LINE layer missing when BBOX to far off center:
http://www.iup.uni-bremen.de/warehouse/cgi-bin/laura?BBOX=-6500000,-6500000,2500000,2500000&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:0816&STYLES=&TIME=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

Regards
Heiko




Am 18.12.2013 16:25, schrieb Eichner, Andreas - SID-NLKM:
>
> 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