Polygon.js 1.77 KB
/* Copyright (c) 2006 MetaCarta, Inc., published under the BSD license.
 * See http://svn.openlayers.org/trunk/openlayers/release-license.txt 
 * for the full text of the license. */

/**
 * @class
 * 
 * Polygon is a collection of Geometry.LinearRings. 
 * 
 * The first ring (this.component[0])is the outer bounds of the polygon and 
 * all subsequent rings (this.component[1-n]) are internal holes.
 *
 * @requires OpenLayers/Geometry/Collection.js
 */
OpenLayers.Geometry.Polygon = OpenLayers.Class.create();
OpenLayers.Geometry.Polygon.prototype =
    OpenLayers.Class.inherit(OpenLayers.Geometry.Collection, {

    /**
     * An array of class names representing the types of components that
     * the collection can include.  A null value means the component types
     * are not restricted.
     * @type Array(String)
     */
    componentTypes: ["OpenLayers.Geometry.LinearRing"],

    /**
     * @constructor
     *
     * @param {Array(OpenLayers.Geometry.LinearRing)}
     */
    initialize: function(components) {
        OpenLayers.Geometry.Collection.prototype.initialize.apply(this, 
                                                                  arguments);
    },
    
    /** Calculated by subtracting the areas of the internal holes from the 
     *   area of the outer hole.
     * 
     * @returns The area of the geometry
     * @type float 
     */
    getArea: function() {
        var area = 0.0;
        if ( this.components && (this.components.length > 0)) {
            area += Math.abs(this.components[0].getArea());
            for (var i = 1; i < this.components.length; i++) {
                area -= Math.abs(this.components[i].getArea());
            }
        }
        return area;
    },

    /** @final @type String */
    CLASS_NAME: "OpenLayers.Geometry.Polygon"
});