ФорумПрограммированиеJavaScript → Yandex.maps API 2.x

Yandex.maps API 2.x

  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 8 марта 2013 г. 21:11

    Итак. Есть задача - добавлять точки на карту, ставить куда надо и сохранять полученные данные.
    Вроде, ничего сложного, но документация какая-то хуёвенькая и в некоторых моментах туплю.
    JsFiddle чет не захотел жрать, выложу говнокод сюда.

    function fid(ymaps) {
    var geo = ymaps.geolocation,
    map = new ymaps.Map("map", {
    center: [geo.longitude, geo.latitude],
    zoom: 11,
    type: "yandex#map",
    behaviors: ['default', 'scrollZoom']
    }),
    addPoint = new ymaps.control.Button({ data: { content: 'Добавить точку' } }, { selectOnClick: false }),
    newData = {};

    addPoint.events.add('click', function() {
    var point = new ymaps.GeoObject({
    geometry: {
    type: "Point",
    coordinates: map.getCenter()
    },
    properties: {
    hintContent: 'Меня можно перемещать'
    }
    }, {
    preset: 'twirl#redStretchyIcon',
    draggable: true
    });

    map.geoObjects.add(point);
    map.geoObjects.each(function (geoObject) {
    // console.log(geoObject.properties.get('id'))
    });
    });

    map.events.add('mouseleave', function(e) {
    newData['center'] = map.getCenter();
    newData['zoom'] = map.getZoom();
    // console.log(newData)
    });

    map.geoObjects.events.add('dragend', function(e) {
    // console.log(e.get('target').properties.get('id'))
    });

    map.controls
    .add(addPoint, { top: 5, left: 5 })
    .add("zoomControl")
    .add("searchControl", { top: 5, left: 365 })
    .add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"]));
    }


    В данный момент никак не могу выдернуть id точки.
    В документации есть и .properties.get('id'), и .properties.get('myID'), но все время выдаёт undefined.
    Высокоуровневое абстрактное говно
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 8 марта 2013 г. 22:53, спустя 1 час 41 минуту 20 секунд

    Родной id метки выдернуть так и не вышло, зато, оказывается, можно создавать своё свойство для метки.
    Пока сделал так:
    function fid(ymaps) {
       var geo = ymaps.geolocation,
           map = new ymaps.Map("map", {
               center: [geo.longitude, geo.latitude],
               zoom: 11,
               type: "yandex#map",
               behaviors: ['default', 'scrollZoom']
           }),
           addPoint = new ymaps.control.Button({ data: { content: 'Добавить точку' } }, { selectOnClick: false }),
           i = 0,
           newData = {};

       addPoint.events.add('click', function() {
           var point = new ymaps.GeoObject({
                   geometry: {
                       type: "Point",
                       coordinates: map.getCenter()
                   },
                   properties: {
                       hintContent: 'Меня можно перемещать',
                       id: i++                                        // добавляем ид для каждой новой точки
                   }
               }, {
                   preset: 'twirl#redStretchyIcon',
                   draggable: true
               });

           map.geoObjects.add(point);
       });

       map.events.add('mouseleave', function(e) {
           newData['center'] = map.getCenter();
           newData['zoom'] = map.getZoom();
           newData['points'] = [];

           map.geoObjects.each(function(geoObject) {                  // теперь могу найти точку по ее id'у
               newData['points'][geoObject.properties.get('id')] = geoObject.geometry.getCoordinates();
           });
           console.log(JSON.stringify(newData))
       });
       
       map.controls
           .add(addPoint, { top: 5, left: 5 })
           .add("zoomControl")
           .add("searchControl", { top: 5, left: 365 })
           .add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"]));
    }
    Высокоуровневое абстрактное говно
  • kostyl

    Сообщения: 5210 Репутация: N Группа: Джедаи

    Spritz 9 марта 2013 г. 1:23, спустя 2 часа 30 минут 11 секунд

    аааа
  • technobulka

    Сообщения: 4540 Репутация: N Группа: Джедаи

    Spritz 9 марта 2013 г. 2:42, спустя 1 час 19 минут 19 секунд

    В итоге получилась вот такая галиматья))

    mapData = $.parseJSON($('#ConfigYmap').val());

    function fid(ymaps) {
    var geo = ymaps.geolocation,
    data = mapData||{ center: [geo.longitude, geo.latitude], zoom: 11, points: {} }
    map = new ymaps.Map("map", {
    center: data.center,
    zoom: data.zoom,
    type: "yandex#map",
    behaviors: ['default', 'scrollZoom']
    }),
    button = new ymaps.control.Button({ data: { content: 'Добавить точку' } }, { selectOnClick: false }),
    collection = new ymaps.GeoObjectCollection(),
    i = Object.keys(data.points).length;

    button.events.add('click', function() {
    collection.add(
    new ymaps.GeoObject({
    geometry: {
    type: "Point",
    coordinates: map.getCenter()
    },
    properties: {
    hintContent: 'меня можно перемещать по карте<br>правая кнопка мыши удалит меня',
    id: i
    }
    }, {
    preset: 'twirl#redStretchyIcon',
    draggable: true
    })
    );
    data.points[i++] = map.getCenter();
    });

    collection.events.add('contextmenu', function(e) {
    delete data.points[e.get('target').properties.get('id')];
    collection.remove(e.get('target'));
    });

    map.geoObjects.add(collection);
    map.controls
    .add(button, { top: 5, left: 5 })
    .add("zoomControl")
    .add("searchControl", { top: 5, left: 365 })
    .add(new ymaps.control.TypeSelector(["yandex#map", "yandex#satellite", "yandex#hybrid", "yandex#publicMap"]));


    if (Object.keys(data.points).length) {
    for (var i = 0; i < Object.keys(data.points).length; i++) {
    collection.add(
    new ymaps.GeoObject({
    geometry: {
    type: "Point",
    coordinates: data.points[Object.keys(data.points)]
    },
    properties: {
    hintContent: 'меня можно перемещать по карте<br>правая кнопка мыши удалит меня',
    id: i
    }
    }, {
    preset: 'twirl#redStretchyIcon',
    draggable: true
    })
    );
    }
    map.geoObjects.add(collection);
    }

    $('#save').click(function() {
    data.center = map.getCenter();
    data.zoom = map.getZoom();

    collection.each(function(geoObject) {
    data.points[geoObject.properties.get('id')] = geoObject.geometry.getCoordinates();
    });

    $('#ConfigYmap').val(JSON.stringify(data));
    $('#ConfigAdminMainForm').submit();

    return false;
    });
    }
    Высокоуровневое абстрактное говно

Пожалуйста, авторизуйтесь, чтобы написать комментарий!