Ejemplo n.º 1
0
        /**
         * Get all of the positions that make up a {@link KMLAbstractGeometry}. If the geometry contains other geometries,
         * this method collects all the points from all of the geometries.
         *
         * @param globe     Globe to use to determine altitude above terrain.
         * @param geometry  Geometry to collect positions from.
         * @param positions Placemark positions will be added to this list.
         */
        public static void getPositions(Globe globe, KMLAbstractGeometry geometry, java.util.List <Position> positions)
        {
            if (geometry is KMLPoint)
            {
                KMLPoint kmlPoint = (KMLPoint)geometry;
                Position pos      = kmlPoint.getCoordinates();

                if (pos != null)
                {
                    positions.add(computeAltitude(globe, pos, kmlPoint.getAltitudeMode()));
                }
            }
            else if (geometry is KMLModel)
            {
                KMLModel    model    = (KMLModel)geometry;
                KMLLocation location = model.getLocation();
                if (location != null)
                {
                    Position pos = location.getPosition();
                    if (pos != null)
                    {
                        positions.add(computeAltitude(globe, pos, model.getAltitudeMode()));
                    }
                }
            }
            else if (geometry is KMLLineString) // Also handles KMLLinearRing, since KMLLineString is a subclass of KMLLinearRing
            {
                KMLLineString         lineString   = (KMLLineString)geometry;
                Position.PositionList positionList = lineString.getCoordinates();
                if (positionList != null)
                {
                    positions.addAll(computeAltitude(globe, positionList.list, lineString.getAltitudeMode()));
                }
            }
            else if (geometry is KMLPolygon)
            {
                KMLLinearRing ring = ((KMLPolygon)geometry).getOuterBoundary();
                // Recurse and let the LineString/LinearRing code handle the boundary positions
                getPositions(globe, ring, positions);
            }
            else if (geometry is KMLMultiGeometry)
            {
                java.util.List <KMLAbstractGeometry> geoms = ((KMLMultiGeometry)geometry).getGeometries();
                foreach (KMLAbstractGeometry g in geoms)
                {
                    // Recurse, adding positions for the sub-geometry
                    getPositions(globe, g, positions);
                }
            }
        }