Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.08.2012, 13:57
Аватар для zlodeeev
Кандидат Javascript-наук
Отправить личное сообщение для zlodeeev Посмотреть профиль Найти все сообщения от zlodeeev
 
Регистрация: 11.07.2012
Сообщений: 113

Leaflet(карта) + многослойность
Сделал карту помещений с помощью leaflet.js, довольно приятная в работе вещь, но столкнулся с некоторыми трудностями при попытке создания своих "плюшек". Сейчас же хочу просить помощи на счёт создания "этажности".

Т.е. есть тайлы каждого этажа в отдельности, на каждом этаже есть точки(маркеры). Так вот нужно каким-либо образом сделать так, чтобы с изменением тайлов - менялись и точки.

Тайлы меняю через Control'ы вот так:

var mapAttribution = 'Attribiution',
mapOptions = {attribution: mapAttribution,noWrap: true,continuousWorld:false},
					floor1 = 'map/1/{z}/{x}/{y}.jpg';
					floor2 = 'map/2/{z}/{x}/{y}.jpg';
					floor3= 'map/3/{z}/{x}/{y}.jpg';
					floor4 = 'map/4/{z}/{x}/{y}.jpg';
					floor5 = 'map/5/{z}/{x}/{y}.jpg';
					floor6 = 'map/6/{z}/{x}/{y}.jpg';

			var f1 = new L.TileLayer(floor1, mapOptions),
				f2 = new L.TileLayer(floor2, mapOptions),
				f3 = new L.TileLayer(floor3, mapOptions),
				f4 = new L.TileLayer(floor4, mapOptions),
				f5 = new L.TileLayer(floor5, mapOptions);
				f6 = new L.TileLayer(floor6, mapOptions);
			
			// ADD MAP
			var map = new L.Map('map', {
				dragging:false, 
				zoomControl:false,
				touchZoom: false,
				scrollWheelZoom: false,
				doubleClickZoom:false,
				layers: [f1],
			}).setView([0, 0], 2);

			// LAYER CONTROLS
			var baseMaps = {
				"Первый этаж": f1,
				"Второй этаж": f2,
				"Третий этаж": f3,
				"Четвертый этаж": f4,
				"Пятый этаж": f5,
				"Шестой этаж": f6
			};

			layersControl = new L.Control.Layers(baseMaps);
			map.addControl(layersControl);


У карты появляется control, который имеет в себе чекбоксы, но при этом у них не меняется атрибут checked, т.е. при клике - тайл меняется, точка чекбокса стоит уже на другом элементе, но checked остается всё равно у нулевого элемента. Поэтому через
$('input[name=***][checked]')
получаем всегда первый элемент, несмотря на то, что тайлы сменяются.
Решил отлавливать элемент повыше инпута, потому что каждый инпут пихался в label,
$('labelClass').click(...alert ($(this).index())...)

Но и это не сильно помогло, потому что она срабатывала постоянно - два раза, причем так будто я ещё раз кликнул на этот же label. Но и это ещё не всё, точки то появляются, но не пропадают старые вот это основной вопрос.

В API от leaflet нету никакого метода для удаления всех точек разом и для удаления по отдельности. Внимание, фууф, вопрос: Как сделать так, чтобы при изменении тайла(перехода на другой этаж) я мог увидеть точки именно с этого этажа(т.е. удалить старые и получить новые)?

Последний раз редактировалось zlodeeev, 07.08.2012 в 15:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск