не отрабатывает скрипт если на яндекс карте несколько полигонов
Пожалуйста помогите разобраться с вопросом.на базе исходников яндекс карт апи 2.1 был написан скрипт по которому создается на карте несколько полигонов.Вопрос в следующем- создаю первый полигон - передвигаю его к геометкам - те по скрипту отрабатывают и окрашиваются красным.Создаю второй полигон передвигаю его - от начинает отрабатывать правильно(метки при помещении в полигон окрашиваются красным).Но первый созданный полигон сколько не двигай метки на него больше не реагируют.В JS очень слаб.Очень прошу хотя бы кивните в какую сторону копать.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Пример рисования многоугольника с выводом координат - API Яндекс.Карт v 2.x</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<script src="https://api-maps.yandex.ru/2.1/?load=package.full&lang=ru-RU" type="text/javascript"></script>
<script src="js/jquery-3.1.1.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css" />
<script type="text/javascript">
ymaps.ready(init);
var polygon;
var a=1;
function init(){
var myMap = new ymaps.Map("map",{
center:[58.603553, 49.667017],
zoom:11
});
objects = ymaps.geoQuery([
{
type: 'Point',
coordinates: [58.593565566, 49.672739]
},
{
type: 'Point',
coordinates: [58.586715796, 49.67462174]
}
]).addToMap(myMap);
//Функционал добавления полигонов
$('#addEditPolyline').on('click',function(){
polygon = new ymaps.GeoObject({
geometry:{
type: "Polygon",
coordinates:[[[ 58.5739, 49.7891 ], [ 58.5199, 49.7070 ], [ 58.5186, 49.8255 ], [ 58.5739, 49.7891 ]]]
},
properties: {
balloonContentHeader: 'Название полигона №'+a++,
balloonContentBody: 'Описание',
hintContent:'плавающая подсказка: ',
}
},{draggable: true});
polygon.events.add('geometrychange', function () {
// Объекты, попадающие в полигон, будут становиться красными.
var objectsInsidepolygon = objects.searchInside(polygon);
objectsInsidepolygon.setOptions('preset', 'islands#redIcon');
// Оставшиеся объекты - синими.
objects.remove(objectsInsidepolygon).setOptions('preset', 'islands#blueIcon');
});
myMap.geoObjects.add(polygon);
polygon.editor.startDrawing();
});
//
//Прослушиваем нажатие кнопки расчитать координаты
$('#stopEditPolyline').on('click',function(){
$('#datacoord').empty();
myMap.geoObjects.each(function(obj,objIndex){
printGeometry(obj.geometry.getCoordinates()[0],objIndex);
});
});
///
}
//функция прорисовки координат
function printGeometry(coords,index){
var addcoord='Полигон: <b>'+index+'</b>' +stringify(coords)+'<br>';
$('#datacoord').append(addcoord);
function stringify(coords){
var res='';
if ($.isArray(coords)){
res ='[ ';
for (var i=0, l= coords.length; i < l; i++) {
if (i>0){
res+=', ';
}
res+=stringify(coords[i]);
}
res+=' ]';
} else if(typeof coords=='number'){
res =coords.toPrecision(6);
}else if (coords.toString){
res=coords.toString();
}
return res;
}
}
//
</script>
</head>
<body>
<div id="map" style="width: 1024px; height: 720px"></div>
<input type="button" value="Добавить полигон" id="addEditPolyline" >
<input type="button" value="Получит координаты" id="stopEditPolyline">
<div id="geometry">Координаты:</div><span id="datacoord"></span>
</body>
</html>```
Ответы (1 шт):
плюнул на разбирательство,создал 10 полигонов и на каждый полигон повесил по своему обработчику задав доступ по названию переменной образец кода
//создание полигона №100 (создание идет десятками сверху вниз.)цвет зеленый
myPolygon = new ymaps.GeoObject({
geometry:{type: "Polygon",coordinates:[[[ 58.6645, 50.2515 ], [ 58.6659, 50.4231 ], [ 58.5714, 50.4273 ], [ 58.5707, 50.2584 ], [ 58.6645, 50.2515 ]]]},
properties: {hintContent:'Участок №100'}
},{editorDrawingCursor:"crosshair",fillColor: '#00FF00',opacity: 0.4,draggable: true});
myMap.geoObjects.add(myPolygon);
myPolygon.editor.startDrawing();
myPolygon.events.add('geometrychange', function () {
var objectsInsidemyPolygon = objects.searchInside(myPolygon);
objectsInsidemyPolygon.setOptions('preset', 'islands#redIcon');
let out_arr = document.getElementById('out_arr');
out_arr.innerHTML = objectsInsidemyPolygon;
document.getElementById("col").innerHTML
= objectsInsidemyPolygon.getLength();
let str = ' ';
for (let i = 0; i < objectsInsidemyPolygon.getLength(); i++) {
str +=objectsInsidemyPolygon.get(i).properties.get('balloonContent')+'<br>';
}
out_arr.innerHTML = str;
objects.remove(objectsInsidemyPolygon).setOptions('preset', 'islands#blueIcon');
});
//создание полигона №90 (создание идет десятками сверху вниз.)цвет голубоватый
myPolygon2 = new ymaps.GeoObject({
geometry:{type: "Polygon",coordinates:[[[ 58.6645, 50.2515 ], [ 58.6659, 50.4231 ], [ 58.5714, 50.4273 ], [ 58.5707, 50.2584 ], [ 58.6645, 50.2515 ]]]},
properties: {hintContent:'Участок №90'}
},{editorDrawingCursor:"crosshair",fillColor: '#00FFFF',opacity: 0.4,draggable: true});
myMap.geoObjects.add(myPolygon2);
myPolygon2.editor.startDrawing();
myPolygon2.events.add('geometrychange', function () {
var objectsInsidemyPolygon2 = objects.searchInside(myPolygon2);
objectsInsidemyPolygon2.setOptions('preset', 'islands#redIcon');
let out_arr = document.getElementById('out_arr');
out_arr.innerHTML = objectsInsidemyPolygon2;
document.getElementById("col").innerHTML
= objectsInsidemyPolygon2.getLength();
let str = ' ';
for (let i = 0; i < objectsInsidemyPolygon2.getLength(); i++) {
str +=objectsInsidemyPolygon2.get(i).properties.get('balloonContent')+'<br>';
}
out_arr.innerHTML = str;
objects.remove(objectsInsidemyPolygon2).setOptions('preset', 'islands#blueIcon');
});