⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scaledisplaylayer.java

📁 openmap java写的开源数字地图程序. 用applet实现,可以像google map 那样放大缩小地图.
💻 JAVA
字号:
/* ********************************************************************** * *  ROLANDS & ASSOCIATES Corporation *  500 Sloat Avenue *  Monterey, CA 93940 *  (831) 373-2025 * *  Copyright (C) 2002, 2003 ROLANDS & ASSOCIATES Corporation. All rights reserved. *  Openmap is a trademark of BBN Technologies, A Verizon Company * * * ********************************************************************** * * $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/layer/ScaleDisplayLayer.java,v $ * $Revision: 1.6.2.2 $ * $Date: 2005/08/09 19:21:28 $ * $Author: dietrick $ * * ********************************************************************** */package com.bbn.openmap.layer;import java.beans.PropertyVetoException;import java.util.Properties;import javax.swing.JPanel;import javax.swing.JRadioButton;import com.bbn.openmap.LatLonPoint;import com.bbn.openmap.omGraphics.OMGraphicList;import com.bbn.openmap.omGraphics.OMLine;import com.bbn.openmap.omGraphics.OMText;import com.bbn.openmap.proj.GreatCircle;import com.bbn.openmap.proj.Length;import com.bbn.openmap.proj.Projection;import com.bbn.openmap.util.PropUtils;/** * Layer objects are components which can be added to the MapBean to * make a map. * <p> * Layers implement the ProjectionListener interface to listen for * ProjectionEvents. When the projection changes, they may need to * refetch, regenerate their graphics, and then repaint themselves * into the new view. * <p> * ### Layer used by the overview handler <br> * scaleLayer.class=com.rolands.jtlsweb.map.layer.ScaleDisplayLayer * <br> * scaleLayer.prettyName=Scale <br> * scaleLayer.lineColor=ff777777 <br> * scaleLayer.textColor=ff000000 <br> * scaleLayer.unitOfMeasure=nm <br> * scaleLayer.locationXoffset=-10 <br> * scaleLayer.locationYoffset=-20 <br> * scaleLayer.width=150 <br> * scaleLayer.height=10 <br> * <br> * unitOfMeasure - any com.bbn.openmap.proj.Length instance returned * by Length.get(string). <br> * locationXoffset - offset in pixels from left/right, positive from * left edge, negative from right edge <br> * locationYoffset - offset in pixels from top/bottom, positive from * top edge, negative from bottom edge <br> * width - width of scale indidator bar in pixels <br> * height - height of scale indidator bar in pixels <br> * <br> */public class ScaleDisplayLayer extends OMGraphicHandlerLayer {    public ScaleDisplayLayer() {        super();        setProjectionChangePolicy(new com.bbn.openmap.layer.policy.ListResetPCPolicy(this));    }    // Color variables for different line types    protected java.awt.Color lineColor = null;    protected java.awt.Color textColor = null;    // Default colors to use, if not specified in the properties.    protected String defaultLineColorString = "FFFFFF";    protected String defaultTextColorString = "FFFFFF";    protected String defaultUnitOfMeasureString = "km";    protected int defaultLocationXoffset = -10;    protected int defaultLocationYoffset = -10;    protected int defaultWidth = 150;    protected int defaultHeight = 10;    // property text values    public static final String LineColorProperty = "lineColor";    public static final String TextColorProperty = "textColor";    public static final String UnitOfMeasureProperty = "unitOfMeasure";    public static final String LocationXOffsetProperty = "locationXoffset";    public static final String LocationYOffsetProperty = "locationYoffset";    public static final String WidthProperty = "width";    public static final String HeightProperty = "height";    protected String unitOfMeasure = null;    protected Length uom = Length.get(defaultUnitOfMeasureString);    protected String uomAbbr = uom.getAbbr();    protected int locationXoffset = defaultLocationXoffset;    protected int locationYoffset = defaultLocationYoffset;    protected int width = defaultWidth;    protected int height = defaultHeight;    /**     * Sets the properties for the <code>Layer</code>. This allows     * <code>Layer</code> s to get a richer set of parameters than     * the <code>setArgs</code> method.     *      * @param prefix the token to prefix the property names     * @param properties the <code>Properties</code> object     */    public void setProperties(String prefix, Properties properties) {        super.setProperties(prefix, properties);        prefix = com.bbn.openmap.util.PropUtils.getScopedPropertyPrefix(prefix);        lineColor = PropUtils.parseColorFromProperties(properties, prefix                + LineColorProperty, defaultLineColorString);        textColor = PropUtils.parseColorFromProperties(properties, prefix                + TextColorProperty, defaultTextColorString);        String unitOfMeasure = properties.getProperty(prefix                + UnitOfMeasureProperty);        setUnitOfMeasure(unitOfMeasure);        locationXoffset = PropUtils.intFromProperties(properties, prefix                + LocationXOffsetProperty, defaultLocationXoffset);        locationYoffset = PropUtils.intFromProperties(properties, prefix                + LocationYOffsetProperty, defaultLocationYoffset);        width = PropUtils.intFromProperties(properties,                prefix + WidthProperty,                defaultWidth);        height = PropUtils.intFromProperties(properties, prefix                + HeightProperty, defaultHeight);    }    public synchronized OMGraphicList prepare() {        int w, h, left_x = 0, right_x = 0, lower_y = 0, upper_y = 0;        Projection projection = getProjection();        OMGraphicList graphics = new OMGraphicList();        w = projection.getWidth();        h = projection.getHeight();        if (locationXoffset < 0) {            left_x = w + locationXoffset - width;            right_x = w + locationXoffset;        } else if (locationXoffset >= 0) {            left_x = locationXoffset;            right_x = locationXoffset + width;        }        if (locationYoffset < 0) {            upper_y = h + locationYoffset - height;            lower_y = h + locationYoffset;        } else if (locationYoffset >= 0) {            upper_y = locationYoffset;            lower_y = locationYoffset + height;        }        graphics.clear();        OMLine line = new OMLine(left_x, lower_y, right_x, lower_y);        line.setLinePaint(lineColor);        graphics.add(line);        line = new OMLine(left_x, lower_y, left_x, upper_y);        line.setLinePaint(lineColor);        graphics.add(line);        line = new OMLine(right_x, lower_y, right_x, upper_y);        line.setLinePaint(lineColor);        graphics.add(line);        LatLonPoint loc1 = projection.inverse(left_x, lower_y);        LatLonPoint loc2 = projection.inverse(right_x, lower_y);        float dist = GreatCircle.spherical_distance(loc1.radlat_,                loc1.radlon_,                loc2.radlat_,                loc2.radlon_);        dist = uom.fromRadians(dist);        if (dist > 1)            dist = (int) dist;        String outtext = dist + " " + uomAbbr;        OMText text = new OMText((left_x + right_x) / 2, lower_y - 3, ""                + outtext, OMText.JUSTIFY_CENTER);        text.setLinePaint(textColor);        graphics.add(text);        graphics.generate(projection);        return graphics;    }    /**     * Getter for property unitOfMeasure.     *      * @return Value of property unitOfMeasure.     */    public String getUnitOfMeasure() {        return this.unitOfMeasure;    }    /**     * Setter for property unitOfMeasure.     *      * @param unitOfMeasure New value of property unitOfMeasure.     *      * @throws PropertyVetoException     */    public void setUnitOfMeasure(String unitOfMeasure) {        if (unitOfMeasure == null)            unitOfMeasure = Length.KM.toString();        this.unitOfMeasure = unitOfMeasure;        //There is a bug in the Length.get() method that will not        // return        //the correct (or any value) for a requested uom.        //This does not work:        //uom = com.bbn.openmap.proj.Length.get(unitOfMeasure);        //Therefore, The following code correctly obtains the proper        // Length object.        Length[] choices = Length.getAvailable();        uom = null;        for (int i = 0; i < choices.length; i++) {            if (unitOfMeasure.equalsIgnoreCase(choices[i].toString())                    || unitOfMeasure.equalsIgnoreCase(choices[i].getAbbr())) {                uom = choices[i];                break;            }        }        // of no uom is found assign Kilometers as the default.        if (uom == null)            uom = Length.KM;        uomAbbr = uom.getAbbr();    }    javax.swing.Box palette;    JRadioButton meterRadioButton;    JRadioButton kmRadioButton;    JRadioButton nmRadioButton;    JRadioButton mileRadioButton;    javax.swing.ButtonGroup uomButtonGroup;    private JPanel jPanel3;    private JPanel jPanel2;    private JPanel jPanel1;    /** Creates the interface palette. */    public java.awt.Component getGUI() {        if (palette == null) {            if (com.bbn.openmap.util.Debug.debugging("graticule"))                com.bbn.openmap.util.Debug.output("GraticuleLayer: creating Graticule Palette.");            palette = javax.swing.Box.createVerticalBox();            uomButtonGroup = new javax.swing.ButtonGroup();            jPanel1 = new JPanel();            jPanel2 = new JPanel();            jPanel3 = new JPanel();            kmRadioButton = new JRadioButton();            meterRadioButton = new JRadioButton();            nmRadioButton = new JRadioButton();            mileRadioButton = new JRadioButton();            jPanel1.setLayout(new javax.swing.BoxLayout(jPanel1, javax.swing.BoxLayout.Y_AXIS));            jPanel2.setBorder(new javax.swing.border.TitledBorder("Unit Of Measure"));            kmRadioButton.setText("KM");            kmRadioButton.setToolTipText("Kilometers");            uomButtonGroup.add(kmRadioButton);            jPanel3.add(kmRadioButton);            meterRadioButton.setText("M");            meterRadioButton.setToolTipText("Meters");            uomButtonGroup.add(meterRadioButton);            jPanel3.add(meterRadioButton);            nmRadioButton.setText("NM");            nmRadioButton.setToolTipText("Nautical Miles");            uomButtonGroup.add(nmRadioButton);            jPanel3.add(nmRadioButton);            mileRadioButton.setText("Mile");            mileRadioButton.setToolTipText("Statute Miles");            uomButtonGroup.add(mileRadioButton);            jPanel3.add(mileRadioButton);            jPanel2.add(jPanel3);            jPanel1.add(jPanel2);            palette.add(jPanel1);            java.awt.event.ActionListener al = new java.awt.event.ActionListener() {                public void actionPerformed(java.awt.event.ActionEvent e) {                    String ac = e.getActionCommand();                    if (ac.equalsIgnoreCase(UnitOfMeasureProperty)) {                        JRadioButton jrb = (JRadioButton) e.getSource();                        setUnitOfMeasure(jrb.getText());                        doPrepare();                    } else {                        com.bbn.openmap.util.Debug.error("Unknown action command \""                                + ac                                + "\" in GraticuleLayer.actionPerformed().");                    }                }            };            kmRadioButton.addActionListener(al);            kmRadioButton.setActionCommand(UnitOfMeasureProperty);            meterRadioButton.addActionListener(al);            meterRadioButton.setActionCommand(UnitOfMeasureProperty);            nmRadioButton.addActionListener(al);            nmRadioButton.setActionCommand(UnitOfMeasureProperty);            mileRadioButton.addActionListener(al);            mileRadioButton.setActionCommand(UnitOfMeasureProperty);        }        if (unitOfMeasure.equalsIgnoreCase("km")) {            kmRadioButton.setSelected(true);        } else if (unitOfMeasure.equalsIgnoreCase("m")) {            meterRadioButton.setSelected(true);        } else if (unitOfMeasure.equalsIgnoreCase("nm")) {            nmRadioButton.setSelected(true);        } else if (unitOfMeasure.equalsIgnoreCase("mile")) {            mileRadioButton.setSelected(true);        }        return palette;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -