Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Leaflet(карта) + многослойность (https://javascript.ru/forum/jquery/30487-leaflet-karta-mnogoslojjnost.html)

zlodeeev 06.08.2012 13:57

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 нету никакого метода для удаления всех точек разом и для удаления по отдельности. Внимание, фууф, вопрос: Как сделать так, чтобы при изменении тайла(перехода на другой этаж) я мог увидеть точки именно с этого этажа(т.е. удалить старые и получить новые)?


Часовой пояс GMT +3, время: 16:11.