コード例 #1
0
        /**
         * Create a surface polygon from a KML GroundOverlay.
         *
         * @param tc      the current {@link KMLTraversalContext}.
         * @param overlay the {@link SharpEarth.ogc.kml.KMLGroundOverlay} to render as a polygon.
         *
         * @throws NullPointerException     if the geometry is null.
         * @throws ArgumentException if the parent placemark or the traversal context is null.
         */
        public KMLSurfacePolygonImpl(KMLTraversalContext tc, KMLGroundOverlay overlay)
        {
            if (tc == null)
            {
                String msg = Logging.getMessage("nullValue.TraversalContextIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            if (overlay == null)
            {
                String msg = Logging.getMessage("nullValue.ParentIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            this.parent = overlay;

            // Positions are specified either as a kml:LatLonBox or a gx:LatLonQuad
            Position.PositionList corners = overlay.getPositions();
            this.setOuterBoundary(corners.list);

            // Check to see if a rotation is provided. The rotation will be applied when the image is rendered, because
            // how the rotation is performed depends on the globe.
            KMLLatLonBox box = overlay.getLatLonBox();

            if (box != null && box.getRotation() != null)
            {
                this.mustApplyRotation = true;
            }

            if (overlay.getName() != null)
            {
                this.setValue(AVKey.DISPLAY_NAME, overlay.getName());
            }

            if (overlay.getDescription() != null)
            {
                this.setValue(AVKey.BALLOON_TEXT, overlay.getDescription());
            }

            if (overlay.getSnippetText() != null)
            {
                this.setValue(AVKey.SHORT_DESCRIPTION, overlay.getSnippetText());
            }

            String colorStr = overlay.getColor();

            if (!WWUtil.isEmpty(colorStr))
            {
                Color color = WWUtil.decodeColorABGR(colorStr);

                ShapeAttributes attributes = new BasicShapeAttributes();
                attributes.setDrawInterior(true);
                attributes.setInteriorMaterial(new Material(color));
                this.setAttributes(attributes);
            }
        }
コード例 #2
0
        /**
         * Create an instance.
         *
         * @param tc        the current {@link KMLTraversalContext}.
         * @param placemark the <i>Placemark</i> element containing the <i>LineString</i>.
         * @param geom      the {@link SharpEarth.ogc.kml.KMLPolygon} geometry.
         *
         * @throws NullPointerException     if the geometry is null.
         * @throws ArgumentException if the parent placemark or the traversal context is null.
         */
        public KMLSurfacePolygonImpl(KMLTraversalContext tc, KMLPlacemark placemark, KMLAbstractGeometry geom)
        {
            if (tc == null)
            {
                String msg = Logging.getMessage("nullValue.TraversalContextIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            if (placemark == null)
            {
                String msg = Logging.getMessage("nullValue.ParentIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            this.parent = placemark;

            KMLPolygon polygon = (KMLPolygon)geom;

            // KMLPolygon's use linear interpolation between corners by definition. Configure the World Wind SurfacePolygon
            // to use the appropriate path type for linear interpolation in geographic coordinates.
            this.setPathType(AVKey.LINEAR);

            // Note: SurfacePolygon implies altitude mode "clampToGround", therefore KMLSurfacePolygonImpl ignores the
            // KMLPolygon's altitude mode property.

            KMLLinearRing outerBoundary = polygon.getOuterBoundary();

            if (outerBoundary != null)
            {
                Position.PositionList coords = outerBoundary.getCoordinates();
                if (coords != null && coords.list != null)
                {
                    this.setOuterBoundary(outerBoundary.getCoordinates().list);
                }
            }

            Iterable <? extends KMLLinearRing> innerBoundaries = polygon.getInnerBoundaries();

            if (innerBoundaries != null)
            {
                foreach (KMLLinearRing ring in innerBoundaries)
                {
                    Position.PositionList coords = ring.getCoordinates();
                    if (coords != null && coords.list != null)
                    {
                        this.addInnerBoundary(ring.getCoordinates().list);
                    }
                }
            }

            if (placemark.getName() != null)
            {
                this.setValue(AVKey.DISPLAY_NAME, placemark.getName());
            }

            if (placemark.getDescription() != null)
            {
                this.setValue(AVKey.DESCRIPTION, placemark.getDescription());
            }

            if (placemark.getSnippetText() != null)
            {
                this.setValue(AVKey.SHORT_DESCRIPTION, placemark.getSnippetText());
            }

            this.setValue(AVKey.CONTEXT, this.parent);
        }
コード例 #3
0
        /**
         * Create an instance.
         *
         * @param tc        the current {@link KMLTraversalContext}.
         * @param placemark the <i>Placemark</i> element containing the <i>LineString</i>.
         * @param geom      the {@link SharpEarth.ogc.kml.KMLPolygon} geometry.
         *
         * @throws NullPointerException     if the geometry is null.
         * @throws ArgumentException if the parent placemark or the traversal context is null.
         */
        public KMLPolygonImpl(KMLTraversalContext tc, KMLPlacemark placemark, KMLAbstractGeometry geom)
        {
            if (tc == null)
            {
                String msg = Logging.getMessage("nullValue.TraversalContextIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            if (placemark == null)
            {
                String msg = Logging.getMessage("nullValue.ParentIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            this.parent = placemark;

            KMLPolygon polygon = (KMLPolygon)geom;

            this.setAltitudeMode(WorldWind.CLAMP_TO_GROUND); // KML default

            String altMode = polygon.getAltitudeMode();

            if (!WWUtil.isEmpty(altMode))
            {
                if ("relativeToGround".Equals(altMode))
                {
                    this.setAltitudeMode(WorldWind.RELATIVE_TO_GROUND);
                }
                else if ("absolute".Equals(altMode))
                {
                    this.setAltitudeMode(WorldWind.ABSOLUTE);
                }
            }

            KMLLinearRing outerBoundary = polygon.getOuterBoundary();

            if (outerBoundary != null)
            {
                Position.PositionList coords = outerBoundary.getCoordinates();
                if (coords != null && coords.list != null)
                {
                    this.setOuterBoundary(outerBoundary.getCoordinates().list);
                }
            }

            Iterable <? extends KMLLinearRing> innerBoundaries = polygon.getInnerBoundaries();

            if (innerBoundaries != null)
            {
                foreach (KMLLinearRing ring in innerBoundaries)
                {
                    Position.PositionList coords = ring.getCoordinates();
                    if (coords != null && coords.list != null)
                    {
                        this.addInnerBoundary(ring.getCoordinates().list);
                    }
                }
            }

            if (placemark.getName() != null)
            {
                this.setValue(AVKey.DISPLAY_NAME, placemark.getName());
            }

            if (placemark.getDescription() != null)
            {
                this.setValue(AVKey.DESCRIPTION, placemark.getDescription());
            }

            if (placemark.getSnippetText() != null)
            {
                this.setValue(AVKey.SHORT_DESCRIPTION, placemark.getSnippetText());
            }

            this.setValue(AVKey.CONTEXT, this.parent);
        }
コード例 #4
0
        /**
         * Create an instance.
         *
         * @param tc        the current {@link KMLTraversalContext}.
         * @param placemark the <i>Placemark</i> element containing the <i>LineString</i>.
         * @param geom      the {@link KMLLineString} geometry.
         *
         * @throws NullPointerException     if the geometry is null.
         * @throws ArgumentException if the parent placemark or the traversal context is null.
         */
        public KMLLineStringPlacemarkImpl(KMLTraversalContext tc, KMLPlacemark placemark, KMLAbstractGeometry geom)
        {
            super(((KMLLineString)geom).getCoordinates());

            if (tc == null)
            {
                String msg = Logging.getMessage("nullValue.TraversalContextIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            if (placemark == null)
            {
                String msg = Logging.getMessage("nullValue.ParentIsNull");
                Logging.logger().severe(msg);
                throw new ArgumentException(msg);
            }

            this.parent = placemark;

            KMLLineString lineString = (KMLLineString)geom;

            if (lineString.isExtrude())
            {
                this.setExtrude(true);
            }

            if (lineString.getTessellate() != null && lineString.getTessellate())
            {
                this.setFollowTerrain(true);
            }

            this.setAltitudeMode(WorldWind.CLAMP_TO_GROUND); // KML default
            String altMode = lineString.getAltitudeMode();

            if (!WWUtil.isEmpty(altMode))
            {
                if ("clampToGround".Equals(altMode))
                {
                    this.setAltitudeMode(WorldWind.CLAMP_TO_GROUND);
                }
                else if ("relativeToGround".Equals(altMode))
                {
                    this.setAltitudeMode(WorldWind.RELATIVE_TO_GROUND);
                }
                else if ("absolute".Equals(altMode))
                {
                    this.setAltitudeMode(WorldWind.ABSOLUTE);
                }
            }

            // If the path is clamped to the ground and terrain conforming, draw as a great circle. Otherwise draw
            // as linear segments.
            if (this.getAltitudeMode() == WorldWind.CLAMP_TO_GROUND && this.isFollowTerrain())
            {
                this.setPathType(AVKey.GREAT_CIRCLE);
            }
            else
            {
                this.setPathType(AVKey.LINEAR);
            }

            if (placemark.getName() != null)
            {
                this.setValue(AVKey.DISPLAY_NAME, placemark.getName());
            }

            if (placemark.getDescription() != null)
            {
                this.setValue(AVKey.DESCRIPTION, placemark.getDescription());
            }

            if (placemark.getSnippetText() != null)
            {
                this.setValue(AVKey.SHORT_DESCRIPTION, placemark.getSnippetText());
            }

            this.setValue(AVKey.CONTEXT, this.parent);
        }