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

📄 airspaces.java

📁 world wind java sdk 源码
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
            orbit.setAltitudes(minAltitude, maxAltitude);
            orbit.setWidth(30000.0);
            orbit.setOrbitType(Orbit.OrbitType.LEFT);
            orbit.setTerrainConforming(false, false);
            orbit.setValue(DESCRIPTION, "LEFT Orbit.");
            this.setupDefaultMaterial(orbit, Color.LIGHT_GRAY);
            airspaces.add(orbit);

            // Center Orbit
            orbit = new Orbit();
            orbit.setLocations(LatLon.fromDegrees(45.7477, -123.6372), LatLon.fromDegrees(45.7477, -122.6372));
            orbit.setAltitudes(minAltitude, maxAltitude);
            orbit.setWidth(30000.0);
            orbit.setOrbitType(Orbit.OrbitType.CENTER);
            orbit.setTerrainConforming(false, false);
            orbit.setValue(DESCRIPTION, "CENTER Orbit.");
            this.setupDefaultMaterial(orbit, Color.GRAY);
            airspaces.add(orbit);

            // Right Orbit
            orbit = new Orbit();
            orbit.setLocations(LatLon.fromDegrees(45.7477, -123.6372), LatLon.fromDegrees(45.7477, -122.6372));
            orbit.setAltitudes(minAltitude, maxAltitude);
            orbit.setWidth(30000.0);
            orbit.setOrbitType(Orbit.OrbitType.RIGHT);
            orbit.setTerrainConforming(false, false);
            orbit.setValue(DESCRIPTION, "RIGHT Orbit.");
            this.setupDefaultMaterial(orbit, Color.DARK_GRAY);
            airspaces.add(orbit);

            // Orbit from Los Angeles to New York
            orbit = new Orbit();
            orbit.setLocations(LatLon.fromDegrees(34.0489, -118.2481), LatLon.fromDegrees(40.7137, -74.0065));
            orbit.setAltitudes(minAltitude, maxAltitude);
            orbit.setWidth(500000.0);
            orbit.setOrbitType(Orbit.OrbitType.CENTER);
            orbit.setTerrainConforming(false, false);
            orbit.setValue(DESCRIPTION, "Orbit From L.A. to N.Y.");
            this.setupDefaultMaterial(orbit, Color.RED);
            airspaces.add(orbit);

            this.setAirspaces(airspaces);
        }

        public void doZoomToAirspaces()
        {
            OrbitView view = (OrbitView) this.wwd.getView();
            Globe globe = this.wwd.getModel().getGlobe();
            Position center = Position.fromDegrees(46.7477, -122.6372, 0.0);
            Angle heading = Angle.fromDegrees(0.0);
            Angle pitch = Angle.fromDegrees(30.0);
            double zoom = 600000.0;
            FlyToOrbitViewStateIterator iter = FlyToOrbitViewStateIterator.createPanToIterator(
                view, globe, center, heading, pitch, zoom, true);
            view.applyStateIterator(iter);
        }

        public void doSaveAirspaces()
        {

            if (this.fileChooser == null)
            {
                this.fileChooser = new JFileChooser();
                this.fileChooser.setCurrentDirectory(new File(Configuration.getCurrentWorkingDirectory()));
            }

            this.fileChooser.setDialogTitle("Choose Directory to Place Airspaces");
            this.fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            this.fileChooser.setMultiSelectionEnabled(false);
            int status = this.fileChooser.showSaveDialog(null);
            if (status != JFileChooser.APPROVE_OPTION)
                return;

            final File dir = this.fileChooser.getSelectedFile();
            if (dir == null)
                return;

            if (!dir.exists())
            {
                //noinspection ResultOfMethodCallIgnored
                dir.mkdirs();
            }

            AirspaceLayer layer = (AirspaceLayer) wwd.getModel().getLayers().getLayerByName(AIRSPACE_LAYER_NAME);
            final Iterable<Airspace> airspaces = layer.getAirspaces();

            Thread t = new Thread(new Runnable()
            {
                public void run()
                {
                    try
                    {
                        java.text.DecimalFormat f = new java.text.DecimalFormat("####");
                        f.setMinimumIntegerDigits(4);
                        int counter = 0;

                        for (Airspace a : airspaces)
                        {
                            String xmlString = a.getRestorableState();
                            if (xmlString == null)
                                continue;

                            try
                            {
                                PrintWriter of = new PrintWriter(
                                    new File(dir, a.getClass().getName() + "-" + f.format(counter++) + ".xml"));
                                of.write(xmlString);
                                of.flush();
                                of.close();
                            }
                            catch (FileNotFoundException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                    finally
                    {
                        SwingUtilities.invokeLater(new Runnable()
                        {
                            public void run()
                            {
                                frame.setCursor(Cursor.getDefaultCursor());
                                saveButton.setEnabled(true);
                            }
                        });
                    }
                }
            });
            saveButton.setEnabled(false);
            frame.setCursor(new Cursor(Cursor.WAIT_CURSOR));
            t.start();

        }

        public void doReadAirspaces()
        {
            if (this.fileChooser == null)
            {
                this.fileChooser = new JFileChooser();
                this.fileChooser.setCurrentDirectory(new File(Configuration.getCurrentWorkingDirectory()));
            }

            this.fileChooser.setDialogTitle("Choose Airspace File Directory");
            this.fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
            this.fileChooser.setMultiSelectionEnabled(false);
            int status = this.fileChooser.showOpenDialog(null);
            if (status != JFileChooser.APPROVE_OPTION)
                return;

            final File dir = this.fileChooser.getSelectedFile();
            if (dir == null)
                return;

            Thread t = new Thread(new Runnable()
            {
                public void run()
                {
                    final ArrayList<Airspace> airspaces = new ArrayList<Airspace>();
                    try
                    {
                        File[] files = dir.listFiles(new FilenameFilter()
                        {
                            public boolean accept(File dir, String name)
                            {
                                return name.startsWith("gov.nasa.worldwind.render.airspaces") && name.endsWith(".xml");
                            }
                        });

                        for (File file : files)
                        {
                            String[] name = file.getName().split("-");
                            try
                            {
                                Class c = Class.forName(name[0]);
                                Airspace airspace = (Airspace) c.newInstance();
                                BufferedReader input = new BufferedReader(new FileReader(file));
                                String s = input.readLine();
                                airspace.restoreState(s);
                                airspaces.add(airspace);

                                AirspaceAttributes attribs = airspace.getAttributes();
                                if (!attribs.isDrawOutline())
                                {
                                    Color color = attribs.getMaterial().getDiffuse();
                                    attribs.setDrawOutline(true);
                                    attribs.setOutlineMaterial(new Material(makeBrighter(color)));
                                }
                            }
                            catch (ClassNotFoundException e)
                            {
                                e.printStackTrace();
                            }
                            catch (IllegalAccessException e)
                            {
                                e.printStackTrace();
                            }
                            catch (InstantiationException e)
                            {
                                e.printStackTrace();
                            }
                            catch (FileNotFoundException e)
                            {
                                e.printStackTrace();
                            }
                            catch (IOException e)
                            {
                                e.printStackTrace();
                            }
                        }
                    }
                    finally
                    {
                        SwingUtilities.invokeLater(new Runnable()
                        {
                            public void run()
                            {
                                AirspacesController.this.setAirspaces(airspaces);
                                wwd.redraw();
                                frame.setCursor(Cursor.getDefaultCursor());
                                readButton.setEnabled(true);
                            }
                        });
                    }
                }
            });
            readButton.setEnabled(false);
            frame.setCursor(new Cursor(Cursor.WAIT_CURSOR));
            t.start();
        }

        public void doSetVerticalExaggeration(double ve)
        {
            this.wwd.getSceneController().setVerticalExaggeration(ve);
        }
    }

    public static void main(String[] args)
    {
        try
        {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        }
        catch (Exception e)
        {
            String message = "ExceptionWhileSettingSystemLookAndFeel";
            Logging.logger().log(java.util.logging.Level.WARNING, message, e);
        }

        //Configuration.setValue(AVKey.GLOBE_CLASS_NAME, EarthFlat.class.getName());
        //Configuration.setValue(AVKey.VIEW_CLASS_NAME, FlatOrbitView.class.getName());
        start("World Wind Airspaces", AppFrame.class);
    }

    private static Iterable<LatLon> makeLatLon(double[] src, int offset, int length)
    {
        int numCoords = (int) Math.floor(length / 2.0);
        LatLon[] dest = new LatLon[numCoords];
        for (int i = 0; i < numCoords; i++)
        {
            double lonDegrees = src[offset + 2 * i];
            double latDegrees = src[offset + 2 * i + 1];
            dest[i] = LatLon.fromDegrees(latDegrees, lonDegrees);
        }
        return Arrays.asList(dest);
    }

⌨️ 快捷键说明

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