05.10.2009, 21:22
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
В данном случае на карте было уже два маркера, подгрузились три маркера, из которых должен был добавиться в 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]);}
Последний раз редактировалось Beck, 05.10.2009 в 22:54.
|
|
05.10.2009, 21:32
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Если в базе новых координат этой области не обнаружено, то 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]);}
Последний раз редактировалось Beck, 05.10.2009 в 21:38.
|
|
05.10.2009, 21:44
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
function insert_marker(lat,lng){
all_lat.push(lat);
Добавление в общий массив координат, которые уже на карте.
|
|
05.10.2009, 21:47
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
значит, сервер возвращает некоторое количество пар чисел (координат)? Давай переделаем это на json_encode + eval
|
|
05.10.2009, 22:17
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Переделал, теперь ответ приходит такой:
{"lat":["56.50097598931345","56.49983904637648"],"lng":["21.01032257080078","20.999422073364258"],"mcount":2}
А дальше как? Как заставить эту строку, воспринимать, как объект/массив.
Я так понимаю, что вот таким способом:
var obj= eval("(" + data+ ")");
Последний раз редактировалось Beck, 05.10.2009 в 22:26.
|
|
05.10.2009, 22:25
|
|
|
|
Регистрация: 27.12.2008
Сообщений: 4,201
|
|
Сообщение от Beck
|
А дальше как? Как заставить эту строку, воспринимать, как объект/массив.
|
вопрос по jSon + Ajax - что непонятно?
lat, lng - названия координат?
mcount - количетсво координат? тогда оно лишнее
|
|
05.10.2009, 22:49
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
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.
Последний раз редактировалось Beck, 05.10.2009 в 22:54.
|
|
05.10.2009, 22:51
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Сообщение от x-yuri
|
вопрос по jSon + Ajax - что непонятно?
lat, lng - названия координат?
mcount - количетсво координат? тогда оно лишнее
|
lat - latitude
lng - longtitude
mcount - affected_rows(); из последнего запроса
Как проще сделать сравнение списка текущих координат и списка новых?
|
|
05.10.2009, 23:39
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
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.
Почему так?
Последний раз редактировалось Beck, 06.10.2009 в 00:56.
|
|
06.10.2009, 15:36
|
Аспирант
|
|
Регистрация: 08.08.2009
Сообщений: 95
|
|
Эх, никто не хочет разбираться в коде.
В общем кое как сделал, вроде работает всё, только вот почему undefined, после прогона через array_diff, так и не разобрался.
Теперь бы еще сделать сравнения видимой зоны и той, что будет, после dragend.
А то на каждый dragend евент делать запрос к базе, то так и сервер загнется.
Последний раз редактировалось Beck, 06.10.2009 в 15:39.
|
|
|
|