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

Yandex.maps API 2.x

  • technobulka

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

    Spritz 8 марта 2013 г. 9: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

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

    Spritz 8 марта 2013 г. 10: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

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

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

    аааа
  • technobulka

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

    Spritz 8 марта 2013 г. 14: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: &#39;меня можно перемещать по карте<br>правая кнопка мыши удалит меня&#39;,
    id: i
    }
    }, {
    preset: &#39;twirl#redStretchyIcon&#39;,
    draggable: true
    })
    );
    data.points[i++] = map.getCenter();
    });

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

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


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

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

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

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

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

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