view src/djol/DistanceMeasureTool.js @ 20:9718e8de0cb2

Слияние
author nickolay
date Fri, 06 Oct 2017 09:17:41 +0300
parents f0035923ff3e
children
line wrap: on
line source

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);
            }
        }

    });
});