Custom CRS: как заставить элемент управления шкалой листов отображать мм (миллиметр) и мкм (микрометр) - PullRequest
1 голос
/ 26 апреля 2019

Есть ли в любом случае листовка для отображения значений меньше метра? Например, мм (миллиметр) или мм (микрометр) на шкале управления?

Или, если есть плагин, который делает это?

У меня есть пользовательская карта с пользовательской CRS, которая использует изображения виртуальной микроскопии.

Я использую следующий код для создания карты со значениями менее метра, однако регулятор масштаба действительно широкий и не опускается ниже метра:

L.CRS.Meters = L.extend(L.CRS, {
    projection: L.extend( L.Projection.LonLat, {
      bounds: L.bounds([0, 0], [2160, 4096])
    }),
    transformation: new L.Transformation(1, 0, -1, 0),
    scale: function (zoom) {
        return Math.pow(2, zoom);
    },
    infinite: false
});

var customCRS = L.extend(L.CRS.Simple, {
  projection: L.extend( L.Projection.LonLat, {
     bounds: L.bounds([0, 0], [2160, 4096])
  }),
  transformation: new L.Transformation(1, 0, 1, 0),
  scale: function (zoom) {
    return Math.pow(2, zoom +7);
  },
  infinite: false
});

var map = L.map('vm', { zoomSnap: 0.2, crs: customCRS}).setView([3, 3], 3);

1 Ответ

1 голос
/ 28 апреля 2019

Конкретным фрагментом кода, который обрабатывает округление измерения шкалы и единиц измерения (метрических), является _updateMetric метод :

_updateMetric: function (maxMeters) {
    var meters = this._getRoundNum(maxMeters),
        label = meters < 1000 ? meters + ' m' : (meters / 1000) + ' km';

    this._updateScale(this._mScale, label, meters / maxMeters);
},

Обратите внимание, что реализация this._getRoundNum() вернет целое число, то есть 1 минимум.

Возможно, вы захотите заменить реализацию _updateMetric(), чтобы округлить множитель этого числа и соответственно применить суффиксы единиц, например ::

L.Control.Scale.include({
  _updateMetric: function(maxMeters) {
    var maxMilliMeters = maxMeters * 1000,
        milliMeters = this._getRoundNum(maxMilliMeters),
        label = milliMeters < 1000 ? milliMeters + " mm" : milliMeters / 1000 + " m";

    console.log(this._mScale, label, milliMeters / maxMilliMeters);

    this._updateScale(this._mScale, label, milliMeters / maxMilliMeters);
  }
});

См. рабочий пример здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...