![]() В данном случае на карте было уже два маркера, подгрузились три маркера, из которых должен был добавиться в marger manager один, а добавилось два. Координаты одного маркера каким то способом проскочили проверку уже существующих маркеров в marker manager(на карте). На данный момент код такой: if(all_lat_length > 1) { var i = 0; var i2 = 0; if(m[2] > 1) { while(i < m[2]){ while(i2 < all_lat_length) { if(m[0][i] == all_lat[i2]){m[0].splice(i,1);m[1].splice(i,1);console.log(m[2]);m[2]--;console.log(m[2]);} i2++; } i++; } } if(m[2] == 1) { var i2 = 0; while(i2 < all_lat_length) { if(m[0] == all_lat[i2]){m[2] = 0;break;} i2++; } } } console.log(m[0]); console.log(m[1]); if(m[2] > 1) { var i = 0;while(i < m[2]){insert_marker(m[0][i],m[1][i]);i++;} } if(m[2] == 1) {insert_marker(m[0],m[1]);} |
Если в базе новых координат этой области не обнаружено, то firebug должен выдавать такое:
![]() Cтроки: 1) Прилетевший, не отпарсенный ответ 2) Количество непроверенных координат из прилетевшего ответа по отношению к уже существующим на карте 3) Количество непроверенных координат из прилетевшего ответа по отношению к уже существующим на карте 4) 0 совпадений найдено 5) Массив новых координат пуст 6) тоже, что и пятый пункт, просто перед самым добавлением проверяю: console.log(m[2]); if(m[2] > 1) { var i = 0;while(i < m[2]){insert_marker(m[0][i],m[1][i]);i++;} } if(m[2] == 1) {insert_marker(m[0],m[1]);} |
function insert_marker(lat,lng){ all_lat.push(lat); Добавление в общий массив координат, которые уже на карте. |
значит, сервер возвращает некоторое количество пар чисел (координат)? Давай переделаем это на json_encode + eval
|
Переделал, теперь ответ приходит такой:
{"lat":["56.50097598931345","56.49983904637648"],"lng":["21.01032257080078","20.999422073364258"],"mcount":2} А дальше как? :) Как заставить эту строку, воспринимать, как объект/массив. Я так понимаю, что вот таким способом: var obj= eval("(" + data+ ")"); |
Цитата:
lat, lng - названия координат? mcount - количетсво координат? тогда оно лишнее |
if(all_lat_length > 1) { var i = 0; var i2 = 0; if(m['mcount'] > 1) { while(i < m['mcount']){ while(i2 < all_lat_length) { if(m['lat'][i] == all_lat[i2] && m['lng'][i] == all_lng[i2]){m['lat'].splice(i,1);m['lng'].splice(i,1);m['mcount']--;} i2++; } i++; } } if(m['mcount'] == 1) { var i2 = 0; while(i2 < all_lat_length) { if(m['lat'] == all_lat[i2] && m['lng'] == all_lng[i2]){m['mcount'] = 0;} i2++; } } } if(m['mcount'] > 1) { var i = 0;while(i < m['mcount']){insert_marker(m['lat'][i],m['lng'][i]);i++;} } if(m['mcount'] == 1) { insert_marker(m['lat'],m['lng']); } console.log(mcnt); console.log(mcnt); должно выводить три, а выводит 4. :( |
Цитата:
lng - longtitude mcount - affected_rows(); из последнего запроса Как проще сделать сравнение списка текущих координат и списка новых? |
if(all_lat_length > 1) { newlat = array_diff(m['lat'],all_lat);newlng = array_diff(m['lng'],all_lng); console.log(newlat);console.log(newlng); for(i = 1;i < newlat.length;i++){insert_marker(newlat[i],newlng[i]);} } else { if(m['mcount'] > 1) { for(i = 0;i < m['lat'].length;i++) {insert_marker(m['lat'][i],m['lat'][i]);} } else {insert_marker(m['lat'],m['lng']);} } console.log(mcnt); Нашел функцию у вас на сайте: function array_diff (array) { // Computes the difference of arrays // // + original by: Kevin van Zonneveld ([url]http://kevin.vanzonneveld.net[/url]) var arr_dif = [], i = 1, argc = arguments.length, argv = arguments, key, key_c, found=false; // loop through 1st array for ( key in array ){ // loop over other arrays for (i = 1; i< argc; i++){ // find in the compare array found = false; for (key_c in argv[i]) { if (argv[i][key_c] == array[key]) { found = true; break; } } if(!found){ arr_dif[key] = array[key]; } } } return arr_dif; } Прогнал через нее оба массива, вроде всё работает, но как доработать, чтобы сверять и широту и долготу одновременно. И еще, почему-то в newlat нулевой слот стоит undefined, как и в newlng. Почему так? |
Эх, никто не хочет разбираться в коде. :D
В общем кое как сделал, вроде работает всё, только вот почему undefined, после прогона через array_diff, так и не разобрался. Теперь бы еще сделать сравнения видимой зоны и той, что будет, после dragend. А то на каждый dragend евент делать запрос к базе, то так и сервер загнется. :D |
Часовой пояс GMT +3, время: 11:51. |