goog.provide('ol.geom.Point'); goog.require('goog.asserts'); goog.require('ol.extent'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SimpleGeometry'); goog.require('ol.geom.flat'); goog.require('ol.geom.flat.deflate'); goog.require('ol.math'); /** * @constructor * @extends {ol.geom.SimpleGeometry} * @param {ol.geom.RawPoint} coordinates Coordinates. * @param {ol.geom.GeometryLayout=} opt_layout Layout. * @todo stability experimental */ ol.geom.Point = function(coordinates, opt_layout) { goog.base(this); this.setCoordinates(coordinates, opt_layout); }; goog.inherits(ol.geom.Point, ol.geom.SimpleGeometry); /** * @inheritDoc */ ol.geom.Point.prototype.clone = function() { var point = new ol.geom.Point(null); point.setFlatCoordinates(this.layout, this.flatCoordinates.slice()); return point; }; /** * @inheritDoc */ ol.geom.Point.prototype.closestPointXY = function(x, y, closestPoint, minSquaredDistance) { var flatCoordinates = this.flatCoordinates; var squaredDistance = ol.math.squaredDistance( x, y, flatCoordinates[0], flatCoordinates[1]); if (squaredDistance < minSquaredDistance) { var stride = this.stride; var i; for (i = 0; i < stride; ++i) { closestPoint[i] = flatCoordinates[i]; } closestPoint.length = stride; return squaredDistance; } else { return minSquaredDistance; } }; /** * @return {ol.geom.RawPoint} Coordinates. * @todo stability experimental */ ol.geom.Point.prototype.getCoordinates = function() { return this.flatCoordinates.slice(); }; /** * @inheritDoc */ ol.geom.Point.prototype.getExtent = function(opt_extent) { if (this.extentRevision != this.getRevision()) { this.extent = ol.extent.createOrUpdateFromCoordinate( this.flatCoordinates, this.extent); this.extentRevision = this.getRevision(); } goog.asserts.assert(goog.isDef(this.extent)); return ol.extent.returnOrUpdate(this.extent, opt_extent); }; /** * @inheritDoc */ ol.geom.Point.prototype.getType = function() { return ol.geom.GeometryType.POINT; }; /** * @param {ol.geom.RawPoint} coordinates Coordinates. * @param {ol.geom.GeometryLayout=} opt_layout Layout. * @todo stability experimental */ ol.geom.Point.prototype.setCoordinates = function(coordinates, opt_layout) { if (goog.isNull(coordinates)) { this.setFlatCoordinates(ol.geom.GeometryLayout.XY, null); } else { this.setLayout(opt_layout, coordinates, 0); if (goog.isNull(this.flatCoordinates)) { this.flatCoordinates = []; } this.flatCoordinates.length = ol.geom.flat.deflate.coordinate( this.flatCoordinates, 0, coordinates, this.stride); this.dispatchChangeEvent(); } }; /** * @param {ol.geom.GeometryLayout} layout Layout. * @param {Array.} flatCoordinates Flat coordinates. */ ol.geom.Point.prototype.setFlatCoordinates = function(layout, flatCoordinates) { this.setFlatCoordinatesInternal(layout, flatCoordinates); this.dispatchChangeEvent(); };