2015-04-23 1 views
0

Я знаю, что я мог бы просто легко перевесить nokia.maps.clustering.MarkerTheme.getColor в версии 2.5.x, чтобы настроить только цвета кластера маркеров, но, кажется, нет простого способа сделать поэтому в версии 3.0.x.ЗДЕСЬ Карты JS API v3 - Настройка цвета кластера маркеров

Я имею в виду, что это интерфейс H.clustering.ITheme, который я мог бы реализовать, но похоже, что это настоящая боль для взлома в свойство цвета. Это то, что я до сих пор код (отображается только соответствующий код):

var defaultTheme = clusteredDataProvider.getTheme(), 
    customTheme  = { 

     /** 
     * 
     * @implements {H.clustering.ITheme.getClusterPresentation} 
     */ 
     getClusterPresentation: function (cluster) { 
      var clusterMarker = defaultTheme.getClusterPresentation 
       .call(defaultTheme, cluster); 

      /* 
      * TODO: Change the color property of the cluster marker. 
      * Hmm. How am I supposed to best do it? 
      */ 

      return clusterMarker; 
     }, 

     /** 
     * 
     * @implements {H.clustering.ITheme.getNoisePresentation} 
     */ 
     getNoisePresentation: function (noisePoint) { 
      var noiseMarker = defaultTheme.getNoisePresentation 
       .call(defaultTheme, noisePoint); 

      return noiseMarker; 
     } 
    }; 

ли здесь карт есть шаблон базы SVG кластерных маркеров, который я могла бы использовать?

+0

Возможно, было бы проще реализовать пользовательскую тему с помощью маркеров custome. –

+0

Нет, мне не будет легче, так как я должен создавать все с нуля (мне приходится иметь дело с размерами, раскраской, тенерием, текстовыми сообщениями, позиционированием текста), в то время как мне нужно только изменить цвет. Полученные пользовательские маркеры, вероятно, не будут выглядеть так же хорошо, как и по умолчанию. –

ответ

1

Из чего я могу разобраться в сжатом коде mapjs-clustering.js, в теме по умолчанию есть немного больше логики, чем просто создание новых маркеров для каждого кластера. Похоже, что API отображает изображение для каждого возможного значка «на лету» с использованием элементов холста, а затем продолжает повторное использование (get/putImageData вызовов), которое для каждого маркера основано на весе кластера. Вот некоторые вещи, которые я могу выяснить, где они создают иконки:

weight < 10  : size 28, color "118, 209, 0", textPosition { x: 11, y: 18 } 
weight < 25  : size 38, color "255, 105, 0", textPosition { x: 13, y: 23 } 
weight < 50  : size 38, color "240, 60, 0", textPosition { x: 13, y: 23 } 
weight < 100 : size 38, color "181, 0, 21", textPosition { x: 13, y: 23 } 
weight < 1000 : size 48, color "181, 0, 21", textPosition { x: 15, y: 28 } 
weight > 1000 : size 66, color "181, 0, 21", textPosition { x: 20, y: 38 } 

Таким образом, чтобы изменить свойство цвета, вы в значительной степени полностью перепроектировать значок рисования кода и переписать его. Не уверен, что это достойный подход ...

+0

Я проголосовал за этот ответ, потому что это в значительной степени дает мне подсказку для принятия какого-либо решения. Хотя это не очень изящное решение, переопределение (жесткое кодирование) этих значений глубоко в библиотеке с желаемыми цветами служит временным решением для меня. :-) –