Клуб API Карт

проверка адреса доставки, введенного в форму заказа Virtuemart, на вхождение в полигон

YaMapConst
25 августа 2016, 16:46

Добрый день!

Поиском не нашел.

Стоит задача сабж. Полигон есть на карте и в файле.

1. Вопрос - возможно ли это? Ведь потребуется передача JavaScript'ом адреса из формы заказа в форму Яндекс.Карты на этой же странице. Это нормально воспримется сервисом в рамках  бесплатного сервиса?

2. В API полный ноль. Пока просто пытаюсь проверить, входит ли точка в полигон (подставляю в код скрипта).

Взял за основу пример https://tech.yandex.ru/maps/jsbox/2.1/polygon

И пытаюсь плавно модифицироветь его к нужным мне функциям.

Но при добавлении кусков из других примеров получаю ошибки.

Например, вставляя проверку (взятую из https://tech.yandex.ru/maps/doc/jsapi/2.0/ref/reference/IPolygonGeometryAccess-docpage, правда, для версии 2.0) :

alert(myPolygon.geometry.contains(e.get('[55.237300, 37.816400]')) ? 'Ранил!' : 'Мимо!');

получаю в Firebug'е ошибку:

TypeError: t is undefined

Чем здесь заменить myPolygon.geometry.contains(e.get

?

3 комментария
Вот весь код:


<!DOCTYPE html>
<html>
<head>
    <title>Примеры. Многоугольник</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <script src="http://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
    <script type="text/javascript">
ymaps.ready(init);

function init() {
    var myMap = new ymaps.Map("map", {
            center: [55.73, 37.75],
            zoom: 10
        }, {
            searchControlProvider: 'yandex#search'
        });

    // Создаем многоугольник, используя класс GeoObject.
    var myGeoObject = new ymaps.GeoObject({
        // Описываем геометрию геообъекта.
        geometry: {
            // Тип геометрии - "Многоугольник".
            type: "Polygon",
            // Указываем координаты вершин многоугольника.
            coordinates: [
                // Координаты вершин внешнего контура.
                [
                    [55.75, 37.80],
                    [55.80, 37.90],
                    [55.75, 38.00],
                    [55.70, 38.00],
                    [55.70, 37.80]
                ],
                // Координаты вершин внутреннего контура.
                [
                    [55.75, 37.82],
                    [55.75, 37.98],
                    [55.65, 37.90]
                ]
            ],
            // Задаем правило заливки внутренних контуров по алгоритму "nonZero".
            fillRule: "nonZero"
        },
        // Описываем свойства геообъекта.
        properties:{
            // Содержимое балуна.
            balloonContent: "Многоугольник"
        }
    }, {
        // Описываем опции геообъекта.
        // Цвет заливки.
        fillColor: '#00FF00',
        // Цвет обводки.
        strokeColor: '#0000FF',
        // Общая прозрачность (как для заливки, так и для обводки).
        opacity: 0.5,
        // Ширина обводки.
        strokeWidth: 5,
        // Стиль обводки.
        strokeStyle: 'shortdash'
    });

    // Добавляем многоугольник на карту.
    myMap.geoObjects.add(myGeoObject);

    // Создаем многоугольник, используя вспомогательный класс Polygon.
    var myPolygon = new ymaps.Polygon([
        // Указываем координаты вершин многоугольника.
        // Координаты вершин внешнего контура.
        [
            [55.75, 37.50],
            [55.80, 37.60],
            [55.75, 37.70],
            [55.70, 37.70],
            [55.70, 37.50]
        ],
        // Координаты вершин внутреннего контура.
        [
            [55.75, 37.52],
            [55.75, 37.68],
            [55.65, 37.60]
        ]
    ], {
        // Описываем свойства геообъекта.
        // Содержимое балуна.
        hintContent: "Многоугольник"
    }, {
        // Задаем опции геообъекта.
        // Цвет заливки.
        fillColor: '#00FF0088',
        // Ширина обводки.
        strokeWidth: 5
    });

    // Добавляем многоугольник на карту.
    myMap.geoObjects.add(myPolygon);
   
   
   
    // МОЯ ПРОВЕРКА:
    var myNeed2beCheckedPoint = [55.237300, 37.816400];

    myMap.events.add('dblclick', function (e) {
            alert(myPolygon.geometry.contains(e.get('myNeed2beCheckedPoint')) ? 'Ранил!' : 'Мимо!');
    });
                      
                          
}       
    </script>
    <style>
        html, body, #map {
            width: 100%; height: 100%; padding: 0; margin: 0;
        }
    </style>
</head>
<body>
<div id="map"></div>
</body>
</html>


YaMapConst,
Можете объяснить каким образом значение переменной myNeed2beCheckedPoint вдруг окажется полем объекта-события 'dblclick'
e.get('myNeed2beCheckedPoint')

?


var myNeed2beCheckedPoint = [55.237300, 37.816400];
myMap.events.add('dblclick', function (e) {
alert(myPolygon.geometry.contains(e.get('myNeed2beCheckedPoint')) ? 'Ранил!' : 'Мимо!');
});
dimik,
ничего не понял, но заработало, если сменить на:

alert(myPolygon.geometry.contains(myNeed2beCheckedPoint) ? 'Ранил!' : 'Мимо!');


мне тоже казалось как-то слишком мудрено в примере)