| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- /* Copyright (c) 2006-2011 by OpenLayers Contributors (see authors.txt for
- * full list of contributors). Published under the Clear BSD license.
- * See http://svn.openlayers.org/trunk/openlayers/license.txt for the
- * full text of the license. */
- /**
- * @requires OpenLayers/Geometry/MultiPoint.js
- */
- /**
- * Class: OpenLayers.Geometry.Curve
- * A Curve is a MultiPoint, whose points are assumed to be connected. To
- * this end, we provide a "getLength()" function, which iterates through
- * the points, summing the distances between them.
- *
- * Inherits:
- * - <OpenLayers.Geometry.MultiPoint>
- */
- OpenLayers.Geometry.Curve = OpenLayers.Class(OpenLayers.Geometry.MultiPoint, {
- /**
- * Property: componentTypes
- * {Array(String)} An array of class names representing the types of
- * components that the collection can include. A null
- * value means the component types are not restricted.
- */
- componentTypes: ["OpenLayers.Geometry.Point"],
- /**
- * Constructor: OpenLayers.Geometry.Curve
- *
- * Parameters:
- * point - {Array(<OpenLayers.Geometry.Point>)}
- */
- initialize: function(points) {
- OpenLayers.Geometry.MultiPoint.prototype.initialize.apply(this,
- arguments);
- },
-
- /**
- * APIMethod: getLength
- *
- * Returns:
- * {Float} The length of the curve
- */
- getLength: function() {
- var length = 0.0;
- if ( this.components && (this.components.length > 1)) {
- for(var i=1, len=this.components.length; i<len; i++) {
- length += this.components[i-1].distanceTo(this.components[i]);
- }
- }
- return length;
- },
- /**
- * APIMethod: getGeodesicLength
- * Calculate the approximate length of the geometry were it projected onto
- * the earth.
- *
- * projection - {<OpenLayers.Projection>} The spatial reference system
- * for the geometry coordinates. If not provided, Geographic/WGS84 is
- * assumed.
- *
- * Returns:
- * {Float} The appoximate geodesic length of the geometry in meters.
- */
- getGeodesicLength: function(projection) {
- var geom = this; // so we can work with a clone if needed
- if(projection) {
- var gg = new OpenLayers.Projection("EPSG:4326");
- if(!gg.equals(projection)) {
- geom = this.clone().transform(projection, gg);
- }
- }
- var length = 0.0;
- if(geom.components && (geom.components.length > 1)) {
- var p1, p2;
- for(var i=1, len=geom.components.length; i<len; i++) {
- p1 = geom.components[i-1];
- p2 = geom.components[i];
- // this returns km and requires lon/lat properties
- length += OpenLayers.Util.distVincenty(
- {lon: p1.x, lat: p1.y}, {lon: p2.x, lat: p2.y}
- );
- }
- }
- // convert to m
- return length * 1000;
- },
- CLASS_NAME: "OpenLayers.Geometry.Curve"
- });
|