2017-02-09 11 views
0

Так что я пишу приложение, используя bing maps v8. К сожалению, у него нет поддержки z-index (несмотря на наличие функций z-index ...). Поэтому я пытаюсь использовать слои для достижения чего-то подобного. Проблема в том, что когда я меняю штырь между слоями, событие начинает стрелять по правильному месту контакта с неправильными метаданными.Bing maps v8 событие проходит неправильный вывод?

Вот как я создаю булавку

function createImagePin(location, index, objArray) 
{ 
    var obj = objArray[index]; 
    var smallPin = getSmallPin(obj); 

    var pin = new Microsoft.Maps.Pushpin(location, 
    { 
     visible: true, 
     icon: smallPin.data, 
     anchor: new Microsoft.Maps.Point(smallPin.width/2, smallPin.height/2) //Align center of pushpin with location. 
    }); 

    pin.metadata = {}; 
    pin.metadata.index = index; 
    pin.metadata.dataTarget = obj; 
    pin.metadata.isSelected = false; 

    Microsoft.Maps.Events.addHandler(pin, 'click', function (e) { 

     if(e.targetType === 'pushpin') 
     { 
      SetRowSelection(e.target.metadata.index); 
     } 
    }); 

    Microsoft.Maps.Events.addHandler(pin, 'mouseover', function (e) 
    { 
     if(e.targetType === 'pushpin') 
     { 
      SelectPin(e.target); 
      ShowInfobox(e.target); 
      console.log(e.target.getLocation()); 
     } 
    }); 

    Microsoft.Maps.Events.addHandler(pin, 'mouseout', function (e) 
    { 
     if (e.targetType === 'pushpin') 
     { 
      DeselectPin(e.target); 
      HideInfobox(); 
     } 
    }); 

    return pin; 
} 

По какой-то причине, я получаю объект штыря в наведении курсора мыши каждый раз, когда имеет правильное расположение, но неправильные метаданные. Если я прокомментирую Отменить выбор ... Я правильно понимаю оба.

Вот как я выбираю и снимаю выделение с булавки. На основании примера я получил Bing Maps pushpin icon issues

Нет никакого другого кода, который касается этих контактов в данный момент ... Мне кажется, это довольно странно. Это почти как внутренне, это только копирование некоторой информации в Слой, а затем перемещение всех объектов, прикрепленных к объекту. На самом деле, если я просто закомментирую добавление/удаление, он перестает передавать мне неправильные данные ... хотя я теряю свою z-индексацию.

function SelectPin(pin) 
{ 
    switch (pin.metadata.dataTarget.ComparableType) 
    { 
     case "Subject": 
      mapLayers.subjectLayer.remove(pin); 
      pin.setOptions({ visible: true, icon: largeGreenHouse.data, anchor: new Microsoft.Maps.Point(largeGreenHouse.width/2, largeGreenHouse.height/2) }); 
      break; 
     case "Listing Comp": 
      mapLayers.compLayer.remove(pin); 
      pin.setOptions({ visible: true, icon: largeBlueHouse.data, anchor: new Microsoft.Maps.Point(largeBlueHouse.width/2, largeBlueHouse.height/2) }); 
      break; 
     case "Sales Comp": 
      mapLayers.compLayer.remove(pin); 
      pin.setOptions({ visible: true, icon: largeBlueHouse.data, anchor: new Microsoft.Maps.Point(largeBlueHouse.width/2, largeBlueHouse.height/2) }); 
      break; 
     case "Hidden": 
      pin.setOptions({ visible: false }); 
      return; 
     default: 
      mapLayers.observableLayer.remove(pin); 
      pin.setOptions({ visible: true, icon: largeGreyHouse.data, anchor: new Microsoft.Maps.Point(largeGreyHouse.width/2, largeGreyHouse.height/2) }); 
      break; 
    } 

    mapLayers.selectionLayer.add(pin); 
    pin.metadata.isSelected = true; 
} 

function DeselectPin(pin) 
{ 
    if(!pin.metadata.isSelected) 
     return; 

    pin.metadata.isSelected = false; 
    mapLayers.selectionLayer.remove(pin); 
    switch (pin.metadata.dataTarget.ComparableType) 
    { 
     case "Subject": 
      pin.setOptions({ visible: true, icon: greenHouse.data, anchor: new Microsoft.Maps.Point(greenHouse.width/2, greenHouse.height/2) }); 
      mapLayers.subjectLayer.add(pin); 
      break; 
     case "Listing Comp": 
      pin.setOptions({ visible: true, icon: blueHouse.data, anchor: new Microsoft.Maps.Point(blueHouse.width/2, blueHouse.height/2) }); 
      mapLayers.compLayer.add(pin); 
      break; 
     case "Sales Comp": 
      pin.setOptions({ visible: true, icon: blueHouse.data, anchor: new Microsoft.Maps.Point(blueHouse.width/2, blueHouse.height/2) }); 
      mapLayers.compLayer.add(pin); 
      break; 
     case "Hidden": 
      pin.setOptions({ visible: false }); 
      return; 
     default: 
      pin.setOptions({ visible: true, icon: greyHouse.data, anchor: new Microsoft.Maps.Point(greyHouse.width/2, greyHouse.height/2) }); 
      mapLayers.observableLayer.add(pin); 
      break; 
    } 

ответ

0

Хм, похоже, проблема с данными, а не проблема с кодом. Мои данные получают геокодирование в идентичные lat/long для некоторых свойств, которые не имеют одинаковых адресов. Таким образом, перегруппировка массива приводит к тому, что другая позиция становится «верхней позицией».

 Смежные вопросы

  • Нет связанных вопросов^_^