MultiPolygon Class

package javaxt.geospatial.geometry;

//******************************************************************************
//**  MultiPolygon Class - By Peter Borissow
//******************************************************************************
/**
 *   Enter class description
 *
 ******************************************************************************/

public class MultiPolygon implements Geometry {
    
    
    private java.util.Vector Polygons = new java.util.Vector();
    private String srs = "EPSG:4326";
    
  //**************************************************************************
  //** Creates a new instance of MultiPolygon
  //**************************************************************************
    
    public MultiPolygon(){
    }
    
    
    public MultiPolygon(Polygon[] polygons){
        for (int i=0; i<polygons.length; i++){
             if (polygons[i]!=null) Polygons.add(polygons[i]);
        }
    }
    
    
  //**************************************************************************
  //** addPolygon
  //**************************************************************************
  //** Used to add a polygon to the MultiPolygon Geometry */
    
    public void addPolygon(Polygon polygon){
        if (polygon!=null) Polygons.add(polygon);
    }
    
  //**************************************************************************
  //** getSRS
  //**************************************************************************
  //** Sets the srs attribute for this Geometry. */
    
    public void setSRS(String srsName){
        if (srsName==null) srs = "";
        else srs = srsName.trim();
    }
    
    
  //**************************************************************************
  //** getSRS
  //**************************************************************************
  //** Returns the srs name of this Geometry. */
    
    public String getSRS(){
        return srs;
    }
    
  //**************************************************************************
  //** getName
  //**************************************************************************
  //** Returns the name of this Geometry. */
    
    public String getName(){ 
        return new Geometry.Name(this).toString(); 
    }
    
    
  //**************************************************************************
  //** getPolygons
  //**************************************************************************
  /**  Returns an array of Polygons that compose a MultiPolygon */
    
    public Polygon[] getPolygons(){
        Object[] arr = Polygons.toArray();
        Polygon[] ret = new Polygon[arr.length];
        for (int i=0; i<arr.length; i++){
             ret[i] = (Polygon) arr[i];
        }
        return ret;
    }
    
  //**************************************************************************
  //** toString
  //**************************************************************************
  /** Used to return a Well-known Text (WKT) representation of the polygon. */
    
    public String toString(){
        Polygon[] Polygons = getPolygons();
        if (Polygons==null || Polygons.length<=0) return null;
        else{
            StringBuffer Coordinates = new StringBuffer();
            Coordinates.append("MULTIPOLYGON(");
            for (int i=0; i<Polygons.length; i++){
                 Coordinates.append("((" + Polygons[i].toString(" ", ", ") + "))");
                 if (i<Polygons.length-1) Coordinates.append(",");
            }
            Coordinates.append(")");
            return Coordinates.toString().trim();
        }
        
    }
    
    
    
    
  //**************************************************************************
  //** toGML
  //**************************************************************************
  /**  Used to convert a MultiPolygon to GML (xml fragment) */
    
    public String toGML(){
        Polygon[] Polygons = getPolygons();
        if (Polygons==null) return "";
        else{
            String srsName = " srsName=\"" + srs + "\"";
            if (srs.length()==0) srsName = "";
            
            StringBuffer Coordinates = new StringBuffer();
            Coordinates.append("<gml:MultiPolygon" + srsName + ">");
            for (int i=0; i<Polygons.length; i++){
                 Polygon polygon = Polygons[i];
                 Coordinates.append("<gml:polygonMember>");
                 Coordinates.append("<gml:Polygon>");
                 Coordinates.append("<gml:LinearRing>");
                 Coordinates.append("<gml:coordinates>");
                 Coordinates.append(polygon.toString(",", " "));
                 Coordinates.append("</gml:coordinates>");
                 Coordinates.append("</gml:LinearRing>");
                 Coordinates.append("</gml:Polygon>");
                 Coordinates.append("</gml:polygonMember>");
            }

            Coordinates.append("</gml:MultiPolygon>");
            return Coordinates.toString().trim();
        }
    }
    
}