diff --git a/lib/OpenLayers/Geometry.js b/lib/OpenLayers/Geometry.js index bc624ecd91..fbab941601 100644 --- a/lib/OpenLayers/Geometry.js +++ b/lib/OpenLayers/Geometry.js @@ -445,6 +445,31 @@ OpenLayers.Geometry.segmentsIntersect = function(seg1, seg2, options) { * describes how far between the two segment points the given point is. */ OpenLayers.Geometry.distanceToSegment = function(point, segment) { + var result = OpenLayers.Geometry.distanceSquaredToSegment(point, segment); + result.distance = Math.sqrt(result.distance); + return result; +}; + +/** + * Function: OpenLayers.Geometry.distanceSquaredToSegment + * + * Usually the distanceToSegment function should be used. This variant however + * can be used for comparisons where the exact distance is not important. + * + * Parameters: + * point - {Object} An object with x and y properties representing the + * point coordinates. + * segment - {Object} An object with x1, y1, x2, and y2 properties + * representing endpoint coordinates. + * + * Returns: + * {Object} An object with squared distance, x, and y properties. The distance + * will be the shortest distance between the input point and segment. + * The x and y properties represent the coordinates along the segment + * where the shortest distance meets the segment. The along attribute + * describes how far between the two segment points the given point is. + */ +OpenLayers.Geometry.distanceSquaredToSegment = function(point, segment) { var x0 = point.x; var y0 = point.y; var x1 = segment.x1; @@ -467,7 +492,7 @@ OpenLayers.Geometry.distanceToSegment = function(point, segment) { y = y1 + along * dy; } return { - distance: Math.sqrt(Math.pow(x - x0, 2) + Math.pow(y - y0, 2)), + distance: Math.pow(x - x0, 2) + Math.pow(y - y0, 2), x: x, y: y, along: along };