Javascript 传单:多段线下的标签

Javascript 传单:多段线下的标签,javascript,leaflet,Javascript,Leaflet,我想做静态标签下我的线和平行我的线的折线在传单 例如: 但是“noHide”参数不适用于多段线?我还想做平行于我的线的标签 我该怎么做?您将无法仅将标签绑定到多段线。它需要基于要绑定到的线的附加坐标 签出fiddle上的示例,该示例包含一个名为bindLabelEx的辅助函数,该函数为您处理多段线标签: 通过使用以下公式计算和设置每个中点位置,可以创建附着到位于多段线中点上的无图标标记的标签 Math.round(arrPolylinePoints.length / 2) - 1; $(do

我想做静态标签下我的线和平行我的线的折线在传单

例如:

但是“noHide”参数不适用于多段线?我还想做平行于我的线的标签


我该怎么做?

您将无法仅将标签绑定到多段线。它需要基于要绑定到的线的附加坐标

签出fiddle上的示例,该示例包含一个名为bindLabelEx的辅助函数,该函数为您处理多段线标签:


通过使用以下公式计算和设置每个中点位置,可以创建附着到位于多段线中点上的无图标标记的标签

Math.round(arrPolylinePoints.length / 2) - 1;
$(document).ready(function() {
  L.Polyline.include({
    bindLabelEx: function (content, options) {
      if (!this.label || this.label.options !== options) {
        this.label = new L.Label(options, this);
      }

      var latlngs = this.getLatLngs();
      var nPoint = latlngs.length;

      var lats = [];
      var lngs = [];
      for(var i = 0; i < nPoint; i++) {
        lats.push(latlngs[i].lat);
        lngs.push(latlngs[i].lng);
      }

      var minLat = Math.min.apply(null, lats);
      var maxLat = Math.max.apply(null, lats);
      var minLng = Math.min.apply(null, lngs);
      var maxLng = Math.max.apply(null, lngs);

      var pointM = {
        lat: (minLat + maxLat) / 2,
        lng: (minLng + maxLng) / 2
      };

      this.label.setContent(content);
      this._showLabelAdded = true;
      this._showLabel({
        latlng: pointM
      });
    }
  });

  L.RotatedMarker = L.Marker.extend({
    _setPos: function(pos) {
      L.Marker.prototype._setPos.call(this, pos);
      if (L.DomUtil.TRANSFORM) {
        // use the CSS transform rule if available
        this._icon.style[L.DomUtil.TRANSFORM] += ' rotate(' + this.options.angle + 'deg)';
      } else if (L.Browser.ie) {
        // fallback for IE6, IE7, IE8
        var rad = this.options.angle * L.LatLng.DEG_TO_RAD,
        costheta = Math.cos(rad),
        sintheta = Math.sin(rad);
        this._icon.style.filter += ' progid:DXImageTransform.Microsoft.Matrix(sizingMethod=\'auto expand\', M11=' +
          costheta + ', M12=' + (-sintheta) + ', M21=' + sintheta + ', M22=' + costheta + ')';
      }
    }
  });

  L.rotatedMarker = function(pos, options) {
      return new L.RotatedMarker(pos, options);
  };

  //example user location
  var userLocation = new L.LatLng(28.735, 77.524);

  var map = L.map('map').setView(userLocation, 10);
  L.tileLayer('http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
      maxZoom: 18,
      attribution: 'Map data &copy; <a href="http://openstreetmap.org">OpenStreetMap</a> contributors, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="http://cloudmade.com">CloudMade</a>'
  }).addTo(map);

  var pointA = new L.LatLng(28.635308, 77.22496);
  var pointB = new L.LatLng(28.984461, 77.70641);
  //var pointC = new L.LatLng(29.03, 77.20);
  //var pointD = new L.LatLng(28.52, 77.45);

  var pointM = new L.LatLng( (pointA.lat + pointB.lat) / 2, (pointA.lng + pointB.lng) / 2);

  var pointList = [pointA, pointB];
  //var pointList = [pointA, pointB, pointC, pointD];

  var firstpolyline = new L.Polyline(pointList, {
      color: 'red',
      weight: 3,
      opacity: 0.5,
      smoothFactor: 1
  });

  firstpolyline.addTo(map).bindLabelEx('Even polylines can have labels.', { noHide: true, showLabelAdded: true });

  var angle = Math.atan( (pointB.lat - pointA.lat) / (pointB.lng - pointA.lng) );
  angle *= 180 / Math.PI + 5;

  var marker = L.rotatedMarker(pointM, {
    icon: L.divIcon({
      className: 'label',
      html: 'Do you want me to do?',
      iconSize: [160, 40]
    }),
    angle: -angle
    //draggable: true
  });

  marker.addTo(map);

  /*
  var ll = marker.getLatLng();
  marker.options.angle = -45 * (180 / Math.PI); 
  market.setLatLng(ll);
  */
});
Math.round(arrPolylinePoints.length / 2) - 1;