Hi, thx for your answers. It seems that possibility 2 solves the problem. Although I can't understand wherefore this is only a problem for portrait and not for landscape. Now we have the problem that we do need exactly this BBOX because we want to print a user given scale. So is it possible to send a float width and height to mapserver or do we have to change the logic in mapwms.c?
thx best regards Michael >-----Ursprüngliche Nachricht----- >Von: Steve Lime [mailto:[email protected]] >Gesendet am: Freitag, 17. Juli 2009 00:21 >An: Pfeiffer Michael; Frank Warmerdam >Cc: [email protected] >Betreff: Re: [mapserver-users] Problems with non-square pixels > >The nonsquare_enabled check is occurring *before* the WMS bbox (in >map->extent) is converted >to the MapServer extent model so I believe the code is correct. I'd lean >towards option 2 below. > >Steve > >>> On 7/16/2009 at 2:40 PM, in message <[email protected]>, Frank Warmerdam <[email protected]> wrote: >> Michael Pfeiffer wrote: >>> Try this wms request >>> >>> >> http://www.sogis1.so.ch/cgi-bin/sogis/sogis_print_test.wms?SERVICE=WMS&VERSION= >> >> 1.1.1&REQUEST=GetMap&FORMAT=image/jpeg&LAYERS=Orthofoto&STYLES=&TRANSPARENT=true&BB >> >> OX=605035.8790650383,224864.94050038885,609110.4623983715,230528.7877226111&WI >> >> DTH=6417&HEIGHT=8921&SRS=EPSG:21781 >>> A0 portrait >>> >>> This request needs over 1 minute. >> >> Michael, >> >> There seems to be a modest difference in the aspect ratio of the BBOX >> and the SIZE in the given request. The logic in mapwms.c that tests whether >> non-square mode needs to be used looks like this: >> >> /* Check whether requested BBOX and width/height result in non-square >> pixels >> */ >> nonsquare_enabled = msTestConfigOption( map, "MS_NONSQUARE", MS_FALSE ); >> if (!nonsquare_enabled) >> { >> double dx, dy, reqy; >> dx = MS_ABS(map->extent.maxx - map->extent.minx); >> dy = MS_ABS(map->extent.maxy - map->extent.miny); >> >> reqy = ((double)map->width) * dy / dx; >> >> /* Allow up to 1 pixel of error on the width/height ratios. */ >> /* If more than 1 pixel then enable non-square pixels */ >> if ( MS_ABS((reqy - (double)map->height)) > 1.0 ) >> { >> if (map->debug) >> msDebug("msWMSLoadGetMapParams(): enabling non-square >> pixels.\n"); >> msSetConfigOption(map, "MS_NONSQUARE", "YES"); >> nonsquare_enabled = MS_TRUE; >> } >> } >> >> I suspect the asymmetry is just enough to amount more than one pixel at >> this size. I didn't run all the numbers but I suspect at smaller paper >> sizes (smaller SIZE values) the assymmetry amounts to less than one pixel. >> I'm not sure why it would affect portrait and not landscape. I only ran >> the ratios on the case you mentioned was slow. >> >> So there are a couple of possibilities here. >> >> 1) It is possible the above computation is wrong. I vaguely recall there >> is an issue with map->extent actually being from the center of edge >> pixel to the center of edge pixel, not the outer edges, in which case >> the calculation should perhaps be: >> reqy = MS_ABS(((map->width - 1) * dy / dx) + 1); >> which might or might not make a difference in this case. >> >> 2) Perhaps you just need to generate your WMS requests with more precise >> BBOXes corresponding to the aspect ratio of the SIZE requested. >> >> Well, I'm sure there could be other possibilities too. >> >> Best regards, _______________________________________________ mapserver-users mailing list [email protected] http://lists.osgeo.org/mailman/listinfo/mapserver-users
