Mercurial > pub > ImplabJs
diff src/djol/DistanceMeasureTool.js @ 10:8705103f074f
Слияние
author | cin |
---|---|
date | Mon, 21 Aug 2017 18:03:00 +0300 |
parents | f0035923ff3e |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/djol/DistanceMeasureTool.js Mon Aug 21 18:03:00 2017 +0300 @@ -0,0 +1,63 @@ +define([ + "dojo/_base/declare", + "implab/safe", + "./MeasureToolBase", + "implab/text/format", + "dojo/i18n!./format/nls/units", + "ol" ], + +function(declare, safe, MeasureToolBase, format, units, ol) { + return declare([ MeasureToolBase ], { + + isGeodesic : true, + + units : 'metric', + + constructor : function(opts) { + if (opts) + safe.mixin(this,opts,["isGeodesic", "units"]); + }, + + _createDraw : function(source) { + return new ol.interaction.Draw( + { + source : source, + type : "LineString", + style : this.drawStyle + }); + }, + + _formatTooltip : function(sketch, proj) { + var length = 0; + if (this.isGeodesic) { + var points = sketch.getGeometry().getCoordinates(); + var t = ol.proj.getTransform(proj, "EPSG:4326"); + for (var i = 0; i < points.length - 1; i++) { + length += this.wgs84Sphere.haversineDistance( + t(points[i]), + t(points[i + 1])); + } + } else { + length = sketch.getGeometry().getLength(); + } + + var mpu, unitName; + switch (this.units) { + case "nautical": + mpu = 1852; + unitName = units.nmiles; + break; + default: + mpu = 1000; + unitName = units.kilometers; + } + + if (length >= mpu) { + return format("{0:#.0#}{1}", length / mpu, unitName); + } else { + return format("{0:#0.0#}{1}", length, units.meters); + } + } + + }); +}); \ No newline at end of file