2011-12-29 3 views
0

мне нужна ваша помощь в следующем:Фильтрация Маркеры Google Maps API V3

В настоящее время у меня есть набор данных в электронной таблице Google Maps. Мне нужно отфильтровать эти данные. Например, категория и тип.

Они собраны с помощью JSON:

/** 
* Called when JSON is loaded. Creates sidebar if param_sideBar is true. 
* Sorts rows if param_rankColumn is valid column. Iterates through worksheet rows, 
* creating marker and sidebar entries for each row. 
* @param {JSON} json Worksheet feed 
*/  
function cm_loadMapJSON(json) { 

    var bounds = new google.maps.LatLngBounds(); 

    for (var i = 0; i < json.feed.entry.length; i++) { 
    var entry = json.feed.entry[i]; 
    if(entry["gsx$" + param_latColumn]) { 
     var lat = parseFloat(entry["gsx$" + param_latColumn].$t); 
     var lng = parseFloat(entry["gsx$" + param_lngColumn].$t); 
     var point = new google.maps.LatLng(lat,lng); 
     var html = "<div class='infoscherm' style='font-size:12px'>"; 
     html += "<h2>" + entry["gsx$"+param_titleColumn].$t 
       + "</h2>"; 
     var label = entry["gsx$"+param_titleColumn].$t; 
     if(entry["gsx$" + param_screenCategory]) { 
     html += "<h3>" + "Screen Category/Purpose: " + "</h3>" + "<p>" + entry["gsx$"+param_screenCategory].$t + "</p>"; 
     } 
     var screentype = entry["gsx$"+param_screenType].$t; 
     if(entry["gsx$" + param_screenType]) { 
     html += "<h3>" + "Screen Type: " + "</h3>" + "<p>" + entry["gsx$"+param_screenType].$t + "</p>"; 
     } 
     if(entry["gsx$" + param_publicSpace]) { 
     html += "<h3>" + "Type of Public Space: " + "</h3>" + "<p>" + entry["gsx$"+param_publicSpace].$t + "</p>"; 
     } 
     var space = entry["gsx$"+param_publicSpace].$t; 
     if(entry["gsx$" + param_screenInteraction]) { 
     html += "<h3>" + "Type of interaction: " + "</h3>" + "<p>" + entry["gsx$"+param_screenInteraction].$t + "</p>"; 
     } 
     if(entry["gsx$" + param_descriptionColumn]) { 
     html += "<h3>" + "Description: " + "</h3>" + "<p>" + entry["gsx$"+param_descriptionColumn].$t + "</p>"; 
     } 
     if(entry["gsx$" + param_screenAddress]) { 
     html += "<h3>" + "Screen Location: " + "</h3>" + "<p>" + entry["gsx$"+param_screenAddress].$t + "</p>"; 
     } 
     html += "</div>"; 

     // create the marker 
     var marker = cm_createMarker(kaart,point,label,html,screentype,space); 
     // cm_map.addOverlay(marker); 
     cm_mapMarkers.push(marker); 
     cm_mapHTMLS.push(html); 
     bounds.extend(point); 
    } 
    } 

    kaart.fitBounds(bounds); 
    kaart.setCenter(bounds.getCenter()); 
} 

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

Эта функция удаляет все маркеры с карты. Я думал о модификации этой функции, чтобы создать хороший рабочий динамический фильтр для маркеров. Но я не могу понять это. Любая помощь? Или идеи, возможно, даже другие лучшие способы работы?

function clearOverlays() { 
    if (cm_mapMarkers) { 
    for (i in cm_mapMarkers) { 
     cm_mapMarkers[i].setMap(null); 
    } 
    } 
} 

Thanx Заранее

ответ

0

Вам нужно либо параллельные массивы или массив ключ-значение, таких как:

cm_mapMarkers.push({ point: marker, category: 'something' }); 

А потом

function showSome(categoryName) { 
    if (cm_mapMarkers) { 
    for (var i = 0, marker; marker = cm_mapMarkers[++i];) { 
     if(marker.category == categoryName){ 
     // do something with this marker 
     }else{ 
     // do or do not with others. 
     } 
    } 
    } 
} 
+0

Я не уверен, что вы имеете в виду , Если не ошибаюсь, маркеры и их значения в настоящее время находятся в массиве. Что мне нужно, например, когда флажок с одной из категорий активен, только эти маркеры категорий показаны. когда проверяется 2 категории, отображаются эти маркеры категории 2. Но кроме категории есть также screentype, это также будет добавлено. Например, 2 категории проверены, проверен ли creentype led. то должны отображаться только эти маркеры. Прошу прощения за непонимание вашего ответа. Кодирование не является моим самым сильным моментом :( – Emrulez

+0

Вам нужно преобразовать свой «массив маркеров» в «массив элементов, содержащих информацию», где информация - это 3 свойства: «сам маркер», «категория» и «screentype» в соответствии с вашим комментарием. –

+0

Я сделал следующее: я заменил cm_mapMarkers.push (маркер), с cm_mapMarkers.push ({point: marker, space: 'Park'}) и добавил функцию showSome к коду. Я запускаю fucntion в событии click но ничего не происходит :( – Emrulez

Смежные вопросы