Krunoslav Hrnjak created GEOS-4965:
--------------------------------------
Summary: Fix DPI param
Key: GEOS-4965
URL: https://jira.codehaus.org/browse/GEOS-4965
Project: GeoServer
Issue Type: Bug
Components: WMS
Affects Versions: 2.1.3
Environment:
Test environment info:
General information about GeoServer
Build Information
Version 2.1.3
Subversion Revision 16668
Build Date 21-Dec-2011 11:55
GeoTools Version 2.7.4 (rev 38443)
WMS request:
http://arpis-dev01-aio03.arpis.local:8080/geoserver/wms/reflect?layers=sf:Restricted_Line&BBOX=598534.854774036,4917029.553902023,598544.854774036,4917039.553902023&width=1181&format_options=layout:foo;dpi=300
Tomcat log:
Request: reflect
Time = null
Filter = null
Format = null
Buffer = 0
Height = 0
Width = 1181
Layers = [org.geoserver.wms.MapLayerInfo@anonymised.com]
Transparent = false
Filters = null
SRS = null
Styles = [StyleImpl[ name=line]]
Legend = false
MaxFeatures = null
Bbox = ReferencedEnvelope[598534.854774036 : 598544.854774036, 4917029.553902023 : 4917039.553902023]
RemoteOwsType = null
RemoteOwsURL = null
Env = {}
FormatOptions = {DPI=300=true, LAYOUT=foo}
Angle = 0.0
CQLFilter = null
Elevation = NaN
FeatureId = null
Palette = null
Sld = null
SldBody = null
StartIndex = null
ViewParams = null
FeatureVersion = null
Tiled = false
Crs = null
BgColor = java.awt.Color[r=255,g=255,b=255]
ValidateSchema = false
SldVersion = null
TilesOrigin = null
Exceptions = SE_XML
KMScore = 40
KMattr = true
Version = null
Request = GetMap
RawKvp = {BBOX=598534.854774036,4917029.553902023,598544.854774036,4917039.553902023, FORMAT_OPTIONS=layout:foo;dpi=300, LAYERS=sf:Restricted_Line, WIDTH=1181}
Get = true
BaseUrl = http://arpis-dev01-aio03.arpis.local:8080/geoserver/
RequestCharset = UTF-8
Reporter: Krunoslav Hrnjak
Assignee: Andrea Aime
Attachments: DPI.xls, Restricted_Line.zip
Dear geo folks,
I would like to state few questions regarding DPI WMS vendor parameter and make some proposal how to enhance WMS output in this case.
It seems to me that DPI parameter does not have any kind of effect on WMS output. Any kind of value can be submitted to DPI parameter, even alphanumerical one.
For this discussion I suggest to publish new sample data on GeoServer. I have attached Restricted_Line.shp (produced in EPSG:26713) that has several rectangles of different lengths: 1km, 0.5km, 100m, 10m, 1m, 10cm. On these rectangles it is possible to check how to produce print out and verify scale.
Let's begin with rectangle 10mx10m rectangle. I will print out this rectangle on the paper and print out will be 10cm and use printer with 300dpi resolution. In this case scale ratio is 1:10m/10cm = 1:100. Since printer resolution is 300 dpi I have to request picture that is 10cm/2,54cm/inch*300d/inch=1181 dots (pixels) width.
WMS decorations scaleline and scaleratio will be used.
cd $GEO-SERVER-DATA-DIR
mkdir layouts
cd layouts
vi foo.xml
and paste:
<layout>
<decoration type="scaleline" affinity="bottom,left" offset="36,6"/>
<decoration type="scaleratio" affinity="top,left" offset="6,6" size="auto"/>
</layout>
So let's create the WMS request:
1. First let's grab the BBOX over WFS: http://arpis-dev01-aio03.arpis.local:8080/geoserver/wfs?request=GetFeature&version=1.1.0&typeName=sf:Restricted_Line&outputFormat=text/xml;%20subtype=gml/3.2&CQL_FILTER=NAME=‘10m’
2. Let's get object's picture http://arpis-dev01-aio03.arpis.local:8080/geoserver/wms/reflect?layers=sf:Restricted_Line&BBOX=598534.854774036,4917029.553902023,598544.854774036,4917039.553902023&width=1181&format_options=layout:foo;dpi=300
3. Save picture to your hard disk
4. I have opened picture in IrfanView and set DPI to 300 (it would be nice if this value would already be encoded in picture).
5. After printing on paper, object size was 10 cm, but scaleratio is not calculated on the right way. Instead of 1:100 it is written 1:30, and also scale line representing 1m length was only 0.8cm long, instead of 1cm. Both should be fixed.
From this discussion it is obvious that dpi parameter does not have any impact on scale line and scale ratio parameters. And I am not sure how it is connected with DPI Scaling announcement http://blog.geoserver.org/2010/09/04/geoserver-21-beta-released/ where it is written:
"By default GeoServer renders images at a resolution of 90 DPI. While this is acceptable for the standard screen it is not acceptable for print which requires a higher resolution. Now it is possible to supply a format option to a WMS request on the fly that controls the DPI setting."
By my opinion expected behavior would be the following:
BBOX, HEIGHT or WIDTH and DPI params should be used to calculate scale ratio:
1. First calculate distance between maxx and minx to get object size in some unit (I suggest meters)
2. Divide WIDTH/DPI*2,54*100 to get print out size in meters
3. Calculate scale ratio as object-size/print-size
(in case of HEIGHT param received this procedure should be done with maxy and miny)
I am not sure will dpi param have some influence on how picture is printed out. There is a huge problem in double styling, one made for screen and one for print out. Usually layer that looks good on screen but if the same styling is used during printing lines are usually too narrow, and also scalline is too small in this case. I believe dpi params should made some kind of changes on print out when high dpi resolution is used since if there is not any change on styling lines are too narrow. So dpi should do some king of magic here.
As I can see it is possible to send anything as DPI param and no error is received like:
http://arpis-dev01-aio03.arpis.local:8080/geoserver/wms/reflect?layers=sf:Restricted_Line&BBOX=598534.854774036,4917029.553902023,598544.854774036,4917039.553902023&width=1181&format_options=layout:foo;dpi=Tihana
I understand why it takes value 'Tihana' since this is name of one beautiful young lady, but why it takes words like War or Kill?
Looking forward to hear from you.
Recommended readings:
Maybe to some people this is well known but it can set rigt was of thinking regarding DPI param encoded in digital picture: http://www.scantips.com/no72dpi.html
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://jira.codehaus.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira