Клуб API Карт

Определить объект находится в полигоне или нет

peleskov
22 декабря 2016, 02:59

Помогите разобраться

Нужно определить адрес находится в полигоне или нет, перечитал всю инфу которую нашел но не могу разобраться, получаю ответ всегда 0

Вот функция:

function show()
{
	var addr = 'г. Саратов, ул. Московская, д. 100';
	var myMap = new ymaps.Map('map', {
			center: [51.53922,46.05327]
		}),
		myPolygon = new ymaps.Polygon([[
                    [ 51.53922,46.05327 ],
                    [ 51.54938,46.01161 ],
                    [ 51.53648,46.00380 ],
                    [ 51.53530,46.00848 ],
                    [ 51.53353,46.00743 ],
                    [ 51.53152,46.01095 ],
                    [ 51.52657,46.03280 ],
                    [ 51.53211,46.03615 ],
                    [ 51.53211,46.03623 ],
                    [ 51.53009,46.04575 ],
                    [ 51.53389,46.04784 ],
                    [ 51.53539,46.05104 ],
                    [ 51.53922,46.05327 ]
		]]);
		myMap.geoObjects
			.add(myPolygon);
	var result = ymaps.geoQuery(ymaps.geocode(addr)).searchInside(myPolygon);

	result.then(function () {
		console.info(result.getLength());
	});			
		
}

Какой бы адрес не подставлял, ответ всегда 0

В чем ошибся, прошу помощи!

3 комментария
Масштаб при создании карты нужно обязательно указывать
ОГРОМНОЕ СПАСИБО!!!
Заработало :)
Ниже рабочий вариант функции, которая определяет попадает адрес в полигон или нет.
Если я так долго его искал найдется еще кто-то, кому мой пост поможет не терять на это время.
addr - Передаем в функцию адрес при ее вызове


function check_addr(addr)
{
    var myMap = new ymaps.Map('map', {
        center: [51.53922,46.05327], zoom: 12
    }),
    myPolygon = new ymaps.Polygon([[
                [ 51.53922,46.05327 ],
                [ 51.54938,46.01161 ],
                [ 51.53648,46.00380 ],
                [ 51.53530,46.00848 ],
                [ 51.53353,46.00743 ],
                [ 51.53152,46.01095 ],
                [ 51.52657,46.03280 ],
                [ 51.53211,46.03615 ],
                [ 51.53211,46.03623 ],
                [ 51.53009,46.04575 ],
                [ 51.53389,46.04784 ],
                [ 51.53539,46.05104 ],
                [ 51.53922,46.05327 ]
     ]]);
     myMap.geoObjects.add(myPolygon);
     var result = ymaps.geoQuery(ymaps.geocode(addr)).searchInside(myPolygon);
     result.then(function () {
          if(result.getLength() == 0) console.info('Адрес находится вне полигона');
          if(result.getLength() == 1) console.info('Адрес находится внутри полигона');
     });
}
Образовалась новая проблема
полигон обрисовывает центр города
если адрес = название города (в моем случае Саратов) + улица + дом,
а дом и улица например равны 1 (или просто набору символов), тогда ответ функции будет положительный (адрес попал в полигон), 
то есть улица и дом не определены,
и видимо координаты точки обозначающей город попадают в полигон.
Вопрос, как сделать так что бы положительный ответ было только при точном попадании адреса в полигон, а во всех других случаях - отрицательный?

Обновлено 22 декабря 2016, 14:02