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

📄 geocrossdemolayer.java

📁 openmap java写的开源数字地图程序. 用applet实现,可以像google map 那样放大缩小地图.
💻 JAVA
字号:
// **********************************************************************////<copyright>////BBN Technologies, a Verizon Company//10 Moulton Street//Cambridge, MA 02138//(617) 873-8000////Copyright (C) BBNT Solutions LLC. All rights reserved.////</copyright>//**********************************************************************////$Source:///cvs/darwars/ambush/aar/src/com/bbn/ambush/mission/MissionHandler.java,v//$//$RCSfile: GeoCrossDemoLayer.java,v $//$Revision: 1.1.2.1 $//$Date: 2005/08/09 21:17:55 $//$Author: dietrick $////**********************************************************************package com.bbn.openmap.layer.test;import java.awt.BasicStroke;import java.awt.Color;import java.util.Iterator;import com.bbn.openmap.geo.Geo;import com.bbn.openmap.geo.Intersection;import com.bbn.openmap.layer.editor.EditorLayer;import com.bbn.openmap.omGraphics.OMAction;import com.bbn.openmap.omGraphics.OMGraphic;import com.bbn.openmap.omGraphics.OMGraphicList;import com.bbn.openmap.omGraphics.OMLine;import com.bbn.openmap.omGraphics.OMPoint;import com.bbn.openmap.util.Debug;/** * This layer was developed to provide a simple picture of how vector * cross products work with Geos to solve intersection problems. The * best way to use this class is to turn off all other layers and put * the map in Orthographic projection. When the layer is active, a * series of buttons will appear in the ToolPanel, allowing you to * draw Great Circle lines. It's helpful to change the color of each * line before you create it, so you can see the relationship of the * line to the previous one drawn. * <P> *  * This layer will interate through the list if drawn lines, looking * for the intersection point between consecutive lines. For each * line, a point will be drawn in that line's color representing the * cross-normalized point for the line's enpoints - that is, it's the * point perpendicular to the great circle plane created by the line. * You can also think of it as the point that is 90 degrees away from * every point on the line. The dotted lines are the path from the * previous line's crossNornmalized point and the current line's * crossNormalized point. Lastly, the cross-normalization of the end * points of the dashed line will result in the point where the * original lines would intersect if they are close enough. Depending * on the direction that the lines were drawn, that point may actually * be the anitpode (on the other side of the sphere) of the point you * are interested in, but this layer doesn't bother to investigate * that yet. * <P> *  * That's all this layer does.  The properties for this layer are: *  * <pre> *          geocross.class=com.bbn.openmap.layer.test.GeoCrossDemoLayer *          geocross.prettyName=GEO Cross Demonstration *          geocross.editor=com.bbn.openmap.layer.editor.DrawingEditorTool *          geocross.showAttributes=true *          geocross.loaders=lines *          geocross.mouseModes=Gestures *          geocross.lines.class=com.bbn.openmap.tools.drawing.OMLineLoader * </pre> *  * @author dietrick */public class GeoCrossDemoLayer extends EditorLayer {    protected OMGraphicList lines = new OMGraphicList();    /**     *      */    public GeoCrossDemoLayer() {        super();    }    public OMGraphicList prepare() {        OMGraphicList list = getList();        if (list == null) {            list = new OMGraphicList();        } else {            list.clear();        }        OMLine oldLine = null;        Geo ogc = null;        for (Iterator it = lines.iterator(); it.hasNext();) {            OMLine line = (OMLine) it.next();            float[] ll = line.getLL();            Geo g1 = new Geo(ll[0], ll[1]);            Geo g2 = new Geo(ll[2], ll[3]);            Geo gc = g1.crossNormalize(g2);            OMPoint p = new OMPoint((float) gc.getLatitude(), (float) gc.getLongitude(), 3);            p.setLinePaint(line.getLinePaint());            p.setFillPaint(line.getFillPaint());            p.setStroke(line.getStroke());            line.addArrowHead(true);            list.add(line);            list.add(p);            if (oldLine != null) {                float[] ll2 = oldLine.getLL();                Geo g3 = new Geo(ll2[0], ll2[1]);                Geo g4 = new Geo(ll2[2], ll2[3]);                OMLine line2 = new OMLine((float) ogc.getLatitude(), (float) ogc.getLongitude(), (float) gc.getLatitude(), (float) gc.getLongitude(), OMGraphic.LINETYPE_GREATCIRCLE);                line2.setLinePaint(line.getLinePaint());                line2.setStroke(new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0f, new float[] {                        10, 10 }, 0f));                line2.addArrowHead(true);                list.add(line2);                Geo i = gc.crossNormalize(ogc);                if (!(Intersection.isOnSegment(g1, g2, i) || Intersection.isOnSegment(g3,                        g4,                        i))) {                    i = i.antipode();                }                p = new OMPoint((float) i.getLatitude(), (float) i.getLongitude(), 3);                p.setOval(true);                p.setLinePaint(line.getLinePaint());                p.setFillPaint(Color.white);                p.setStroke(line.getStroke());                list.add(p);            }            oldLine = line;            ogc = gc;        }        list.generate(getProjection());        return list;    }    public void drawingComplete(OMGraphic omg, OMAction action) {        releaseProxyMouseMode();        if (omg instanceof OMLine && lines != null) {            lines.doAction(omg, action);            deselect(lines);            doPrepare();        } else {            Debug.error("Layer " + getName() + " received " + omg + " and "                    + action + " with no list ready");        }        // This is important!!        if (editorTool != null) {            editorTool.drawingComplete(omg, action);        }    }}

⌨️ 快捷键说明

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