2016-12-05 3 views
0

я скорректировали openlayers basic draw example и всякий раз, когда я переключение от точки в LineString или Polygon режим рисования, он правильно работает только для впервые, но сбой при переключении обнуления.Изменение рисунка инструментов на лету

F.I. я не могу вернуться к рисованию точку после использования LineString (он продолжает рисовать меня LineString, но отпечатки drawingtool логарифмически точка)

Мой HTML для кнопок в модальных:

<div class="modal-body row"> 
    <div class="col-xs-12 col-sm-3"> 
     <a id="Point" href="#" class="draw btn btn-primary btn-block"><span class="icon ion-android-pin"></span> Point</a> 
    </div> 
    <div class="col-xs-12 col-sm-3"> 
     <a id="LineString" href="#" class="draw btn btn-primary btn-block"><span class="icon ion-android-pin"></span> Polyline</a> 
    </div> 
    <div class="col-xs-12 col-sm-3"> 
     <a id="Polygon" href="#" class="draw btn btn-primary btn-block"><span class="ion ion-ios-grid-view-outline"></span> Polygon</a> 
    </div> 
    <div class="col-xs-12 col-sm-3"> 
     <a href="#" class="btn btn-primary btn-block"><span class="ion ion-pinpoint"></span> Coordinates</a> 
    </div> 
    </div> 
</div> 

А вот часть ЯШ:

function addInteraction() { 
    draw = new ol.interaction.Draw({ 
    features: features, 
    type: /** @type {ol.geom.GeometryType} */ (drawtool) 
    }); 
    map.addInteraction(draw); 
} 
$('.draw').on("click", function(e) { 
    //e.preventDefault(); - commented by me - no difference 
    drawtool = $(this).attr('id'); 
    $("#drawModal").modal('toggle'); 
    addInteraction(); 
}); 

Вы также можете найти весь код на jsFiddle

ответ

1

Проблема в том, что каждый раз, когда вы вызываете addInteraction(), вы добавляете новый экземпляр ol.interaction.Draw к карте, поэтому существующий никогда не удаляется.

Быстрое и грязное решение заключается в удалении существующего взаимодействия перед созданием нового.

Просто добавьте

map.removeInteraction(draw); 

перед тем

draw = new ol.interaction.Draw(... 

См Обновленной скрипке https://jsfiddle.net/zuarah4t/3/

+0

Спасибо, я не мог понять, как удалить существующие взаимодействия. Можете ли вы также дать направление для более чистого и более продуманного направления? – Kaha