Клуб API Карт

Невидимый полигон на карте

AntiMandron
17 июля 2013, 12:04

Здравствуйте!

На карте есть несколько районов. При перемещении балуна хочу определять принадлежность к этому району. Принадлежность можно определять, только если район добавлен на карту. Как сделать чтобы все это работало так же хорошо, но только на карте районы были невидимые?

Первое, что приходит, заливать невидимой заливкой, но все равно районы остаются одноцветными... Как быть?

 

ymaps.ready(init);
function init() {
    coords = [56.477670000000, 84.952930000000],
    myMap = new ymaps.Map('map', {
        center: coords,
        zoom: 12
    }),
    myBalloon = new ymaps.Placemark(coords, {
        balloonContentHeader: "объект"
    }, {
        draggable: "true",
        preset: "twirl#greenStretchyIcon"
    });
    myPolygon = new ymaps.Polygon([
        [
            [56.50052, 84.9856],
            [56.5021, 84.983],
            [56.50061, 84.97991],
            [56.49763, 84.98059],
            [56.49487, 84.98051],
            [56.49444, 84.99321],
            [56.49249, 85.00302],
            [56.49641, 85.00862],
            [56.49958, 85.00121],
            [56.50074, 84.99956],
            [56.50251, 84.99877],
            [56.50372, 84.99411],
            [56.50052, 84.9856]
        ]
    ], {
        fillColor: 'FFFFFF00',
        strokeColor: '#ff0000',
        strokeWidth: 1
    });
    myMap.geoObjects.add(myPolygon);
    myBalloon.events.add(['dragend'], function () {
        var coords = myBalloon.geometry.getCoordinates();
        alert(myPolygon.geometry.contains(coords) ? 'Ранил!' : 'Мимо!');
        $('#coordinates').val(coords);
    });
    myMap.geoObjects.add(myBalloon);
    Еслирайоннакартунедобавить, апростосвязать, товозникаютошибки, т.е.
    ymaps.ready(init);
    function init() {
        coords = [56.477670000000, 84.952930000000],
        myMap = new ymaps.Map('map', {
            center: coords,
            zoom: 12
        }),
        myBalloon = new ymaps.Placemark(coords, {
            balloonContentHeader: "объект"
        }, {
            draggable: "true",
            preset: "twirl#greenStretchyIcon"
        });
        myPolygon = new ymaps.Polygon([
            [
                [56.50052, 84.9856],
                [56.5021, 84.983],
                [56.50061, 84.97991],
                [56.49763, 84.98059],
                [56.49487, 84.98051],
                [56.49444, 84.99321],
                [56.49249, 85.00302],
                [56.49641, 85.00862],
                [56.49958, 85.00121],
                [56.50074, 84.99956],
                [56.50251, 84.99877],
                [56.50372, 84.99411],
                [56.50052, 84.9856]
            ]
        ], {
            fillColor: 'FFFFFF00',
            strokeColor: '#ff0000',
            strokeWidth: 1
        });
        //myMap.geoObjects.add(myPolygon);
        myPolygon.options.setParent(myMap.options);
        // вот эта строка не нравится скрипту
        myPolygon.setMap(myMap);
        myBalloon.events.add(['dragend'], function () {
            var coords = myBalloon.geometry.getCoordinates();
            alert(myPolygon.geometry.contains(coords) ? 'Ранил!' : 'Мимо!');
            $('#coordinates').val(coords);
        });
        myMap.geoObjects.add(myBalloon);

  

2 комментария
Подписаться на комментарии к посту

Только это не балун, это метка.

Балун - это то, что открывается при клике на метку (или на любой другой геообъект)

 

Если Вам не нужно отображать полигон на карте (оверлей), а нужна только его геометрия для расчетов, Вы можете инстанцировать ее отдельно и выставить ей карту и опции:

 

myPolygonGeometry.setMap(myMap);myPolygonGeometry.options.setParent(myMap.options);console.log(myPolygonGeometry.contains(myPlacemark.geometry.getCoordinates()));

помогло! спасибо