Клуб API Карт

Работа с объектом Circle

Пост в архиве.

 

var myCircle = new ymaps.Circle([MapFullFind.getCenter(), 1000],
  {
     geodesic: true
  },
  {
     // Круг можно перемещать
     draggable: true,
     interactivityModel: 'default#transparent',
     fillColor: "#8dc400",
     fillOpacity: 0.2,
     strokeColor: "#8dc400",
     strokeOpacity: 0.4,
     strokeWidth: 2
  });
  MapFullFind.geoObjects.add(myCircle);

 

1. Не могу перетаскивать объект хотя draggable: true

2. Не понимаю что лучъше использовать ymaps.GeoObject или ymaps.Circle, в чем разница, где подвох

13 комментариев

Перетыкав все клавиши на мыши. Двигается при удержании колеса мыши. 

А как сделать при зажатии левой кнопки мыши. Point перетаскиваются по левой клавиши без проблем

разобрался убрал   interactivityModel: 'default#transparent',

 

  var myGeoObject = new ymaps.GeoObject({        geometry: {            type: "Circle",            coordinates: MapFullFind.getCenter(),            radius: 10000        },        // Описываем данные геообъекта.        properties: {            hintContent: "Круг можно перетаскивать"        }    }, {             draggable: true,             fillColor: "#8dc400",             fillOpacity: 0.2,             strokeColor: "#8dc400",             strokeOpacity: 0.4,             strokeWidth: 2    });// Добавляем геообъект на карту.      interactivityModel: 'default#hotspot',MapFullFind.geoObjects.add(myGeoObject);myGeoObject.events.add("dragend", function () {  this.geometry.getCenter();});


Как верно получить координаты центра myGeoObject в dragend ?

выбирай1. через замыканиеmyGeoObject.events.add("dragend", function () {  myGeoObject.geometry.getCoordinates();});2. через объект событияmyGeoObject.events.add("dragend", function (e) {  e.get('target').geometry.getCoordinates();});3. через контекст обработчикаmyGeoObject.events.add("dragend", function () {  this.geometry.getCoordinates();}, myGeoObject);

Скажите пожалуйст как с помощъю перебора определить и удалить только Circle ?

      MapFullFind.geoObjects.each(function (geoObject) {        MapFullFind.geoObjects.remove(geoObject);      });
для начала, как определить что  geoObjects - Circle 

можно так

if(geoObject instanceof ymaps.Circle) {

    MapFullFind.geoObjects.remove(geoObject);

}

Ошибок не выдаёт и не работает.

 

Работает вот так

          MapFullFind.geoObjects.each(function (geoObject) {             var Gtr = geoObject.geometry;             if(Gtr)             {               if('Circle' == geoObject.geometry.getType())               {               //console.log(geoObject.geometry.getType());                 MapFullFind.geoObjects.remove(geoObject);               }             }            // if(geoObject instanceof ymaps.Circle) {MapFullFind.geoObjects.remove(geoObject); }        });

если ты его создаешь через ymaps.GeoObject,

а не через ymaps.Circle

тогда не будет работать

Проверяй просто тип геометрии 

geoObject.geometry.getType()

 MapFullFind.geoObjects.each(function (geoObject) {

    if('Circle' == geoObject.geometry.getType())  {  }

  });

вызывает ошибку geoObject.geometry не найден


Через доп проверку работает 

  MapFullFind.geoObjects.each(function (geoObject) {    var Gtr = geoObject.geometry;    if(Gtr)    {     if('Circle' == geoObject.geometry.getType())  {  }    }  });

там могут быть коллекции у которых нет геометрии

поэтому лучше использовать и перебирать отдельную коллекцию

в которой будет только то что нужно тебе

на карту добавлены только Circle и Point,  все через new ymaps.GeoObject

Как программно удалить  interactivityModel: 'default#transparent', ???