2009-06-04 3 views
1

J'utilise Google Maps API V3. Je migre Mon site API GMap V2 -> V3. mais a été copié car j'ai utilisé la méthode clearOverlays() pour supprimer un objet existant à la fois dans le V2, et il a supprimé un objet dans ce qui avait été aboli dans V3 individuellement.Est-ce que c'est OK? clearOverlays() dans GMap API V2 à Google Maps API V3?

V2

map.clearOverlays(); 

V3

map.set_visible(false); 
popup.close(); 

est-il OK? ou d'autres solutions?

+0

Il suffit de regarder cet exemple qui est dans les documents Google: http://code.google.com/apis/maps/documentation/javascript/examples/overlay-remove.html –

+0

J'ai écrit un blog rapide à ce sujet et mis quelques exemples de code aussi bien http://www.joelee.me.uk/2010/07/27/clearoverlays-in-google-maps-v3-api/ – thiswayup

Répondre

7

Je n'ai rien trouvé dans le V3 reference qui effacera explicitement les superpositions créées sur la carte et je n'ai pas pu trouver d'échantillons de code qui le font non plus.

Je pense qu'il est important de souligner que l'API V3 est une version très précoce du développeur et ne contient qu'un ensemble de fonctionnalités très basique. Il est tout à fait possible qu'ils n'aient tout simplement pas encore eu cette fonctionnalité. Si vous travaillez sur un système live, je vous suggère de rester avec V2 jusqu'à ce que V3 soit plus mature.

Il y a un poste sur le groupe de développeur qui pose la question sur la façon dont l'API doit être utilisé avec une réponse très utile du chef de produit V3:

Misconception about v3 Options

EDIT:

OK , il semble que cette fonctionnalité manque délibérément à l'API afin de la garder légère. Vous devez suivre vous-même vos objets de superposition et appeler:

object.set_map(null); 

pour les supprimer.

+0

Merci d'avoir répondu! mais j'ai essayé, je ne peux pas les enlever – freddiefujiwara

5

Voici ce que je fais:

créer un tableau vide littéral, pousser les marqueurs que vous les faites, puis les expulser au besoin

var eviction_list = []; 

function evictMarkers() { 

    // clear all markers 

    $(eviction_list).each(function() { 
     this.set_map(null); 
    }); 

    // reset the eviction array 
    eviction_list = []; 
} 

//in function adding markers 
...... 
marker = new google.maps.Marker({ 
    position: results[0].geometry.location, 
    map: map, 
    title: elem.title 
}); 
eviction_list.push(marker); 
...... 

//to clear all markers 
evictMarkers(); 
+0

J'utilise une approche similaire sur un projet de mapping, et ça marche bien. Le seul changement majeur consiste à utiliser setMap() à la place de set_map(). –

+0

si vous n'utilisez pas jquery: 'markers.forEach (function (item) {item.setMap (null)})' –

1

Le problème est que setMap(null) peut être lent lorsque vous avez beaucoup de marqueurs.

Questions connexes