UNPKG

heli-agri

Version:

HeliAgri is a high-performance, feature-packed library for creating interactive maps on the web. It can display map tiles, vector data and markers loaded from any source on any web page. OpenLayers has been developed to further the use of geographic infor

101 lines (100 loc) 3.23 kB
/** * @module ol/geom/Point */ import SimpleGeometry from './SimpleGeometry.js'; import { containsXY, createOrUpdateFromCoordinate } from '../extent.js'; import { deflateCoordinate } from './flat/deflate.js'; import { squaredDistance as squaredDx } from '../math.js'; /** * @classdesc * Point geometry. * * @api */ class Point extends SimpleGeometry { /** * @param {import("../coordinate.js").Coordinate} coordinates Coordinates. * @param {import("./Geometry.js").GeometryLayout} [layout] Layout. */ constructor(coordinates, layout) { super(); this.setCoordinates(coordinates, layout); } /** * Make a complete copy of the geometry. * @return {!Point} Clone. * @api */ clone() { const point = new Point(this.flatCoordinates.slice(), this.layout); point.applyProperties(this); return point; } /** * @param {number} x X. * @param {number} y Y. * @param {import("../coordinate.js").Coordinate} closestPoint Closest point. * @param {number} minSquaredDistance Minimum squared distance. * @return {number} Minimum squared distance. */ closestPointXY(x, y, closestPoint, minSquaredDistance) { const flatCoordinates = this.flatCoordinates; const squaredDistance = squaredDx(x, y, flatCoordinates[0], flatCoordinates[1]); if (squaredDistance < minSquaredDistance) { const stride = this.stride; for (let i = 0; i < stride; ++i) { closestPoint[i] = flatCoordinates[i]; } closestPoint.length = stride; return squaredDistance; } return minSquaredDistance; } /** * Return the coordinate of the point. * @return {import("../coordinate.js").Coordinate} Coordinates. * @api */ getCoordinates() { return !this.flatCoordinates ? [] : this.flatCoordinates.slice(); } /** * @param {import("../extent.js").Extent} extent Extent. * @protected * @return {import("../extent.js").Extent} extent Extent. */ computeExtent(extent) { return createOrUpdateFromCoordinate(this.flatCoordinates, extent); } /** * Get the type of this geometry. * @return {import("./Geometry.js").Type} Geometry type. * @api */ getType() { return 'Point'; } /** * Test if the geometry and the passed extent intersect. * @param {import("../extent.js").Extent} extent Extent. * @return {boolean} `true` if the geometry and the extent intersect. * @api */ intersectsExtent(extent) { return containsXY(extent, this.flatCoordinates[0], this.flatCoordinates[1]); } /** * @param {!Array<*>} coordinates Coordinates. * @param {import("./Geometry.js").GeometryLayout} [layout] Layout. * @api */ setCoordinates(coordinates, layout) { this.setLayout(layout, coordinates, 0); if (!this.flatCoordinates) { this.flatCoordinates = []; } this.flatCoordinates.length = deflateCoordinate(this.flatCoordinates, 0, coordinates, this.stride); this.changed(); } } export default Point;