From 337cbe47b2f0d72c56cb1f02c3c6115ee17c60ce Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Sun, 17 Sep 2023 15:19:43 +0800
Subject: [PATCH] bpmn 引入
---
src/components/map/Draw.js | 2624 +++++++++++++++++++++++++++++-----------------------------
1 files changed, 1,312 insertions(+), 1,312 deletions(-)
diff --git a/src/components/map/Draw.js b/src/components/map/Draw.js
index 6c95d33..e945e8d 100644
--- a/src/components/map/Draw.js
+++ b/src/components/map/Draw.js
@@ -1,1314 +1,1314 @@
-var __extends =
- (this && this.__extends) ||
- (function () {
- var extendStatics = function (d, b) {
- extendStatics =
- Object.setPrototypeOf ||
- ({
- __proto__: []
- }
- instanceof Array &&
- function (d, b) {
- d.__proto__ = b;
- }) ||
- function (d, b) {
- for (var p in b)
- if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
- };
- return extendStatics(d, b);
- };
- return function (d, b) {
- if (typeof b !== "function" && b !== null)
- throw new TypeError(
- "Class extends value " + String(b) + " is not a constructor or null"
- );
- extendStatics(d, b);
+// var __extends =
+// (this && this.__extends) ||
+// (function () {
+// var extendStatics = function (d, b) {
+// extendStatics =
+// Object.setPrototypeOf ||
+// ({
+// __proto__: []
+// }
+// instanceof Array &&
+// function (d, b) {
+// d.__proto__ = b;
+// }) ||
+// function (d, b) {
+// for (var p in b)
+// if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];
+// };
+// return extendStatics(d, b);
+// };
+// return function (d, b) {
+// if (typeof b !== "function" && b !== null)
+// throw new TypeError(
+// "Class extends value " + String(b) + " is not a constructor or null"
+// );
+// extendStatics(d, b);
- function __() {
- this.constructor = d;
- }
- d.prototype =
- b === null ?
- Object.create(b) :
- ((__.prototype = b.prototype), new __());
- };
- })();
-/**
- * @module ol/interaction/Draw
- */
-import Circle from "ol/geom/Circle.js";
-import Event from "ol/events/Event.js";
-import EventType from "ol/events/EventType.js";
-import Feature from "ol/Feature.js";
-import GeometryType from "ol/geom/GeometryType.js";
-import InteractionProperty from "ol/interaction/Property.js";
-import LineString from "ol/geom/LineString.js";
-import MapBrowserEvent from "ol/MapBrowserEvent.js";
-import MapBrowserEventType from "ol/MapBrowserEventType.js";
-import MultiLineString from "ol/geom/MultiLineString.js";
-import MultiPoint from "ol/geom/MultiPoint.js";
-import MultiPolygon from "ol/geom/MultiPolygon.js";
-import Point from "ol/geom/Point.js";
-import PointerInteraction from "ol/interaction/Pointer.js";
-import Polygon, {
- fromCircle,
- makeRegular
-} from "ol/geom/Polygon.js";
-import VectorLayer from "ol/layer/Vector.js";
-import VectorSource from "ol/source/Vector.js";
-import {
- FALSE,
- TRUE
-} from "ol/functions.js";
-import {
- always,
- noModifierKeys,
- shiftKeyOnly
-} from "ol/events/condition.js";
-import {
- boundingExtent,
- getBottomLeft,
- getBottomRight,
- getTopLeft,
- getTopRight,
-} from "ol/extent.js";
-import {
- createEditingStyle
-} from "ol/style/Style.js";
-import {
- fromUserCoordinate,
- getUserProjection
-} from "ol/proj.js";
-import {
- squaredDistance as squaredCoordinateDistance
-} from "ol/coordinate.js";
-/**
- * @typedef {Object} Options
- * @property {import("ol/geom/GeometryType.js").default} type Geometry type of
- * the geometries being drawn with this instance.
- * @property {number} [clickTolerance=6] The maximum distance in pixels between
- * "down" and "up" for a "up" event to be considered a "click" event and
- * actually add a point/vertex to the geometry being drawn. The default of `6`
- * was chosen for the draw interaction to behave correctly on mouse as well as
- * on touch devices.
- * @property {import("ol/Collection.js").default<Feature>} [features]
- * Destination collection for the drawn features.
- * @property {VectorSource} [source] Destination source for
- * the drawn features.
- * @property {number} [dragVertexDelay=500] Delay in milliseconds after pointerdown
- * before the current vertex can be dragged to its exact position.
- * @property {number} [snapTolerance=12] Pixel distance for snapping to the
- * drawing finish. Must be greater than `0`.
- * @property {boolean} [stopClick=false] Stop click, singleclick, and
- * doubleclick events from firing during drawing.
- * @property {number} [maxPoints] The number of points that can be drawn before
- * a polygon ring or line string is finished. By default there is no
- * restriction.
- * @property {number} [minPoints] The number of points that must be drawn
- * before a polygon ring or line string can be finished. Default is `3` for
- * polygon rings and `2` for line strings.
- * @property {import("ol/events/condition.js").Condition} [finishCondition] A function
- * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
- * boolean to indicate whether the drawing can be finished. Not used when drawing
- * POINT or MULTI_POINT geometries.
- * @property {import("ol/style/Style.js").StyleLike} [style]
- * Style for sketch features.
- * @property {GeometryFunction} [geometryFunction]
- * Function that is called when a geometry's coordinates are updated.
- * @property {string} [geometryName] Geometry name to use for features created
- * by the draw interaction.
- * @property {import("ol/events/condition.js").Condition} [condition] A function that
- * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
- * boolean to indicate whether that event should be handled.
- * By default {@link module:ol/events/condition.noModifierKeys}, i.e. a click,
- * adds a vertex or deactivates freehand drawing.
- * @property {boolean} [freehand=false] Operate in freehand mode for lines,
- * polygons, and circles. This makes the interaction always operate in freehand
- * mode and takes precedence over any `freehandCondition` option.
- * @property {import("ol/events/condition.js").Condition} [freehandCondition]
- * Condition that activates freehand drawing for lines and polygons. This
- * function takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and
- * returns a boolean to indicate whether that event should be handled. The
- * default is {@link module:ol/events/condition.shiftKeyOnly}, meaning that the
- * Shift key activates freehand drawing.
- * @property {boolean} [wrapX=false] Wrap the world horizontally on the sketch
- * overlay.
- */
-/**
- * Coordinate type when drawing points.
- * @typedef {import("ol/coordinate.js").Coordinate} PointCoordType
- */
-/**
- * Coordinate type when drawing lines.
- * @typedef {Array<import("ol/coordinate.js").Coordinate>} LineCoordType
- */
-/**
- * Coordinate type when drawing polygons.
- * @typedef {Array<Array<import("ol/coordinate.js").Coordinate>>} PolyCoordType
- */
-/**
- * Types used for drawing coordinates.
- * @typedef {PointCoordType|LineCoordType|PolyCoordType} SketchCoordType
- */
-/**
- * Function that takes an array of coordinates and an optional existing geometry
- * and a projection as arguments, and returns a geometry. The optional existing
- * geometry is the geometry that is returned when the function is called without
- * a second argument.
- * @typedef {function(!SketchCoordType, import("ol/geom/SimpleGeometry.js").default,
- * import("ol/proj/Projection.js").default):
- * import("ol/geom/SimpleGeometry.js").default} GeometryFunction
- */
-/**
- * Draw mode. This collapses multi-part geometry types with their single-part
- * cousins.
- * @enum {string}
- */
-var Mode = {
- POINT: "Point",
- LINE_STRING: "LineString",
- POLYGON: "Polygon",
- CIRCLE: "Circle",
-};
-/**
- * @enum {string}
- */
-var DrawEventType = {
- /**
- * Triggered upon feature draw start
- * @event DrawEvent#drawstart
- * @api
- */
- DRAWSTART: "drawstart",
- /**
- * Triggered upon feature draw end
- * @event DrawEvent#drawend
- * @api
- */
- DRAWEND: "drawend",
- /**
- * Triggered upon feature draw abortion
- * @event DrawEvent#drawabort
- * @api
- */
- DRAWABORT: "drawabort",
-};
-/**
- * @classdesc
- * Events emitted by {@link module:ol/interaction/Draw~Draw} instances are
- * instances of this type.
- */
-var DrawEvent = /** @class */ (function (_super) {
- __extends(DrawEvent, _super);
- /**
- * @param {DrawEventType} type Type.
- * @param {Feature} feature The feature drawn.
- */
- function DrawEvent(type, feature) {
- var _this = _super.call(this, type) || this;
- /**
- * The feature being drawn.
- * @type {Feature}
- * @api
- */
- _this.feature = feature;
- return _this;
- }
- return DrawEvent;
-})(Event);
-export {
- DrawEvent
-};
-/***
- * @template Return
- * @typedef {import("ol/Observable").OnSignature<import("ol/Observable").EventTypes, import("ol/events/Event.js").default, Return> &
- * import("ol/Observable").OnSignature<import("ol/ObjectEventType").Types|
- * 'change:active', import("ol/Object").ObjectEvent, Return> &
- * import("ol/Observable").OnSignature<'drawabort'|'drawend'|'drawstart', DrawEvent, Return> &
- * import("ol/Observable").CombinedOnSignature<import("ol/Observable").EventTypes|import("ol/ObjectEventType").Types|
- * 'change:active'|'drawabort'|'drawend'|'drawstart', Return>} DrawOnSignature
- */
-/**
- * @classdesc
- * Interaction for drawing feature geometries.
- *
- * @fires DrawEvent
- * @api
- */
-var Draw = /** @class */ (function (_super) {
- __extends(Draw, _super);
- /**
- * @param {Options} options Options.
- */
- function Draw(options) {
- var _this = this;
- var pointerOptions = /** @type {import("./Pointer.js").Options} */ (
- options
- );
- if (!pointerOptions.stopDown) {
- pointerOptions.stopDown = FALSE;
- }
- _this = _super.call(this, pointerOptions) || this;
- /***
- * @type {DrawOnSignature<import("ol/events").EventsKey>}
- */
- _this.coordinate = options.coordinate;
- /***
- * 输出坐标
- */
- _this.coordinateOver = options.coordinateOver;
- /***
- * 结束绘画
- */
- _this.overDraw = false;
- /***
- * 控制结束绘画
- */
- _this.isPoint = options.isPoint;
- /***
- * 是否是点
- */
- _this.coordinateOverPoint = options.coordinateOverPoint;
- /***
- * 输出点
- */
- _this.on;
- /***
- * @type {DrawOnSignature<import("ol/events").EventsKey>}
- */
- _this.once;
- /***
- * @type {DrawOnSignature<void>}
- */
- _this.un;
- /**
- * @type {boolean}
- * @private
- */
- _this.shouldHandle_ = false;
- /**
- * @type {import("ol/pixel.js").Pixel}
- * @private
- */
- _this.downPx_ = null;
- /**
- * @type {?}
- * @private
- */
- _this.downTimeout_;
- /**
- * @type {number|undefined}
- * @private
- */
- _this.lastDragTime_;
- /**
- * Pointer type of the last pointermove event
- * @type {string}
- * @private
- */
- _this.pointerType_;
- /**
- * @type {boolean}
- * @private
- */
- _this.freehand_ = false;
- /**
- * Target source for drawn features.
- * @type {VectorSource}
- * @private
- */
- _this.source_ = options.source ? options.source : null;
- /**
- * Target collection for drawn features.
- * @type {import("ol/Collection.js").default<Feature>}
- * @private
- */
- _this.features_ = options.features ? options.features : null;
- /**
- * Pixel distance for snapping.
- * @type {number}
- * @private
- */
- _this.snapTolerance_ = options.snapTolerance ? options.snapTolerance : 12;
- /**
- * Geometry type.
- * @type {import("ol/geom/GeometryType.js").default}
- * @private
- */
- _this.type_ = /** @type {import("ol/geom/GeometryType.js").default} */ (
- options.type
- );
- /**
- * Drawing mode (derived from geometry type.
- * @type {Mode}
- * @private
- */
- _this.mode_ = getMode(_this.type_);
- /**
- * Stop click, singleclick, and doubleclick events from firing during drawing.
- * Default is `false`.
- * @type {boolean}
- * @private
- */
- _this.stopClick_ = !!options.stopClick;
- /**
- * The number of points that must be drawn before a polygon ring or line
- * string can be finished. The default is 3 for polygon rings and 2 for
- * line strings.
- * @type {number}
- * @private
- */
- _this.minPoints_ = options.minPoints ?
- options.minPoints :
- _this.mode_ === Mode.POLYGON ?
- 3 :
- 2;
- /**
- * The number of points that can be drawn before a polygon ring or line string
- * is finished. The default is no restriction.
- * @type {number}
- * @private
- */
- _this.maxPoints_ =
- _this.mode_ === Mode.CIRCLE ?
- 2 :
- options.maxPoints ?
- options.maxPoints :
- Infinity;
- /**
- * A function to decide if a potential finish coordinate is permissible
- * @private
- * @type {import("ol/events/condition.js").Condition}
- */
- _this.finishCondition_ = options.finishCondition ?
- options.finishCondition :
- TRUE;
- var geometryFunction = options.geometryFunction;
- if (!geometryFunction) {
- var mode_1 = _this.mode_;
- if (mode_1 === Mode.CIRCLE) {
- /**
- * @param {!LineCoordType} coordinates The coordinates.
- * @param {import("ol/geom/SimpleGeometry.js").default|undefined} geometry Optional geometry.
- * @param {import("ol/proj/Projection.js").default} projection The view projection.
- * @return {import("ol/geom/SimpleGeometry.js").default} A geometry.
- */
- geometryFunction = function (coordinates, geometry, projection) {
- var circle = geometry ?
- /** @type {Circle} */
- (geometry) :
- new Circle([NaN, NaN]);
- var center = fromUserCoordinate(coordinates[0], projection);
- var squaredLength = squaredCoordinateDistance(
- center,
- fromUserCoordinate(coordinates[coordinates.length - 1], projection)
- );
- circle.setCenterAndRadius(center, Math.sqrt(squaredLength));
- var userProjection = getUserProjection();
- if (userProjection) {
- circle.transform(projection, userProjection);
- }
- return circle;
- };
- } else {
- var Constructor_1;
- if (mode_1 === Mode.POINT) {
- Constructor_1 = Point;
- } else if (mode_1 === Mode.LINE_STRING) {
- Constructor_1 = LineString;
- } else if (mode_1 === Mode.POLYGON) {
- Constructor_1 = Polygon;
- }
- /**
- * @param {!LineCoordType} coordinates The coordinates.
- * @param {import("ol/geom/SimpleGeometry.js").default|undefined} geometry Optional geometry.
- * @param {import("ol/proj/Projection.js").default} projection The view projection.
- * @return {import("ol/geom/SimpleGeometry.js").default} A geometry.
- */
- geometryFunction = function (coordinates, geometry, projection) {
- if (geometry) {
- if (mode_1 === Mode.POLYGON) {
- if (coordinates[0].length) {
- // Add a closing coordinate to match the first
- geometry.setCoordinates([
- coordinates[0].concat([coordinates[0][0]]),
- ]);
- } else {
- geometry.setCoordinates([]);
- }
- } else {
- geometry.setCoordinates(coordinates);
- }
- } else {
- geometry = new Constructor_1(coordinates);
- }
- return geometry;
- };
- }
- }
- /**
- * @type {GeometryFunction}
- * @private
- */
- _this.geometryFunction_ = geometryFunction;
- /**
- * @type {number}
- * @private
- */
- _this.dragVertexDelay_ =
- options.dragVertexDelay !== undefined ? options.dragVertexDelay : 500;
- /**
- * Finish coordinate for the feature (first point for polygons, last point for
- * linestrings).
- * @type {import("ol/coordinate.js").Coordinate}
- * @private
- */
- _this.finishCoordinate_ = null;
- /**
- * Sketch feature.
- * @type {Feature}
- * @private
- */
- _this.sketchFeature_ = null;
- /**
- * Sketch point.
- * @type {Feature<Point>}
- * @private
- */
- _this.sketchPoint_ = null;
- /**
- * Sketch coordinates. Used when drawing a line or polygon.
- * @type {SketchCoordType}
- * @private
- */
- _this.sketchCoords_ = null;
- /**
- * Sketch line. Used when drawing polygon.
- * @type {Feature<LineString>}
- * @private
- */
- _this.sketchLine_ = null;
- /**
- * Sketch line coordinates. Used when drawing a polygon or circle.
- * @type {LineCoordType}
- * @private
- */
- _this.sketchLineCoords_ = null;
- /**
- * Squared tolerance for handling up events. If the squared distance
- * between a down and up event is greater than this tolerance, up events
- * will not be handled.
- * @type {number}
- * @private
- */
- _this.squaredClickTolerance_ = options.clickTolerance ?
- options.clickTolerance * options.clickTolerance :
- 36;
- /**
- * Draw overlay where our sketch features are drawn.
- * @type {VectorLayer}
- * @private
- */
- _this.overlay_ = new VectorLayer({
- source: new VectorSource({
- useSpatialIndex: false,
- wrapX: options.wrapX ? options.wrapX : false,
- }),
- style: options.style ? options.style : getDefaultStyleFunction(),
- updateWhileInteracting: true,
- });
- /**
- * Name of the geometry attribute for newly created features.
- * @type {string|undefined}
- * @private
- */
- _this.geometryName_ = options.geometryName;
- /**
- * @private
- * @type {import("ol/events/condition.js").Condition}
- */
- _this.condition_ = options.condition ? options.condition : noModifierKeys;
- /**
- * @private
- * @type {import("ol/events/condition.js").Condition}
- */
- _this.freehandCondition_;
- if (options.freehand) {
- _this.freehandCondition_ = always;
- } else {
- _this.freehandCondition_ = options.freehandCondition ?
- options.freehandCondition :
- shiftKeyOnly;
- }
- _this.addChangeListener(InteractionProperty.ACTIVE, _this.updateState_);
- return _this;
- }
- /**
- * Remove the interaction from its current map and attach it to the new map.
- * Subclasses may set up event handlers to get notified about changes to
- * the map here.
- * @param {import("ol/PluggableMap.js").default} map Map.
- */
- Draw.prototype.setMap = function (map) {
- _super.prototype.setMap.call(this, map);
- this.updateState_();
- };
- /**
- * Get the overlay layer that this interaction renders sketch features to.
- * @return {VectorLayer} Overlay layer.
- * @api
- */
- Draw.prototype.getOverlay = function () {
- return this.overlay_;
- };
- /**
- * Handles the {@link module:ol/MapBrowserEvent map browser event} and may actually draw or finish the drawing.
- * @param {import("ol/MapBrowserEvent.js").default} event Map browser event.
- * @return {boolean} `false` to stop event propagation.
- * @api
- */
- Draw.prototype.controlDrawing = function (val) {
- this.overDraw = val;
- };
+// function __() {
+// this.constructor = d;
+// }
+// d.prototype =
+// b === null ?
+// Object.create(b) :
+// ((__.prototype = b.prototype), new __());
+// };
+// })();
+// /**
+// * @module ol/interaction/Draw
+// */
+// import Circle from "ol/geom/Circle.js";
+// import Event from "ol/events/Event.js";
+// import EventType from "ol/events/EventType.js";
+// import Feature from "ol/Feature.js";
+// import GeometryType from "ol/geom/GeometryType.js";
+// import InteractionProperty from "ol/interaction/Property.js";
+// import LineString from "ol/geom/LineString.js";
+// import MapBrowserEvent from "ol/MapBrowserEvent.js";
+// import MapBrowserEventType from "ol/MapBrowserEventType.js";
+// import MultiLineString from "ol/geom/MultiLineString.js";
+// import MultiPoint from "ol/geom/MultiPoint.js";
+// import MultiPolygon from "ol/geom/MultiPolygon.js";
+// import Point from "ol/geom/Point.js";
+// import PointerInteraction from "ol/interaction/Pointer.js";
+// import Polygon, {
+// fromCircle,
+// makeRegular
+// } from "ol/geom/Polygon.js";
+// import VectorLayer from "ol/layer/Vector.js";
+// import VectorSource from "ol/source/Vector.js";
+// import {
+// FALSE,
+// TRUE
+// } from "ol/functions.js";
+// import {
+// always,
+// noModifierKeys,
+// shiftKeyOnly
+// } from "ol/events/condition.js";
+// import {
+// boundingExtent,
+// getBottomLeft,
+// getBottomRight,
+// getTopLeft,
+// getTopRight,
+// } from "ol/extent.js";
+// import {
+// createEditingStyle
+// } from "ol/style/Style.js";
+// import {
+// fromUserCoordinate,
+// getUserProjection
+// } from "ol/proj.js";
+// import {
+// squaredDistance as squaredCoordinateDistance
+// } from "ol/coordinate.js";
+// /**
+// * @typedef {Object} Options
+// * @property {import("ol/geom/GeometryType.js").default} type Geometry type of
+// * the geometries being drawn with this instance.
+// * @property {number} [clickTolerance=6] The maximum distance in pixels between
+// * "down" and "up" for a "up" event to be considered a "click" event and
+// * actually add a point/vertex to the geometry being drawn. The default of `6`
+// * was chosen for the draw interaction to behave correctly on mouse as well as
+// * on touch devices.
+// * @property {import("ol/Collection.js").default<Feature>} [features]
+// * Destination collection for the drawn features.
+// * @property {VectorSource} [source] Destination source for
+// * the drawn features.
+// * @property {number} [dragVertexDelay=500] Delay in milliseconds after pointerdown
+// * before the current vertex can be dragged to its exact position.
+// * @property {number} [snapTolerance=12] Pixel distance for snapping to the
+// * drawing finish. Must be greater than `0`.
+// * @property {boolean} [stopClick=false] Stop click, singleclick, and
+// * doubleclick events from firing during drawing.
+// * @property {number} [maxPoints] The number of points that can be drawn before
+// * a polygon ring or line string is finished. By default there is no
+// * restriction.
+// * @property {number} [minPoints] The number of points that must be drawn
+// * before a polygon ring or line string can be finished. Default is `3` for
+// * polygon rings and `2` for line strings.
+// * @property {import("ol/events/condition.js").Condition} [finishCondition] A function
+// * that takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
+// * boolean to indicate whether the drawing can be finished. Not used when drawing
+// * POINT or MULTI_POINT geometries.
+// * @property {import("ol/style/Style.js").StyleLike} [style]
+// * Style for sketch features.
+// * @property {GeometryFunction} [geometryFunction]
+// * Function that is called when a geometry's coordinates are updated.
+// * @property {string} [geometryName] Geometry name to use for features created
+// * by the draw interaction.
+// * @property {import("ol/events/condition.js").Condition} [condition] A function that
+// * takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and returns a
+// * boolean to indicate whether that event should be handled.
+// * By default {@link module:ol/events/condition.noModifierKeys}, i.e. a click,
+// * adds a vertex or deactivates freehand drawing.
+// * @property {boolean} [freehand=false] Operate in freehand mode for lines,
+// * polygons, and circles. This makes the interaction always operate in freehand
+// * mode and takes precedence over any `freehandCondition` option.
+// * @property {import("ol/events/condition.js").Condition} [freehandCondition]
+// * Condition that activates freehand drawing for lines and polygons. This
+// * function takes an {@link module:ol/MapBrowserEvent~MapBrowserEvent} and
+// * returns a boolean to indicate whether that event should be handled. The
+// * default is {@link module:ol/events/condition.shiftKeyOnly}, meaning that the
+// * Shift key activates freehand drawing.
+// * @property {boolean} [wrapX=false] Wrap the world horizontally on the sketch
+// * overlay.
+// */
+// /**
+// * Coordinate type when drawing points.
+// * @typedef {import("ol/coordinate.js").Coordinate} PointCoordType
+// */
+// /**
+// * Coordinate type when drawing lines.
+// * @typedef {Array<import("ol/coordinate.js").Coordinate>} LineCoordType
+// */
+// /**
+// * Coordinate type when drawing polygons.
+// * @typedef {Array<Array<import("ol/coordinate.js").Coordinate>>} PolyCoordType
+// */
+// /**
+// * Types used for drawing coordinates.
+// * @typedef {PointCoordType|LineCoordType|PolyCoordType} SketchCoordType
+// */
+// /**
+// * Function that takes an array of coordinates and an optional existing geometry
+// * and a projection as arguments, and returns a geometry. The optional existing
+// * geometry is the geometry that is returned when the function is called without
+// * a second argument.
+// * @typedef {function(!SketchCoordType, import("ol/geom/SimpleGeometry.js").default,
+// * import("ol/proj/Projection.js").default):
+// * import("ol/geom/SimpleGeometry.js").default} GeometryFunction
+// */
+// /**
+// * Draw mode. This collapses multi-part geometry types with their single-part
+// * cousins.
+// * @enum {string}
+// */
+// var Mode = {
+// POINT: "Point",
+// LINE_STRING: "LineString",
+// POLYGON: "Polygon",
+// CIRCLE: "Circle",
+// };
+// /**
+// * @enum {string}
+// */
+// var DrawEventType = {
+// /**
+// * Triggered upon feature draw start
+// * @event DrawEvent#drawstart
+// * @api
+// */
+// DRAWSTART: "drawstart",
+// /**
+// * Triggered upon feature draw end
+// * @event DrawEvent#drawend
+// * @api
+// */
+// DRAWEND: "drawend",
+// /**
+// * Triggered upon feature draw abortion
+// * @event DrawEvent#drawabort
+// * @api
+// */
+// DRAWABORT: "drawabort",
+// };
+// /**
+// * @classdesc
+// * Events emitted by {@link module:ol/interaction/Draw~Draw} instances are
+// * instances of this type.
+// */
+// var DrawEvent = /** @class */ (function (_super) {
+// __extends(DrawEvent, _super);
+// /**
+// * @param {DrawEventType} type Type.
+// * @param {Feature} feature The feature drawn.
+// */
+// function DrawEvent(type, feature) {
+// var _this = _super.call(this, type) || this;
+// /**
+// * The feature being drawn.
+// * @type {Feature}
+// * @api
+// */
+// _this.feature = feature;
+// return _this;
+// }
+// return DrawEvent;
+// })(Event);
+// export {
+// DrawEvent
+// };
+// /***
+// * @template Return
+// * @typedef {import("ol/Observable").OnSignature<import("ol/Observable").EventTypes, import("ol/events/Event.js").default, Return> &
+// * import("ol/Observable").OnSignature<import("ol/ObjectEventType").Types|
+// * 'change:active', import("ol/Object").ObjectEvent, Return> &
+// * import("ol/Observable").OnSignature<'drawabort'|'drawend'|'drawstart', DrawEvent, Return> &
+// * import("ol/Observable").CombinedOnSignature<import("ol/Observable").EventTypes|import("ol/ObjectEventType").Types|
+// * 'change:active'|'drawabort'|'drawend'|'drawstart', Return>} DrawOnSignature
+// */
+// /**
+// * @classdesc
+// * Interaction for drawing feature geometries.
+// *
+// * @fires DrawEvent
+// * @api
+// */
+// var Draw = /** @class */ (function (_super) {
+// __extends(Draw, _super);
+// /**
+// * @param {Options} options Options.
+// */
+// function Draw(options) {
+// var _this = this;
+// var pointerOptions = /** @type {import("./Pointer.js").Options} */ (
+// options
+// );
+// if (!pointerOptions.stopDown) {
+// pointerOptions.stopDown = FALSE;
+// }
+// _this = _super.call(this, pointerOptions) || this;
+// /***
+// * @type {DrawOnSignature<import("ol/events").EventsKey>}
+// */
+// _this.coordinate = options.coordinate;
+// /***
+// * 输出坐标
+// */
+// _this.coordinateOver = options.coordinateOver;
+// /***
+// * 结束绘画
+// */
+// _this.overDraw = false;
+// /***
+// * 控制结束绘画
+// */
+// _this.isPoint = options.isPoint;
+// /***
+// * 是否是点
+// */
+// _this.coordinateOverPoint = options.coordinateOverPoint;
+// /***
+// * 输出点
+// */
+// _this.on;
+// /***
+// * @type {DrawOnSignature<import("ol/events").EventsKey>}
+// */
+// _this.once;
+// /***
+// * @type {DrawOnSignature<void>}
+// */
+// _this.un;
+// /**
+// * @type {boolean}
+// * @private
+// */
+// _this.shouldHandle_ = false;
+// /**
+// * @type {import("ol/pixel.js").Pixel}
+// * @private
+// */
+// _this.downPx_ = null;
+// /**
+// * @type {?}
+// * @private
+// */
+// _this.downTimeout_;
+// /**
+// * @type {number|undefined}
+// * @private
+// */
+// _this.lastDragTime_;
+// /**
+// * Pointer type of the last pointermove event
+// * @type {string}
+// * @private
+// */
+// _this.pointerType_;
+// /**
+// * @type {boolean}
+// * @private
+// */
+// _this.freehand_ = false;
+// /**
+// * Target source for drawn features.
+// * @type {VectorSource}
+// * @private
+// */
+// _this.source_ = options.source ? options.source : null;
+// /**
+// * Target collection for drawn features.
+// * @type {import("ol/Collection.js").default<Feature>}
+// * @private
+// */
+// _this.features_ = options.features ? options.features : null;
+// /**
+// * Pixel distance for snapping.
+// * @type {number}
+// * @private
+// */
+// _this.snapTolerance_ = options.snapTolerance ? options.snapTolerance : 12;
+// /**
+// * Geometry type.
+// * @type {import("ol/geom/GeometryType.js").default}
+// * @private
+// */
+// _this.type_ = /** @type {import("ol/geom/GeometryType.js").default} */ (
+// options.type
+// );
+// /**
+// * Drawing mode (derived from geometry type.
+// * @type {Mode}
+// * @private
+// */
+// _this.mode_ = getMode(_this.type_);
+// /**
+// * Stop click, singleclick, and doubleclick events from firing during drawing.
+// * Default is `false`.
+// * @type {boolean}
+// * @private
+// */
+// _this.stopClick_ = !!options.stopClick;
+// /**
+// * The number of points that must be drawn before a polygon ring or line
+// * string can be finished. The default is 3 for polygon rings and 2 for
+// * line strings.
+// * @type {number}
+// * @private
+// */
+// _this.minPoints_ = options.minPoints ?
+// options.minPoints :
+// _this.mode_ === Mode.POLYGON ?
+// 3 :
+// 2;
+// /**
+// * The number of points that can be drawn before a polygon ring or line string
+// * is finished. The default is no restriction.
+// * @type {number}
+// * @private
+// */
+// _this.maxPoints_ =
+// _this.mode_ === Mode.CIRCLE ?
+// 2 :
+// options.maxPoints ?
+// options.maxPoints :
+// Infinity;
+// /**
+// * A function to decide if a potential finish coordinate is permissible
+// * @private
+// * @type {import("ol/events/condition.js").Condition}
+// */
+// _this.finishCondition_ = options.finishCondition ?
+// options.finishCondition :
+// TRUE;
+// var geometryFunction = options.geometryFunction;
+// if (!geometryFunction) {
+// var mode_1 = _this.mode_;
+// if (mode_1 === Mode.CIRCLE) {
+// /**
+// * @param {!LineCoordType} coordinates The coordinates.
+// * @param {import("ol/geom/SimpleGeometry.js").default|undefined} geometry Optional geometry.
+// * @param {import("ol/proj/Projection.js").default} projection The view projection.
+// * @return {import("ol/geom/SimpleGeometry.js").default} A geometry.
+// */
+// geometryFunction = function (coordinates, geometry, projection) {
+// var circle = geometry ?
+// /** @type {Circle} */
+// (geometry) :
+// new Circle([NaN, NaN]);
+// var center = fromUserCoordinate(coordinates[0], projection);
+// var squaredLength = squaredCoordinateDistance(
+// center,
+// fromUserCoordinate(coordinates[coordinates.length - 1], projection)
+// );
+// circle.setCenterAndRadius(center, Math.sqrt(squaredLength));
+// var userProjection = getUserProjection();
+// if (userProjection) {
+// circle.transform(projection, userProjection);
+// }
+// return circle;
+// };
+// } else {
+// var Constructor_1;
+// if (mode_1 === Mode.POINT) {
+// Constructor_1 = Point;
+// } else if (mode_1 === Mode.LINE_STRING) {
+// Constructor_1 = LineString;
+// } else if (mode_1 === Mode.POLYGON) {
+// Constructor_1 = Polygon;
+// }
+// /**
+// * @param {!LineCoordType} coordinates The coordinates.
+// * @param {import("ol/geom/SimpleGeometry.js").default|undefined} geometry Optional geometry.
+// * @param {import("ol/proj/Projection.js").default} projection The view projection.
+// * @return {import("ol/geom/SimpleGeometry.js").default} A geometry.
+// */
+// geometryFunction = function (coordinates, geometry, projection) {
+// if (geometry) {
+// if (mode_1 === Mode.POLYGON) {
+// if (coordinates[0].length) {
+// // Add a closing coordinate to match the first
+// geometry.setCoordinates([
+// coordinates[0].concat([coordinates[0][0]]),
+// ]);
+// } else {
+// geometry.setCoordinates([]);
+// }
+// } else {
+// geometry.setCoordinates(coordinates);
+// }
+// } else {
+// geometry = new Constructor_1(coordinates);
+// }
+// return geometry;
+// };
+// }
+// }
+// /**
+// * @type {GeometryFunction}
+// * @private
+// */
+// _this.geometryFunction_ = geometryFunction;
+// /**
+// * @type {number}
+// * @private
+// */
+// _this.dragVertexDelay_ =
+// options.dragVertexDelay !== undefined ? options.dragVertexDelay : 500;
+// /**
+// * Finish coordinate for the feature (first point for polygons, last point for
+// * linestrings).
+// * @type {import("ol/coordinate.js").Coordinate}
+// * @private
+// */
+// _this.finishCoordinate_ = null;
+// /**
+// * Sketch feature.
+// * @type {Feature}
+// * @private
+// */
+// _this.sketchFeature_ = null;
+// /**
+// * Sketch point.
+// * @type {Feature<Point>}
+// * @private
+// */
+// _this.sketchPoint_ = null;
+// /**
+// * Sketch coordinates. Used when drawing a line or polygon.
+// * @type {SketchCoordType}
+// * @private
+// */
+// _this.sketchCoords_ = null;
+// /**
+// * Sketch line. Used when drawing polygon.
+// * @type {Feature<LineString>}
+// * @private
+// */
+// _this.sketchLine_ = null;
+// /**
+// * Sketch line coordinates. Used when drawing a polygon or circle.
+// * @type {LineCoordType}
+// * @private
+// */
+// _this.sketchLineCoords_ = null;
+// /**
+// * Squared tolerance for handling up events. If the squared distance
+// * between a down and up event is greater than this tolerance, up events
+// * will not be handled.
+// * @type {number}
+// * @private
+// */
+// _this.squaredClickTolerance_ = options.clickTolerance ?
+// options.clickTolerance * options.clickTolerance :
+// 36;
+// /**
+// * Draw overlay where our sketch features are drawn.
+// * @type {VectorLayer}
+// * @private
+// */
+// _this.overlay_ = new VectorLayer({
+// source: new VectorSource({
+// useSpatialIndex: false,
+// wrapX: options.wrapX ? options.wrapX : false,
+// }),
+// style: options.style ? options.style : getDefaultStyleFunction(),
+// updateWhileInteracting: true,
+// });
+// /**
+// * Name of the geometry attribute for newly created features.
+// * @type {string|undefined}
+// * @private
+// */
+// _this.geometryName_ = options.geometryName;
+// /**
+// * @private
+// * @type {import("ol/events/condition.js").Condition}
+// */
+// _this.condition_ = options.condition ? options.condition : noModifierKeys;
+// /**
+// * @private
+// * @type {import("ol/events/condition.js").Condition}
+// */
+// _this.freehandCondition_;
+// if (options.freehand) {
+// _this.freehandCondition_ = always;
+// } else {
+// _this.freehandCondition_ = options.freehandCondition ?
+// options.freehandCondition :
+// shiftKeyOnly;
+// }
+// _this.addChangeListener(InteractionProperty.ACTIVE, _this.updateState_);
+// return _this;
+// }
+// /**
+// * Remove the interaction from its current map and attach it to the new map.
+// * Subclasses may set up event handlers to get notified about changes to
+// * the map here.
+// * @param {import("ol/PluggableMap.js").default} map Map.
+// */
+// Draw.prototype.setMap = function (map) {
+// _super.prototype.setMap.call(this, map);
+// this.updateState_();
+// };
+// /**
+// * Get the overlay layer that this interaction renders sketch features to.
+// * @return {VectorLayer} Overlay layer.
+// * @api
+// */
+// Draw.prototype.getOverlay = function () {
+// return this.overlay_;
+// };
+// /**
+// * Handles the {@link module:ol/MapBrowserEvent map browser event} and may actually draw or finish the drawing.
+// * @param {import("ol/MapBrowserEvent.js").default} event Map browser event.
+// * @return {boolean} `false` to stop event propagation.
+// * @api
+// */
+// Draw.prototype.controlDrawing = function (val) {
+// this.overDraw = val;
+// };
- Draw.prototype.handleEvent = function (event) {
- if (event.originalEvent.type === EventType.CONTEXTMENU) {
- // Avoid context menu for long taps when drawing on mobile
- event.originalEvent.preventDefault();
- }
- this.freehand_ =
- this.mode_ !== Mode.POINT && this.freehandCondition_(event);
- var move = event.type === MapBrowserEventType.POINTERMOVE;
- var pass = true;
- if (
- !this.freehand_ &&
- this.lastDragTime_ &&
- event.type === MapBrowserEventType.POINTERDRAG
- ) {
- var now = Date.now();
- if (now - this.lastDragTime_ >= this.dragVertexDelay_) {
- this.downPx_ = event.pixel;
- this.shouldHandle_ = !this.freehand_;
- move = true;
- } else {
- this.lastDragTime_ = undefined;
- }
- if (this.shouldHandle_ && this.downTimeout_ !== undefined) {
- clearTimeout(this.downTimeout_);
- this.downTimeout_ = undefined;
- }
- }
- if (
- this.freehand_ &&
- event.type === MapBrowserEventType.POINTERDRAG &&
- this.sketchFeature_ !== null
- ) {
- if (this.overDraw) {
- return;
- }
- this.addToDrawing_(event.coordinate);
- pass = false;
- } else if (
- this.freehand_ &&
- event.type === MapBrowserEventType.POINTERDOWN
- ) {
- pass = false;
- } else if (move && this.getPointerCount() < 2) {
- pass = event.type === MapBrowserEventType.POINTERMOVE;
- if (pass && this.freehand_) {
- if (this.overDraw) {
- return;
- }
- this.handlePointerMove_(event);
- if (this.shouldHandle_) {
- // Avoid page scrolling when freehand drawing on mobile
- event.originalEvent.preventDefault();
- }
- } else if (
- event.originalEvent.pointerType === "mouse" ||
- (event.type === MapBrowserEventType.POINTERDRAG &&
- this.downTimeout_ === undefined)
- ) {
- if (this.overDraw) {
- return;
- }
- this.handlePointerMove_(event);
- }
- } else if (event.type === MapBrowserEventType.DBLCLICK) {
- pass = false;
- }
- return _super.prototype.handleEvent.call(this, event) && pass;
- };
- /**
- * Handle pointer down events.
- * @param {import("ol/MapBrowserEvent.js").default} event Event.
- * @return {boolean} If the event was consumed.
- */
- Draw.prototype.handleDownEvent = function (event) {
- // console.log(event.coordinate_, 'handleDownEvent')
- this.shouldHandle_ = !this.freehand_;
- if (this.freehand_) {
- this.downPx_ = event.pixel;
- if (!this.finishCoordinate_) {
- this.startDrawing_(event.coordinate);
- }
- return true;
- } else if (this.condition_(event)) {
- this.lastDragTime_ = Date.now();
- this.downTimeout_ = setTimeout(
- function () {
- this.handlePointerMove_(
- new MapBrowserEvent(
- MapBrowserEventType.POINTERMOVE,
- event.map,
- event.originalEvent,
- false,
- event.frameState
- )
- );
- }.bind(this),
- this.dragVertexDelay_
- );
- this.downPx_ = event.pixel;
- return true;
- } else {
- this.lastDragTime_ = undefined;
- return false;
- }
- };
- /**
- * Handle pointer up events.
- * @param {import("ol/MapBrowserEvent.js").default} event Event.
- * @return {boolean} If the event was consumed.
- */
- Draw.prototype.handleUpEvent = function (event) {
- // console.log(event.coordinate_, 'handleUpEvent')//获取坐标点
- if (this.isPoint) {
- this.coordinateOverPoint(event);
- this.finishDrawing();
- return;
- }
- var pass = true;
- if (this.getPointerCount() === 0) {
- if (this.downTimeout_) {
- clearTimeout(this.downTimeout_);
- this.downTimeout_ = undefined;
- }
- this.handlePointerMove_(event);
- if (this.shouldHandle_) {
- var startingToDraw = !this.finishCoordinate_;
- if (startingToDraw) {
- //开始后抬起
- // this.coordinateOverPoint(event);
- // console.log(1)
- this.coordinate(event);
- this.startDrawing_(event.coordinate);
- }
- if (!startingToDraw && this.freehand_) {
- this.finishDrawing();
- } else if (
- !this.freehand_ &&
- (!startingToDraw || this.mode_ === Mode.POINT)
- ) {
- //选择后抬起
- this.coordinate(event);
- if (this.atFinish_(event.pixel)) {
- //结束绘画
- this.coordinateOver("结束");
- if (this.finishCondition_(event)) {
- this.finishDrawing();
- }
- } else {
- // console.log(28888888888)
- this.addToDrawing_(event.coordinate);
- }
- }
- pass = false;
- } else if (this.freehand_) {
- this.abortDrawing();
- }
- }
- if (!pass && this.stopClick_) {
- event.preventDefault();
- }
- return pass;
- };
- // Draw.prototype.getCoordinate = function (fn) {
- // this.coordinate = fn;
- // console.log(this.coordinate)
- // }
- /**
- * Handle move events.
- * @param {import("ol/MapBrowserEvent.js").default} event A move event.
- * @private
- */
- Draw.prototype.handlePointerMove_ = function (event) {
- this.pointerType_ = event.originalEvent.pointerType;
- if (
- this.downPx_ &&
- ((!this.freehand_ && this.shouldHandle_) ||
- (this.freehand_ && !this.shouldHandle_))
- ) {
- var downPx = this.downPx_;
- var clickPx = event.pixel;
- var dx = downPx[0] - clickPx[0];
- var dy = downPx[1] - clickPx[1];
- var squaredDistance = dx * dx + dy * dy;
- this.shouldHandle_ = this.freehand_ ?
- squaredDistance > this.squaredClickTolerance_ :
- squaredDistance <= this.squaredClickTolerance_;
- if (!this.shouldHandle_) {
- return;
- }
- }
- if (this.finishCoordinate_) {
- this.modifyDrawing_(event.coordinate);
- } else {
- this.createOrUpdateSketchPoint_(event.coordinate.slice());
- }
- };
- /**
- * Determine if an event is within the snapping tolerance of the start coord.
- * @param {import("ol/pixel.js").Pixel} pixel Pixel.
- * @return {boolean} The event is within the snapping tolerance of the start.
- * @private
- */
- Draw.prototype.atFinish_ = function (pixel) {
- // console.log(pixel, 879789)
- var at = false;
- if (this.sketchFeature_) {
- var potentiallyDone = false;
- var potentiallyFinishCoordinates = [this.finishCoordinate_];
- var mode = this.mode_;
- if (mode === Mode.POINT) {
- at = true;
- } else if (mode === Mode.CIRCLE) {
- at = this.sketchCoords_.length === 2;
- } else if (mode === Mode.LINE_STRING) {
- potentiallyDone = this.sketchCoords_.length > this.minPoints_;
- } else if (mode === Mode.POLYGON) {
- var sketchCoords = /** @type {PolyCoordType} */ (this.sketchCoords_);
- potentiallyDone = sketchCoords[0].length > this.minPoints_;
- potentiallyFinishCoordinates = [
- sketchCoords[0][0],
- sketchCoords[0][sketchCoords[0].length - 2],
- ];
- }
- if (potentiallyDone) {
- var map = this.getMap();
- for (var i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) {
- var finishCoordinate = potentiallyFinishCoordinates[i];
- var finishPixel = map.getPixelFromCoordinate(finishCoordinate);
- var dx = pixel[0] - finishPixel[0];
- var dy = pixel[1] - finishPixel[1];
- var snapTolerance = this.freehand_ ? 1 : this.snapTolerance_;
- at = Math.sqrt(dx * dx + dy * dy) <= snapTolerance;
- if (at) {
- this.finishCoordinate_ = finishCoordinate;
- break;
- }
- }
- }
- }
- return at;
- };
- /**
- * @param {import("ol/coordinate").Coordinate} coordinates Coordinate.
- * @private
- */
- Draw.prototype.createOrUpdateSketchPoint_ = function (coordinates) {
- if (!this.sketchPoint_) {
- this.sketchPoint_ = new Feature(new Point(coordinates));
- this.updateSketchFeatures_();
- } else {
- var sketchPointGeom = this.sketchPoint_.getGeometry();
- sketchPointGeom.setCoordinates(coordinates);
- }
- };
- /**
- * @param {import("ol/geom/Polygon.js").default} geometry Polygon geometry.
- * @private
- */
- Draw.prototype.createOrUpdateCustomSketchLine_ = function (geometry) {
- if (!this.sketchLine_) {
- this.sketchLine_ = new Feature();
- }
- var ring = geometry.getLinearRing(0);
- var sketchLineGeom = this.sketchLine_.getGeometry();
- if (!sketchLineGeom) {
- sketchLineGeom = new LineString(
- ring.getFlatCoordinates(),
- ring.getLayout()
- );
- this.sketchLine_.setGeometry(sketchLineGeom);
- } else {
- sketchLineGeom.setFlatCoordinates(
- ring.getLayout(),
- ring.getFlatCoordinates()
- );
- sketchLineGeom.changed();
- }
- };
- /**
- * Start the drawing.
- * @param {import("ol/coordinate.js").Coordinate} start Start coordinate.
- * @private
- */
- Draw.prototype.startDrawing_ = function (start) {
- if (this.overDraw) {
- return;
- }
- var projection = this.getMap().getView().getProjection();
- this.finishCoordinate_ = start;
- if (this.mode_ === Mode.POINT) {
- this.sketchCoords_ = start.slice();
- } else if (this.mode_ === Mode.POLYGON) {
- this.sketchCoords_ = [
- [start.slice(), start.slice()]
- ];
- this.sketchLineCoords_ = this.sketchCoords_[0];
- } else {
- this.sketchCoords_ = [start.slice(), start.slice()];
- }
- if (this.sketchLineCoords_) {
- this.sketchLine_ = new Feature(new LineString(this.sketchLineCoords_));
- }
- var geometry = this.geometryFunction_(
- this.sketchCoords_,
- undefined,
- projection
- );
- this.sketchFeature_ = new Feature();
- if (this.geometryName_) {
- this.sketchFeature_.setGeometryName(this.geometryName_);
- }
- this.sketchFeature_.setGeometry(geometry);
- this.updateSketchFeatures_();
- this.dispatchEvent(
- new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_)
- );
- };
- /**
- * Modify the drawing.
- * @param {import("ol/coordinate.js").Coordinate} coordinate Coordinate.
- * @private
- */
- Draw.prototype.modifyDrawing_ = function (coordinate) {
- var map = this.getMap();
- var geometry = this.sketchFeature_.getGeometry();
- var projection = map.getView().getProjection();
- var coordinates, last;
- if (this.mode_ === Mode.POINT) {
- last = this.sketchCoords_;
- } else if (this.mode_ === Mode.POLYGON) {
- coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];
- last = coordinates[coordinates.length - 1];
- if (this.atFinish_(map.getPixelFromCoordinate(coordinate))) {
- // snap to finish
- coordinate = this.finishCoordinate_.slice();
- }
- } else {
- coordinates = this.sketchCoords_;
- last = coordinates[coordinates.length - 1];
- }
- last[0] = coordinate[0];
- last[1] = coordinate[1];
- this.geometryFunction_(
- /** @type {!LineCoordType} */
- (this.sketchCoords_),
- geometry,
- projection
- );
- if (this.sketchPoint_) {
- var sketchPointGeom = this.sketchPoint_.getGeometry();
- sketchPointGeom.setCoordinates(coordinate);
- }
- if (
- geometry.getType() === GeometryType.POLYGON &&
- this.mode_ !== Mode.POLYGON
- ) {
- this.createOrUpdateCustomSketchLine_( /** @type {Polygon} */ (geometry));
- } else if (this.sketchLineCoords_) {
- var sketchLineGeom = this.sketchLine_.getGeometry();
- sketchLineGeom.setCoordinates(this.sketchLineCoords_);
- }
- this.updateSketchFeatures_();
- };
- /**
- * Add a new coordinate to the drawing.
- * @param {!PointCoordType} coordinate Coordinate
- * @private
- */
- Draw.prototype.addToDrawing_ = function (coordinate) {
- var geometry = this.sketchFeature_.getGeometry();
- var projection = this.getMap().getView().getProjection();
- var done;
- var coordinates;
- var mode = this.mode_;
- if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) {
- this.finishCoordinate_ = coordinate.slice();
- coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);
- if (coordinates.length >= this.maxPoints_) {
- if (this.freehand_) {
- coordinates.pop();
- } else {
- done = true;
- }
- }
- coordinates.push(coordinate.slice());
- this.geometryFunction_(coordinates, geometry, projection);
- } else if (mode === Mode.POLYGON) {
- coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];
- if (coordinates.length >= this.maxPoints_) {
- if (this.freehand_) {
- coordinates.pop();
- } else {
- done = true;
- }
- }
- coordinates.push(coordinate.slice());
- if (done) {
- this.finishCoordinate_ = coordinates[0];
- }
- this.geometryFunction_(this.sketchCoords_, geometry, projection);
- }
- this.createOrUpdateSketchPoint_(coordinate.slice());
- this.updateSketchFeatures_();
- if (done) {
- this.finishDrawing();
- }
- };
- /**
- * Remove last point of the feature currently being drawn. Does not do anything when
- * drawing POINT or MULTI_POINT geometries.
- * @api
- */
- Draw.prototype.removeLastPoint = function () {
- if (!this.sketchFeature_) {
- return;
- }
- var geometry = this.sketchFeature_.getGeometry();
- var projection = this.getMap().getView().getProjection();
- var coordinates;
- var mode = this.mode_;
- if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) {
- coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);
- coordinates.splice(-2, 1);
- if (coordinates.length >= 2) {
- this.finishCoordinate_ = coordinates[coordinates.length - 2].slice();
- var finishCoordinate = this.finishCoordinate_.slice();
- coordinates[coordinates.length - 1] = finishCoordinate;
- this.createOrUpdateSketchPoint_(finishCoordinate);
- }
- this.geometryFunction_(coordinates, geometry, projection);
- if (geometry.getType() === GeometryType.POLYGON && this.sketchLine_) {
- this.createOrUpdateCustomSketchLine_( /** @type {Polygon} */ (geometry));
- }
- } else if (mode === Mode.POLYGON) {
- coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];
- coordinates.splice(-2, 1);
- var sketchLineGeom = this.sketchLine_.getGeometry();
- if (coordinates.length >= 2) {
- var finishCoordinate = coordinates[coordinates.length - 2].slice();
- coordinates[coordinates.length - 1] = finishCoordinate;
- this.createOrUpdateSketchPoint_(finishCoordinate);
- }
- sketchLineGeom.setCoordinates(coordinates);
- this.geometryFunction_(this.sketchCoords_, geometry, projection);
- }
- if (coordinates.length === 1) {
- this.abortDrawing();
- }
- this.updateSketchFeatures_();
- };
- /**
- * Stop drawing and add the sketch feature to the target layer.
- * The {@link module:ol/interaction/Draw~DrawEventType.DRAWEND} event is
- * dispatched before inserting the feature.
- * @api
- */
- Draw.prototype.finishDrawing = function () {
- // console.log("finishDrawing")
- var sketchFeature = this.abortDrawing_();
- if (!sketchFeature) {
- return;
- }
- var coordinates = this.sketchCoords_;
- var geometry = sketchFeature.getGeometry();
- var projection = this.getMap().getView().getProjection();
- if (this.mode_ === Mode.LINE_STRING) {
- // remove the redundant last point
- coordinates.pop();
- this.geometryFunction_(coordinates, geometry, projection);
- } else if (this.mode_ === Mode.POLYGON) {
- // remove the redundant last point in ring
- /** @type {PolyCoordType} */
- (coordinates)[0].pop();
- this.geometryFunction_(coordinates, geometry, projection);
- coordinates = geometry.getCoordinates();
- }
- // cast multi-part geometries
- if (this.type_ === GeometryType.MULTI_POINT) {
- sketchFeature.setGeometry(
- new MultiPoint([ /** @type {PointCoordType} */ (coordinates)])
- );
- } else if (this.type_ === GeometryType.MULTI_LINE_STRING) {
- sketchFeature.setGeometry(
- new MultiLineString([ /** @type {LineCoordType} */ (coordinates)])
- );
- } else if (this.type_ === GeometryType.MULTI_POLYGON) {
- sketchFeature.setGeometry(
- new MultiPolygon([ /** @type {PolyCoordType} */ (coordinates)])
- );
- }
- // First dispatch event to allow full set up of feature
- this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND, sketchFeature));
- // Then insert feature
- if (this.features_) {
- this.features_.push(sketchFeature);
- }
- if (this.source_) {
- this.source_.addFeature(sketchFeature);
- }
- };
- /**
- * Stop drawing without adding the sketch feature to the target layer.
- * @return {Feature} The sketch feature (or null if none).
- * @private
- */
- Draw.prototype.abortDrawing_ = function () {
- this.finishCoordinate_ = null;
- var sketchFeature = this.sketchFeature_;
- this.sketchFeature_ = null;
- this.sketchPoint_ = null;
- this.sketchLine_ = null;
- this.overlay_.getSource().clear(true);
- return sketchFeature;
- };
- /**
- * Stop drawing without adding the sketch feature to the target layer.
- * @api
- */
- Draw.prototype.abortDrawing = function () {
- var sketchFeature = this.abortDrawing_();
- if (sketchFeature) {
- this.dispatchEvent(new DrawEvent(DrawEventType.DRAWABORT, sketchFeature));
- }
- };
- /**
- * Append coordinates to the end of the geometry that is currently being drawn.
- * This can be used when drawing LineStrings or Polygons. Coordinates will
- * either be appended to the current LineString or the outer ring of the current
- * Polygon. If no geometry is being drawn, a new one will be created.
- * @param {!LineCoordType} coordinates Linear coordinates to be appended to
- * the coordinate array.
- * @api
- */
- Draw.prototype.appendCoordinates = function (coordinates) {
- var mode = this.mode_;
- var newDrawing = !this.sketchFeature_;
- if (newDrawing) {
- this.startDrawing_(coordinates[0]);
- }
- /** @type {LineCoordType} */
- var sketchCoords;
- if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) {
- sketchCoords = /** @type {LineCoordType} */ (this.sketchCoords_);
- } else if (mode === Mode.POLYGON) {
- sketchCoords =
- this.sketchCoords_ && this.sketchCoords_.length ?
- /** @type {PolyCoordType} */
- (this.sketchCoords_)[0] : [];
- } else {
- return;
- }
- if (newDrawing) {
- sketchCoords.shift();
- }
- // Remove last coordinate from sketch drawing (this coordinate follows cursor position)
- sketchCoords.pop();
- // Append coordinate list
- for (var i = 0; i < coordinates.length; i++) {
- this.addToDrawing_(coordinates[i]);
- }
- var ending = coordinates[coordinates.length - 1];
- // Duplicate last coordinate for sketch drawing (cursor position)
- this.addToDrawing_(ending);
- this.modifyDrawing_(ending);
- };
- /**
- * Initiate draw mode by starting from an existing geometry which will
- * receive new additional points. This only works on features with
- * `LineString` geometries, where the interaction will extend lines by adding
- * points to the end of the coordinates array.
- * This will change the original feature, instead of drawing a copy.
- *
- * The function will dispatch a `drawstart` event.
- *
- * @param {!Feature<LineString>} feature Feature to be extended.
- * @api
- */
- Draw.prototype.extend = function (feature) {
- var geometry = feature.getGeometry();
- var lineString = geometry;
- this.sketchFeature_ = feature;
- this.sketchCoords_ = lineString.getCoordinates();
- var last = this.sketchCoords_[this.sketchCoords_.length - 1];
- this.finishCoordinate_ = last.slice();
- this.sketchCoords_.push(last.slice());
- this.sketchPoint_ = new Feature(new Point(last));
- this.updateSketchFeatures_();
- this.dispatchEvent(
- new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_)
- );
- };
- /**
- * Redraw the sketch features.
- * @private
- */
- Draw.prototype.updateSketchFeatures_ = function () {
- var sketchFeatures = [];
- if (this.sketchFeature_) {
- sketchFeatures.push(this.sketchFeature_);
- }
- if (this.sketchLine_) {
- sketchFeatures.push(this.sketchLine_);
- }
- if (this.sketchPoint_) {
- sketchFeatures.push(this.sketchPoint_);
- }
- var overlaySource = this.overlay_.getSource();
- overlaySource.clear(true);
- overlaySource.addFeatures(sketchFeatures);
- };
- /**
- * @private
- */
- Draw.prototype.updateState_ = function () {
- var map = this.getMap();
- var active = this.getActive();
- if (!map || !active) {
- this.abortDrawing();
- }
- this.overlay_.setMap(active ? map : null);
- };
- return Draw;
-})(PointerInteraction);
-/**
- * @return {import("ol/style/Style.js").StyleFunction} Styles.
- */
-function getDefaultStyleFunction() {
- var styles = createEditingStyle();
- return function (feature, resolution) {
- return styles[feature.getGeometry().getType()];
- };
-}
-/**
- * Create a `geometryFunction` for `type: 'Circle'` that will create a regular
- * polygon with a user specified number of sides and start angle instead of a
- * `import("ol/geom/Circle.js").Circle` geometry.
- * @param {number} [opt_sides] Number of sides of the regular polygon.
- * Default is 32.
- * @param {number} [opt_angle] Angle of the first point in counter-clockwise
- * radians. 0 means East.
- * Default is the angle defined by the heading from the center of the
- * regular polygon to the current pointer position.
- * @return {GeometryFunction} Function that draws a polygon.
- * @api
- */
-export function createRegularPolygon(opt_sides, opt_angle) {
- return function (coordinates, opt_geometry, projection) {
- var center = fromUserCoordinate(
- /** @type {LineCoordType} */
- (coordinates)[0],
- projection
- );
- var end = fromUserCoordinate(
- /** @type {LineCoordType} */
- (coordinates)[coordinates.length - 1],
- projection
- );
- var radius = Math.sqrt(squaredCoordinateDistance(center, end));
- var geometry = opt_geometry ?
- /** @type {Polygon} */
- (opt_geometry) :
- fromCircle(new Circle(center), opt_sides);
- var angle = opt_angle;
- if (!opt_angle && opt_angle !== 0) {
- var x = end[0] - center[0];
- var y = end[1] - center[1];
- angle = Math.atan2(y, x);
- }
- makeRegular(geometry, center, radius, angle);
- var userProjection = getUserProjection();
- if (userProjection) {
- geometry.transform(projection, userProjection);
- }
- return geometry;
- };
-}
-/**
- * Create a `geometryFunction` that will create a box-shaped polygon (aligned
- * with the coordinate system axes). Use this with the draw interaction and
- * `type: 'Circle'` to return a box instead of a circle geometry.
- * @return {GeometryFunction} Function that draws a box-shaped polygon.
- * @api
- */
-export function createBox() {
- return function (coordinates, opt_geometry, projection) {
- var extent = boundingExtent(
- /** @type {LineCoordType} */
- ([
- coordinates[0],
- coordinates[coordinates.length - 1],
- ]).map(function (coordinate) {
- return fromUserCoordinate(coordinate, projection);
- })
- );
- var boxCoordinates = [
- [
- getBottomLeft(extent),
- getBottomRight(extent),
- getTopRight(extent),
- getTopLeft(extent),
- getBottomLeft(extent),
- ],
- ];
- var geometry = opt_geometry;
- if (geometry) {
- geometry.setCoordinates(boxCoordinates);
- } else {
- geometry = new Polygon(boxCoordinates);
- }
- var userProjection = getUserProjection();
- if (userProjection) {
- geometry.transform(projection, userProjection);
- }
- return geometry;
- };
-}
-/**
- * Get the drawing mode. The mode for multi-part geometries is the same as for
- * their single-part cousins.
- * @param {import("ol/geom/GeometryType.js").default} type Geometry type.
- * @return {Mode} Drawing mode.
- */
-function getMode(type) {
- switch (type) {
- case GeometryType.POINT:
- case GeometryType.MULTI_POINT:
- return Mode.POINT;
- case GeometryType.LINE_STRING:
- case GeometryType.MULTI_LINE_STRING:
- return Mode.LINE_STRING;
- case GeometryType.POLYGON:
- case GeometryType.MULTI_POLYGON:
- return Mode.POLYGON;
- case GeometryType.CIRCLE:
- return Mode.CIRCLE;
- default:
- throw new Error("Invalid type: " + type);
- }
-}
-export default Draw;
-//# sourceMappingURL=Draw.js.map
+// Draw.prototype.handleEvent = function (event) {
+// if (event.originalEvent.type === EventType.CONTEXTMENU) {
+// // Avoid context menu for long taps when drawing on mobile
+// event.originalEvent.preventDefault();
+// }
+// this.freehand_ =
+// this.mode_ !== Mode.POINT && this.freehandCondition_(event);
+// var move = event.type === MapBrowserEventType.POINTERMOVE;
+// var pass = true;
+// if (
+// !this.freehand_ &&
+// this.lastDragTime_ &&
+// event.type === MapBrowserEventType.POINTERDRAG
+// ) {
+// var now = Date.now();
+// if (now - this.lastDragTime_ >= this.dragVertexDelay_) {
+// this.downPx_ = event.pixel;
+// this.shouldHandle_ = !this.freehand_;
+// move = true;
+// } else {
+// this.lastDragTime_ = undefined;
+// }
+// if (this.shouldHandle_ && this.downTimeout_ !== undefined) {
+// clearTimeout(this.downTimeout_);
+// this.downTimeout_ = undefined;
+// }
+// }
+// if (
+// this.freehand_ &&
+// event.type === MapBrowserEventType.POINTERDRAG &&
+// this.sketchFeature_ !== null
+// ) {
+// if (this.overDraw) {
+// return;
+// }
+// this.addToDrawing_(event.coordinate);
+// pass = false;
+// } else if (
+// this.freehand_ &&
+// event.type === MapBrowserEventType.POINTERDOWN
+// ) {
+// pass = false;
+// } else if (move && this.getPointerCount() < 2) {
+// pass = event.type === MapBrowserEventType.POINTERMOVE;
+// if (pass && this.freehand_) {
+// if (this.overDraw) {
+// return;
+// }
+// this.handlePointerMove_(event);
+// if (this.shouldHandle_) {
+// // Avoid page scrolling when freehand drawing on mobile
+// event.originalEvent.preventDefault();
+// }
+// } else if (
+// event.originalEvent.pointerType === "mouse" ||
+// (event.type === MapBrowserEventType.POINTERDRAG &&
+// this.downTimeout_ === undefined)
+// ) {
+// if (this.overDraw) {
+// return;
+// }
+// this.handlePointerMove_(event);
+// }
+// } else if (event.type === MapBrowserEventType.DBLCLICK) {
+// pass = false;
+// }
+// return _super.prototype.handleEvent.call(this, event) && pass;
+// };
+// /**
+// * Handle pointer down events.
+// * @param {import("ol/MapBrowserEvent.js").default} event Event.
+// * @return {boolean} If the event was consumed.
+// */
+// Draw.prototype.handleDownEvent = function (event) {
+// // console.log(event.coordinate_, 'handleDownEvent')
+// this.shouldHandle_ = !this.freehand_;
+// if (this.freehand_) {
+// this.downPx_ = event.pixel;
+// if (!this.finishCoordinate_) {
+// this.startDrawing_(event.coordinate);
+// }
+// return true;
+// } else if (this.condition_(event)) {
+// this.lastDragTime_ = Date.now();
+// this.downTimeout_ = setTimeout(
+// function () {
+// this.handlePointerMove_(
+// new MapBrowserEvent(
+// MapBrowserEventType.POINTERMOVE,
+// event.map,
+// event.originalEvent,
+// false,
+// event.frameState
+// )
+// );
+// }.bind(this),
+// this.dragVertexDelay_
+// );
+// this.downPx_ = event.pixel;
+// return true;
+// } else {
+// this.lastDragTime_ = undefined;
+// return false;
+// }
+// };
+// /**
+// * Handle pointer up events.
+// * @param {import("ol/MapBrowserEvent.js").default} event Event.
+// * @return {boolean} If the event was consumed.
+// */
+// Draw.prototype.handleUpEvent = function (event) {
+// // console.log(event.coordinate_, 'handleUpEvent')//获取坐标点
+// if (this.isPoint) {
+// this.coordinateOverPoint(event);
+// this.finishDrawing();
+// return;
+// }
+// var pass = true;
+// if (this.getPointerCount() === 0) {
+// if (this.downTimeout_) {
+// clearTimeout(this.downTimeout_);
+// this.downTimeout_ = undefined;
+// }
+// this.handlePointerMove_(event);
+// if (this.shouldHandle_) {
+// var startingToDraw = !this.finishCoordinate_;
+// if (startingToDraw) {
+// //开始后抬起
+// // this.coordinateOverPoint(event);
+// // console.log(1)
+// this.coordinate(event);
+// this.startDrawing_(event.coordinate);
+// }
+// if (!startingToDraw && this.freehand_) {
+// this.finishDrawing();
+// } else if (
+// !this.freehand_ &&
+// (!startingToDraw || this.mode_ === Mode.POINT)
+// ) {
+// //选择后抬起
+// this.coordinate(event);
+// if (this.atFinish_(event.pixel)) {
+// //结束绘画
+// this.coordinateOver("结束");
+// if (this.finishCondition_(event)) {
+// this.finishDrawing();
+// }
+// } else {
+// // console.log(28888888888)
+// this.addToDrawing_(event.coordinate);
+// }
+// }
+// pass = false;
+// } else if (this.freehand_) {
+// this.abortDrawing();
+// }
+// }
+// if (!pass && this.stopClick_) {
+// event.preventDefault();
+// }
+// return pass;
+// };
+// // Draw.prototype.getCoordinate = function (fn) {
+// // this.coordinate = fn;
+// // console.log(this.coordinate)
+// // }
+// /**
+// * Handle move events.
+// * @param {import("ol/MapBrowserEvent.js").default} event A move event.
+// * @private
+// */
+// Draw.prototype.handlePointerMove_ = function (event) {
+// this.pointerType_ = event.originalEvent.pointerType;
+// if (
+// this.downPx_ &&
+// ((!this.freehand_ && this.shouldHandle_) ||
+// (this.freehand_ && !this.shouldHandle_))
+// ) {
+// var downPx = this.downPx_;
+// var clickPx = event.pixel;
+// var dx = downPx[0] - clickPx[0];
+// var dy = downPx[1] - clickPx[1];
+// var squaredDistance = dx * dx + dy * dy;
+// this.shouldHandle_ = this.freehand_ ?
+// squaredDistance > this.squaredClickTolerance_ :
+// squaredDistance <= this.squaredClickTolerance_;
+// if (!this.shouldHandle_) {
+// return;
+// }
+// }
+// if (this.finishCoordinate_) {
+// this.modifyDrawing_(event.coordinate);
+// } else {
+// this.createOrUpdateSketchPoint_(event.coordinate.slice());
+// }
+// };
+// /**
+// * Determine if an event is within the snapping tolerance of the start coord.
+// * @param {import("ol/pixel.js").Pixel} pixel Pixel.
+// * @return {boolean} The event is within the snapping tolerance of the start.
+// * @private
+// */
+// Draw.prototype.atFinish_ = function (pixel) {
+// // console.log(pixel, 879789)
+// var at = false;
+// if (this.sketchFeature_) {
+// var potentiallyDone = false;
+// var potentiallyFinishCoordinates = [this.finishCoordinate_];
+// var mode = this.mode_;
+// if (mode === Mode.POINT) {
+// at = true;
+// } else if (mode === Mode.CIRCLE) {
+// at = this.sketchCoords_.length === 2;
+// } else if (mode === Mode.LINE_STRING) {
+// potentiallyDone = this.sketchCoords_.length > this.minPoints_;
+// } else if (mode === Mode.POLYGON) {
+// var sketchCoords = /** @type {PolyCoordType} */ (this.sketchCoords_);
+// potentiallyDone = sketchCoords[0].length > this.minPoints_;
+// potentiallyFinishCoordinates = [
+// sketchCoords[0][0],
+// sketchCoords[0][sketchCoords[0].length - 2],
+// ];
+// }
+// if (potentiallyDone) {
+// var map = this.getMap();
+// for (var i = 0, ii = potentiallyFinishCoordinates.length; i < ii; i++) {
+// var finishCoordinate = potentiallyFinishCoordinates[i];
+// var finishPixel = map.getPixelFromCoordinate(finishCoordinate);
+// var dx = pixel[0] - finishPixel[0];
+// var dy = pixel[1] - finishPixel[1];
+// var snapTolerance = this.freehand_ ? 1 : this.snapTolerance_;
+// at = Math.sqrt(dx * dx + dy * dy) <= snapTolerance;
+// if (at) {
+// this.finishCoordinate_ = finishCoordinate;
+// break;
+// }
+// }
+// }
+// }
+// return at;
+// };
+// /**
+// * @param {import("ol/coordinate").Coordinate} coordinates Coordinate.
+// * @private
+// */
+// Draw.prototype.createOrUpdateSketchPoint_ = function (coordinates) {
+// if (!this.sketchPoint_) {
+// this.sketchPoint_ = new Feature(new Point(coordinates));
+// this.updateSketchFeatures_();
+// } else {
+// var sketchPointGeom = this.sketchPoint_.getGeometry();
+// sketchPointGeom.setCoordinates(coordinates);
+// }
+// };
+// /**
+// * @param {import("ol/geom/Polygon.js").default} geometry Polygon geometry.
+// * @private
+// */
+// Draw.prototype.createOrUpdateCustomSketchLine_ = function (geometry) {
+// if (!this.sketchLine_) {
+// this.sketchLine_ = new Feature();
+// }
+// var ring = geometry.getLinearRing(0);
+// var sketchLineGeom = this.sketchLine_.getGeometry();
+// if (!sketchLineGeom) {
+// sketchLineGeom = new LineString(
+// ring.getFlatCoordinates(),
+// ring.getLayout()
+// );
+// this.sketchLine_.setGeometry(sketchLineGeom);
+// } else {
+// sketchLineGeom.setFlatCoordinates(
+// ring.getLayout(),
+// ring.getFlatCoordinates()
+// );
+// sketchLineGeom.changed();
+// }
+// };
+// /**
+// * Start the drawing.
+// * @param {import("ol/coordinate.js").Coordinate} start Start coordinate.
+// * @private
+// */
+// Draw.prototype.startDrawing_ = function (start) {
+// if (this.overDraw) {
+// return;
+// }
+// var projection = this.getMap().getView().getProjection();
+// this.finishCoordinate_ = start;
+// if (this.mode_ === Mode.POINT) {
+// this.sketchCoords_ = start.slice();
+// } else if (this.mode_ === Mode.POLYGON) {
+// this.sketchCoords_ = [
+// [start.slice(), start.slice()]
+// ];
+// this.sketchLineCoords_ = this.sketchCoords_[0];
+// } else {
+// this.sketchCoords_ = [start.slice(), start.slice()];
+// }
+// if (this.sketchLineCoords_) {
+// this.sketchLine_ = new Feature(new LineString(this.sketchLineCoords_));
+// }
+// var geometry = this.geometryFunction_(
+// this.sketchCoords_,
+// undefined,
+// projection
+// );
+// this.sketchFeature_ = new Feature();
+// if (this.geometryName_) {
+// this.sketchFeature_.setGeometryName(this.geometryName_);
+// }
+// this.sketchFeature_.setGeometry(geometry);
+// this.updateSketchFeatures_();
+// this.dispatchEvent(
+// new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_)
+// );
+// };
+// /**
+// * Modify the drawing.
+// * @param {import("ol/coordinate.js").Coordinate} coordinate Coordinate.
+// * @private
+// */
+// Draw.prototype.modifyDrawing_ = function (coordinate) {
+// var map = this.getMap();
+// var geometry = this.sketchFeature_.getGeometry();
+// var projection = map.getView().getProjection();
+// var coordinates, last;
+// if (this.mode_ === Mode.POINT) {
+// last = this.sketchCoords_;
+// } else if (this.mode_ === Mode.POLYGON) {
+// coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];
+// last = coordinates[coordinates.length - 1];
+// if (this.atFinish_(map.getPixelFromCoordinate(coordinate))) {
+// // snap to finish
+// coordinate = this.finishCoordinate_.slice();
+// }
+// } else {
+// coordinates = this.sketchCoords_;
+// last = coordinates[coordinates.length - 1];
+// }
+// last[0] = coordinate[0];
+// last[1] = coordinate[1];
+// this.geometryFunction_(
+// /** @type {!LineCoordType} */
+// (this.sketchCoords_),
+// geometry,
+// projection
+// );
+// if (this.sketchPoint_) {
+// var sketchPointGeom = this.sketchPoint_.getGeometry();
+// sketchPointGeom.setCoordinates(coordinate);
+// }
+// if (
+// geometry.getType() === GeometryType.POLYGON &&
+// this.mode_ !== Mode.POLYGON
+// ) {
+// this.createOrUpdateCustomSketchLine_( /** @type {Polygon} */ (geometry));
+// } else if (this.sketchLineCoords_) {
+// var sketchLineGeom = this.sketchLine_.getGeometry();
+// sketchLineGeom.setCoordinates(this.sketchLineCoords_);
+// }
+// this.updateSketchFeatures_();
+// };
+// /**
+// * Add a new coordinate to the drawing.
+// * @param {!PointCoordType} coordinate Coordinate
+// * @private
+// */
+// Draw.prototype.addToDrawing_ = function (coordinate) {
+// var geometry = this.sketchFeature_.getGeometry();
+// var projection = this.getMap().getView().getProjection();
+// var done;
+// var coordinates;
+// var mode = this.mode_;
+// if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) {
+// this.finishCoordinate_ = coordinate.slice();
+// coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);
+// if (coordinates.length >= this.maxPoints_) {
+// if (this.freehand_) {
+// coordinates.pop();
+// } else {
+// done = true;
+// }
+// }
+// coordinates.push(coordinate.slice());
+// this.geometryFunction_(coordinates, geometry, projection);
+// } else if (mode === Mode.POLYGON) {
+// coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];
+// if (coordinates.length >= this.maxPoints_) {
+// if (this.freehand_) {
+// coordinates.pop();
+// } else {
+// done = true;
+// }
+// }
+// coordinates.push(coordinate.slice());
+// if (done) {
+// this.finishCoordinate_ = coordinates[0];
+// }
+// this.geometryFunction_(this.sketchCoords_, geometry, projection);
+// }
+// this.createOrUpdateSketchPoint_(coordinate.slice());
+// this.updateSketchFeatures_();
+// if (done) {
+// this.finishDrawing();
+// }
+// };
+// /**
+// * Remove last point of the feature currently being drawn. Does not do anything when
+// * drawing POINT or MULTI_POINT geometries.
+// * @api
+// */
+// Draw.prototype.removeLastPoint = function () {
+// if (!this.sketchFeature_) {
+// return;
+// }
+// var geometry = this.sketchFeature_.getGeometry();
+// var projection = this.getMap().getView().getProjection();
+// var coordinates;
+// var mode = this.mode_;
+// if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) {
+// coordinates = /** @type {LineCoordType} */ (this.sketchCoords_);
+// coordinates.splice(-2, 1);
+// if (coordinates.length >= 2) {
+// this.finishCoordinate_ = coordinates[coordinates.length - 2].slice();
+// var finishCoordinate = this.finishCoordinate_.slice();
+// coordinates[coordinates.length - 1] = finishCoordinate;
+// this.createOrUpdateSketchPoint_(finishCoordinate);
+// }
+// this.geometryFunction_(coordinates, geometry, projection);
+// if (geometry.getType() === GeometryType.POLYGON && this.sketchLine_) {
+// this.createOrUpdateCustomSketchLine_( /** @type {Polygon} */ (geometry));
+// }
+// } else if (mode === Mode.POLYGON) {
+// coordinates = /** @type {PolyCoordType} */ (this.sketchCoords_)[0];
+// coordinates.splice(-2, 1);
+// var sketchLineGeom = this.sketchLine_.getGeometry();
+// if (coordinates.length >= 2) {
+// var finishCoordinate = coordinates[coordinates.length - 2].slice();
+// coordinates[coordinates.length - 1] = finishCoordinate;
+// this.createOrUpdateSketchPoint_(finishCoordinate);
+// }
+// sketchLineGeom.setCoordinates(coordinates);
+// this.geometryFunction_(this.sketchCoords_, geometry, projection);
+// }
+// if (coordinates.length === 1) {
+// this.abortDrawing();
+// }
+// this.updateSketchFeatures_();
+// };
+// /**
+// * Stop drawing and add the sketch feature to the target layer.
+// * The {@link module:ol/interaction/Draw~DrawEventType.DRAWEND} event is
+// * dispatched before inserting the feature.
+// * @api
+// */
+// Draw.prototype.finishDrawing = function () {
+// // console.log("finishDrawing")
+// var sketchFeature = this.abortDrawing_();
+// if (!sketchFeature) {
+// return;
+// }
+// var coordinates = this.sketchCoords_;
+// var geometry = sketchFeature.getGeometry();
+// var projection = this.getMap().getView().getProjection();
+// if (this.mode_ === Mode.LINE_STRING) {
+// // remove the redundant last point
+// coordinates.pop();
+// this.geometryFunction_(coordinates, geometry, projection);
+// } else if (this.mode_ === Mode.POLYGON) {
+// // remove the redundant last point in ring
+// /** @type {PolyCoordType} */
+// (coordinates)[0].pop();
+// this.geometryFunction_(coordinates, geometry, projection);
+// coordinates = geometry.getCoordinates();
+// }
+// // cast multi-part geometries
+// if (this.type_ === GeometryType.MULTI_POINT) {
+// sketchFeature.setGeometry(
+// new MultiPoint([ /** @type {PointCoordType} */ (coordinates)])
+// );
+// } else if (this.type_ === GeometryType.MULTI_LINE_STRING) {
+// sketchFeature.setGeometry(
+// new MultiLineString([ /** @type {LineCoordType} */ (coordinates)])
+// );
+// } else if (this.type_ === GeometryType.MULTI_POLYGON) {
+// sketchFeature.setGeometry(
+// new MultiPolygon([ /** @type {PolyCoordType} */ (coordinates)])
+// );
+// }
+// // First dispatch event to allow full set up of feature
+// this.dispatchEvent(new DrawEvent(DrawEventType.DRAWEND, sketchFeature));
+// // Then insert feature
+// if (this.features_) {
+// this.features_.push(sketchFeature);
+// }
+// if (this.source_) {
+// this.source_.addFeature(sketchFeature);
+// }
+// };
+// /**
+// * Stop drawing without adding the sketch feature to the target layer.
+// * @return {Feature} The sketch feature (or null if none).
+// * @private
+// */
+// Draw.prototype.abortDrawing_ = function () {
+// this.finishCoordinate_ = null;
+// var sketchFeature = this.sketchFeature_;
+// this.sketchFeature_ = null;
+// this.sketchPoint_ = null;
+// this.sketchLine_ = null;
+// this.overlay_.getSource().clear(true);
+// return sketchFeature;
+// };
+// /**
+// * Stop drawing without adding the sketch feature to the target layer.
+// * @api
+// */
+// Draw.prototype.abortDrawing = function () {
+// var sketchFeature = this.abortDrawing_();
+// if (sketchFeature) {
+// this.dispatchEvent(new DrawEvent(DrawEventType.DRAWABORT, sketchFeature));
+// }
+// };
+// /**
+// * Append coordinates to the end of the geometry that is currently being drawn.
+// * This can be used when drawing LineStrings or Polygons. Coordinates will
+// * either be appended to the current LineString or the outer ring of the current
+// * Polygon. If no geometry is being drawn, a new one will be created.
+// * @param {!LineCoordType} coordinates Linear coordinates to be appended to
+// * the coordinate array.
+// * @api
+// */
+// Draw.prototype.appendCoordinates = function (coordinates) {
+// var mode = this.mode_;
+// var newDrawing = !this.sketchFeature_;
+// if (newDrawing) {
+// this.startDrawing_(coordinates[0]);
+// }
+// /** @type {LineCoordType} */
+// var sketchCoords;
+// if (mode === Mode.LINE_STRING || mode === Mode.CIRCLE) {
+// sketchCoords = /** @type {LineCoordType} */ (this.sketchCoords_);
+// } else if (mode === Mode.POLYGON) {
+// sketchCoords =
+// this.sketchCoords_ && this.sketchCoords_.length ?
+// /** @type {PolyCoordType} */
+// (this.sketchCoords_)[0] : [];
+// } else {
+// return;
+// }
+// if (newDrawing) {
+// sketchCoords.shift();
+// }
+// // Remove last coordinate from sketch drawing (this coordinate follows cursor position)
+// sketchCoords.pop();
+// // Append coordinate list
+// for (var i = 0; i < coordinates.length; i++) {
+// this.addToDrawing_(coordinates[i]);
+// }
+// var ending = coordinates[coordinates.length - 1];
+// // Duplicate last coordinate for sketch drawing (cursor position)
+// this.addToDrawing_(ending);
+// this.modifyDrawing_(ending);
+// };
+// /**
+// * Initiate draw mode by starting from an existing geometry which will
+// * receive new additional points. This only works on features with
+// * `LineString` geometries, where the interaction will extend lines by adding
+// * points to the end of the coordinates array.
+// * This will change the original feature, instead of drawing a copy.
+// *
+// * The function will dispatch a `drawstart` event.
+// *
+// * @param {!Feature<LineString>} feature Feature to be extended.
+// * @api
+// */
+// Draw.prototype.extend = function (feature) {
+// var geometry = feature.getGeometry();
+// var lineString = geometry;
+// this.sketchFeature_ = feature;
+// this.sketchCoords_ = lineString.getCoordinates();
+// var last = this.sketchCoords_[this.sketchCoords_.length - 1];
+// this.finishCoordinate_ = last.slice();
+// this.sketchCoords_.push(last.slice());
+// this.sketchPoint_ = new Feature(new Point(last));
+// this.updateSketchFeatures_();
+// this.dispatchEvent(
+// new DrawEvent(DrawEventType.DRAWSTART, this.sketchFeature_)
+// );
+// };
+// /**
+// * Redraw the sketch features.
+// * @private
+// */
+// Draw.prototype.updateSketchFeatures_ = function () {
+// var sketchFeatures = [];
+// if (this.sketchFeature_) {
+// sketchFeatures.push(this.sketchFeature_);
+// }
+// if (this.sketchLine_) {
+// sketchFeatures.push(this.sketchLine_);
+// }
+// if (this.sketchPoint_) {
+// sketchFeatures.push(this.sketchPoint_);
+// }
+// var overlaySource = this.overlay_.getSource();
+// overlaySource.clear(true);
+// overlaySource.addFeatures(sketchFeatures);
+// };
+// /**
+// * @private
+// */
+// Draw.prototype.updateState_ = function () {
+// var map = this.getMap();
+// var active = this.getActive();
+// if (!map || !active) {
+// this.abortDrawing();
+// }
+// this.overlay_.setMap(active ? map : null);
+// };
+// return Draw;
+// })(PointerInteraction);
+// /**
+// * @return {import("ol/style/Style.js").StyleFunction} Styles.
+// */
+// function getDefaultStyleFunction() {
+// var styles = createEditingStyle();
+// return function (feature, resolution) {
+// return styles[feature.getGeometry().getType()];
+// };
+// }
+// /**
+// * Create a `geometryFunction` for `type: 'Circle'` that will create a regular
+// * polygon with a user specified number of sides and start angle instead of a
+// * `import("ol/geom/Circle.js").Circle` geometry.
+// * @param {number} [opt_sides] Number of sides of the regular polygon.
+// * Default is 32.
+// * @param {number} [opt_angle] Angle of the first point in counter-clockwise
+// * radians. 0 means East.
+// * Default is the angle defined by the heading from the center of the
+// * regular polygon to the current pointer position.
+// * @return {GeometryFunction} Function that draws a polygon.
+// * @api
+// */
+// export function createRegularPolygon(opt_sides, opt_angle) {
+// return function (coordinates, opt_geometry, projection) {
+// var center = fromUserCoordinate(
+// /** @type {LineCoordType} */
+// (coordinates)[0],
+// projection
+// );
+// var end = fromUserCoordinate(
+// /** @type {LineCoordType} */
+// (coordinates)[coordinates.length - 1],
+// projection
+// );
+// var radius = Math.sqrt(squaredCoordinateDistance(center, end));
+// var geometry = opt_geometry ?
+// /** @type {Polygon} */
+// (opt_geometry) :
+// fromCircle(new Circle(center), opt_sides);
+// var angle = opt_angle;
+// if (!opt_angle && opt_angle !== 0) {
+// var x = end[0] - center[0];
+// var y = end[1] - center[1];
+// angle = Math.atan2(y, x);
+// }
+// makeRegular(geometry, center, radius, angle);
+// var userProjection = getUserProjection();
+// if (userProjection) {
+// geometry.transform(projection, userProjection);
+// }
+// return geometry;
+// };
+// }
+// /**
+// * Create a `geometryFunction` that will create a box-shaped polygon (aligned
+// * with the coordinate system axes). Use this with the draw interaction and
+// * `type: 'Circle'` to return a box instead of a circle geometry.
+// * @return {GeometryFunction} Function that draws a box-shaped polygon.
+// * @api
+// */
+// export function createBox() {
+// return function (coordinates, opt_geometry, projection) {
+// var extent = boundingExtent(
+// /** @type {LineCoordType} */
+// ([
+// coordinates[0],
+// coordinates[coordinates.length - 1],
+// ]).map(function (coordinate) {
+// return fromUserCoordinate(coordinate, projection);
+// })
+// );
+// var boxCoordinates = [
+// [
+// getBottomLeft(extent),
+// getBottomRight(extent),
+// getTopRight(extent),
+// getTopLeft(extent),
+// getBottomLeft(extent),
+// ],
+// ];
+// var geometry = opt_geometry;
+// if (geometry) {
+// geometry.setCoordinates(boxCoordinates);
+// } else {
+// geometry = new Polygon(boxCoordinates);
+// }
+// var userProjection = getUserProjection();
+// if (userProjection) {
+// geometry.transform(projection, userProjection);
+// }
+// return geometry;
+// };
+// }
+// /**
+// * Get the drawing mode. The mode for multi-part geometries is the same as for
+// * their single-part cousins.
+// * @param {import("ol/geom/GeometryType.js").default} type Geometry type.
+// * @return {Mode} Drawing mode.
+// */
+// function getMode(type) {
+// switch (type) {
+// case GeometryType.POINT:
+// case GeometryType.MULTI_POINT:
+// return Mode.POINT;
+// case GeometryType.LINE_STRING:
+// case GeometryType.MULTI_LINE_STRING:
+// return Mode.LINE_STRING;
+// case GeometryType.POLYGON:
+// case GeometryType.MULTI_POLYGON:
+// return Mode.POLYGON;
+// case GeometryType.CIRCLE:
+// return Mode.CIRCLE;
+// default:
+// throw new Error("Invalid type: " + type);
+// }
+// }
+// export default Draw;
+// //# sourceMappingURL=Draw.js.map
--
Gitblit v1.9.3