[mapserver-users] Problems with non-square pixels
Pfeiffer Michael
Michael.Pfeiffer at bd.so.ch
Fri Jul 17 00:27:22 PDT 2009
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:Steve.Lime at dnr.state.mn.us]
>Gesendet am: Freitag, 17. Juli 2009 00:21
>An: Pfeiffer Michael; Frank Warmerdam
>Cc: mapserver-users at lists.osgeo.org
>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 <4A5F8230.2080704 at pobox.com>, Frank
Warmerdam <warmerdam at pobox.com> 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,
More information about the MapServer-users
mailing list