Показать сообщение отдельно
  #19 (permalink)  
Старый 05.10.2009, 19:37
Аспирант
Отправить личное сообщение для Beck Посмотреть профиль Найти все сообщения от Beck
 
Регистрация: 08.08.2009
Сообщений: 95

var allmakers = [];
var all_lat = [];
var all_lng = [];
var all_lat_length = 0;
var all_lng_length = 0;

function insert_marker(lat,lng){
	all_lat.push(lat);
	all_lng.push(lng);
	all_lat_length++;
	all_lng_length++;
	var mark = new GMarker(new GLatLng(lat,lng)); 
	allmakers.push(mark);
}

function process_markers(m) {
	console.log(allmakers);
	if(all_lat_length > 0) {
	var i = 0;
	var rounds = m[2];
	
	if(m[2] > 1) {
		while(i < rounds){
		var i2 = 0;
		while(i2 < all_lat_length) {
			if(m[0][i] == all_lat[i2]){m[0].splice(i,1);m[1].splice(i,1);m[2]--;}
			i2++;
			}
		i++;
		}
	}
	else {
		var i2 = 0;
		while(i2 < all_lat_length) {
			if(m[0] == all_lat[i2]){m[0] = '';m[1] = '';m[2]--;}
			i2++;
			}			
		}
	}	
	
		
	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]);}
	
	if(m[2] > 0) {mgr.addMarkers(allmakers,13);mgr.refresh();}
	
}	

function get_and_set(sw_lat,sw_lng,ne_lat,ne_lng){
	$.ajax({
		url: "c4.php",
		type: "POST",
		data: "swlat=" + sw_lat + "&swlng=" + sw_lng + "&nelat=" + ne_lat + "&nelng=" + ne_lng,
		success: function(data){
		if(data != "empty") {
			var data1 = (data).split("*");
			if(data1[2] > 1) {
			var lat = (data1[0]).split("|");var lng = (data1[1]).split("|");
			lat.pop();
			lng.pop();
			} else {
			var lat = data1[0];
			var lng = data1[1];
			}		
			var m = [];
			m.push(lat);
			m.push(lng);
			m.push(data1[2]);

			process_markers(m);
			}
		}		
	});
}
	
	var s_sw_lat = s_sw.lat();
	var s_sw_lng = s_sw.lng();
	var s_ne_lat = s_ne.lat();
	var s_ne_lng = s_ne.lng();
	
	var mgrOptions = {borderPadding: 25};
	var mgr = new MarkerManager(map,mgrOptions);
	
	get_and_set(s_sw_lat,s_sw_lng,s_ne_lat,s_ne_lng);		


GEvent.addListener(map, "dragend", function() {
		var after_bounds = map.getBounds();
		var a_sw = after_bounds.getSouthWest();
		var a_ne = after_bounds.getNorthEast();
		var a_sw_lat = a_sw.lat();
		var a_sw_lng = a_sw.lng();
		var a_ne_lat = a_ne.lat();
		var a_ne_lng = a_ne.lng();
				
		get_and_set(a_sw_lat,a_sw_lng,a_ne_lat,a_ne_lng);
		
	});


К карте привязан listener, то есть, после перетаскивания карты, проверяются вытащенные из базы маркеры с уже теми, что есть на карте и удаляются те, которые уже есть на карте.

Оставшиеся в массиве маркеры, если такие будут, наносятся на карту и добавляются в общий массив маркеров.

Только вот проблема в том, что при перетаскивании иногда происходит вот такое, хотя в базе координат всего на 5 маркеров:

screenshot

У меня почему то проскакивает m[2] в виде единицы, хотя должен быть 0, если на карте уже есть такой маркер.

Помогите пожалуйста разобраться, где я ошибся.

Может в скрипте присутствуют лишние вычисления? Если да, то как их сократить?

Последний раз редактировалось Octane, 05.10.2009 в 20:23. Причина: большое изображение
Ответить с цитированием