Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.labeling.app / org.gvsig.labeling.app.mainplugin / src / main / java / org / gvsig / labeling / symbol / SymbolUtils.java @ 40911

History | View | Annotate | Download (1.94 KB)

1
package org.gvsig.labeling.symbol;
2

    
3
import org.gvsig.fmap.mapcontext.MapContext;
4
import org.gvsig.fmap.mapcontext.ViewPort;
5
import org.gvsig.fmap.mapcontext.rendering.symbols.CartographicSupport;
6

    
7
public class SymbolUtils {
8
        
9
        /**
10
         * Calculates the distance in pixels corresponding to the provided length,
11
         * according to the current rendering context (output dpi, map scale, map units) and the
12
         * symbol cartographic settings (unit, size, and unit reference system).
13
         *
14
         * @param cartographicElement CartographicSupport object which contains the reference system
15
         * and the measuring units for the provided length
16
         * @param length The length to be computed in pixels. The length is supposed to be
17
         * provided in the units defined in the cartographicElement
18
         * @param viewPort The viewport, which defines the relationship between pixels and maps units
19
         * @param dpi The resolution (dots per inch) of the target display device
20
         * (printer, screen, etc)
21
         * @return The distance in pixels corresponding to the provided length
22
         */
23
        public static double getCartographicLength(
24
                        CartographicSupport cartographicElement,
25
                        double length, ViewPort viewPort, double dpi) {
26
                
27
                int unit = cartographicElement.getUnit();
28
                double lengthInPixel = length;
29

    
30
                if (unit != -1) {
31
                        double[] trans2Meter=MapContext.getDistanceTrans2Meter();
32
                        if (cartographicElement.getReferenceSystem() == CartographicSupport.WORLD) {
33
                                double dist1PixelInMeters = viewPort.getDist1pixel()*trans2Meter[viewPort.getMapUnits()];
34
                                double realWidthMeter = length*trans2Meter[unit];
35
                                lengthInPixel = realWidthMeter/dist1PixelInMeters;
36
                        } else if (cartographicElement.getReferenceSystem() == CartographicSupport.PAPER) {
37
                                double lengthInInches = 1/trans2Meter[7]*trans2Meter[unit]*length;
38
                                lengthInPixel = lengthInInches*dpi;
39
                        }
40
                } else{
41
                        double scale=dpi/72;
42
                        lengthInPixel=lengthInPixel*scale;
43
                }
44
                return  (lengthInPixel);
45

    
46
        }
47
}