polygon.js

来自「用来在地图上做操作GIS,在地图上做标记」· JavaScript 代码 · 共 124 行

JS
124
字号
/* Copyright (c) 2006-2007 MetaCarta, Inc., published under the BSD license. * See http://svn.openlayers.org/trunk/openlayers/release-license.txt  * for the full text of the license. *//** * @requires OpenLayers/Handler/Path.js * @requires OpenLayers/Geometry/Polygon.js * * Class: OpenLayers.Handler.Polygon * Handler to draw a polygon on the map.  Polygon is displayed on mouse down, * moves on mouse move, and is finished on mouse up. * * Inherits from: *  - <OpenLayers.Handler.Path> *  - <OpenLayers.Handler> */OpenLayers.Handler.Polygon = OpenLayers.Class(OpenLayers.Handler.Path, {        /**     * Parameter: polygon     * {<OpenLayers.Feature.Vector>}     */    polygon: null,    /**     * Constructor: OpenLayers.Handler.Polygon     * Create a Polygon Handler.     *     * Parameters:     * control - {<OpenLayers.Control>}      * callbacks - {Object} An object with a 'done' property whos value is     *                          a function to be called when the path drawing is     *                          finished. The callback should expect to recieve a     *                          single argument, the polygon geometry.     *                          If the callbacks object contains a 'point'     *                          property, this function will be sent each point     *                          as they are added.  If the callbacks object contains     *                          a 'cancel' property, this function will be called when     *                          the handler is deactivated while drawing.  The cancel     *                          should expect to receive a geometry.     * options - {Object}      */    initialize: function(control, callbacks, options) {        OpenLayers.Handler.Path.prototype.initialize.apply(this, arguments);    },        /**     * Method: createFeature     * Add temporary geometries     */    createFeature: function() {        this.polygon = new OpenLayers.Feature.Vector(                                        new OpenLayers.Geometry.Polygon());        this.line = new OpenLayers.Feature.Vector(                                        new OpenLayers.Geometry.LinearRing());        this.polygon.geometry.addComponent(this.line.geometry);        this.point = new OpenLayers.Feature.Vector(                                        new OpenLayers.Geometry.Point());    },    /**     * Method: destroyFeature     * Destroy temporary geometries     */    destroyFeature: function() {        OpenLayers.Handler.Path.prototype.destroyFeature.apply(this);        this.polygon.destroy();        this.polygon = null;    },    /**     * Method: modifyFeature     * Modify the existing geometry given the new point     *      */    modifyFeature: function() {        var index = this.line.geometry.components.length - 2;        this.line.geometry.components[index].x = this.point.geometry.x;        this.line.geometry.components[index].y = this.point.geometry.y;        this.line.geometry.components[index].clearBounds();    },    /**     * Method: drawFeature     * Render geometries on the temporary layer.     */    drawFeature: function() {        this.layer.drawFeature(this.polygon, this.style);        this.layer.drawFeature(this.point, this.style);    },    /**     * Method: geometryClone     * Return a clone of the relevant geometry.     *     * Returns:     * {<OpenLayers.Geometry.Polygon>}     */    geometryClone: function() {        return this.polygon.geometry.clone();    },    /**     * Method: dblclick     * Handle double-clicks.  Finish the geometry and send it back     * to the control.     *      * Parameters:     * evt - {Event}      */    dblclick: function(evt) {        if(!this.freehandMode(evt)) {            // remove the penultimate point            var index = this.line.geometry.components.length - 2;            this.line.geometry.removeComponent(this.line.geometry.components[index]);            this.finalize();        }        return false;    },    CLASS_NAME: "OpenLayers.Handler.Polygon"});

⌨️ 快捷键说明

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