2011-12-26 13 views
7

Używam programu gmap v3. Mam problem. Problem polega na tym, że tworzę dynamiczny znacznik iw tym samym czasie tworzę infomatindow tego znacznika. Teraz chcę dodać trochę treści do każdej infowindow znacznika. Ale nie wiem, jak mogę uzyskać zawartość infomatu. Mam zapisane obiekty znaczników w tablicy oraz obiekty infowindow. Ale nie znaleziono żadnego rozwiązania.chcesz uzyskać zawartość infobubble znacznika?

Chcę uzyskać zawartość infowindow na podstawie znacznika.

EDIT:

var markerArray = new Array(); 
var infoArray = new Array(); 

function placemarker(point,id, contents){ 
var marker = new google.maps.Marker({ 
    icon: image, 
    position: point, 
    map: map, 
    title: name 
}); 

markerArray[id] = marker; 

var infoBubble = new InfoBubble(); 
var content = contents; 
infoBubble.setContent(content); 
google.maps.event.addListener(marker,"mouseover",function(event){ 
    for(var i=0; i < infoArray.length ; i++) 
    infoArray[i].close(); 
    infoBubble.open(map,marker); 
}); 
infoArray.push(infoBubble); 
} 

Ta funkcja jest wywoływana w funkcji czasu, które tworzą wiele znacznik na mapie. teraz pod warunkiem, że dwa markery mają taką samą długość i chcę pokazać pojedynczy znacznik z informacją o zawartości obu znaczników. Udało mi się utworzyć pojedynczy znacznik, ale nie mogę dołączyć treści do okna informacyjnego.

Odpowiedz

2

Jeśli już zachowaniu wszystkich InfoWindow w twoich infoArray, dlaczego nie można po prostu zapisać je z tym samym identyfikatorem, jak zrobić z markerów?

var markers = {}; 
var infoWindows = {}; 

function placemarker(point, id, contents) { 
    var marker = ... 
    ... 
    markers[id] = marker; 

    var infoWindow = ... 
    ... 
    infoWindows[id] = infoWindow; 
} 

(Zauważ, że zastąpiły swoje tablice z mieszań.) Teraz masz dostęp do każdego znacznika w InfoWindow (i jego zawartości poprzez getContent()) w taki sam sposób dostępu sam znacznik.

2

To jest dość stary, ale zorientowaliśmy dałbym ten strzał

Nie jestem pewien, co InfoBubble jest na moim przykładzie używam InfoWindow.

function createMarker(objPoint) 
{ 
    objPoint = new google.maps.LatLng(strLat, strLng); 

    strFromHtml = 'Your HTML'; 

    //creates the window with the options 
    objInfoWindow = new google.maps.InfoWindow(
    { 
     content: strToHtml, 
     maxWidth: 250, 
     zIndex: -1 
    }); 

    var markerOptions = 
    { 
     position: objPoint, 
     map: objMap 
    } 

    objMarker = new google.maps.Marker(markerOptions); 

    //if the marker is clicked open the window 
    google.maps.event.addListener(objMarker, "click", function() 
    { 
     objInfoWindow.open(objMap, objMarker); 
    }); 
} 

ja najpierw utworzyć okno, wówczas znacznik, ja potem dołączyć do słuchacza kliknij znacznik, aby wyświetlić infowindow na nim, gdy znacznik jest kliknięty. Możesz kliknąć i po prostu wyświetlić, ale dla moich celów chciałem, żeby to musieli kliknąć.

EDIT

Ok ja ponownie przeczytać pytanie około 50 razy i mam nadzieję, że to rozwiązanie jest dobre. Jeśli chodzi o wiele znaczników w jednym miejscu, nie mam na to odpowiedzi. Myślę, że mam odpowiedź na wiele znaczników z własnymi informacjami. Jeśli to nie zadziała, będziesz musiał utworzyć przykład w jsfiddle lub coś innego, czego nie rozumiem, czego chcesz. Sprawdź to tutaj jsfiddle

Podczas tworzenia okna informacyjnego tworzysz je tylko raz, trzymając domyślną treść. Więc umieść to w inicjalizacji samej mapy. Następnie przy tworzeniu znaczników można użyć samego znacznika do umieszczenia w nim html do wyświetlenia infomatu.

var markerOptions = 
{ 
    position: objPoint, 
    map: objMap, 
    html: strHtml//added to make the marker object store the content of the infowindow 
} 

Następnie w mouseover słuchacza użyć this.html aby uzyskać zawartość dla infowindow

google.maps.event.addListener(objMarker, "mouseover", function() 
{ 
    objInfoWindow.setContent(this.html); 
    objInfoWindow.open(objMap, this); 
}); 

Jak dla wielu markerów w jednym miejscu. Musiałbym powiedzieć programowo, że musisz to złapać i stworzyć tylko jeden znacznik z zawartością obu w jednym znaczniku.

+0

Ale skąd wziął się zawartość infobubble po jej utworzeniu. Przeczytaj uważnie to pytanie. –

+0

@Gaurav Czy odpowiedź po edycji nie działa, wydaje się uzasadniona? – slawekwin

+0

nie, moje pytanie brzmi, jak uzyskać wartość zawartości oznacza html poprzedniego infobubble. –

1

Nie sądzę, że możliwe jest wyszukanie markera na mapie google (co, jak myślę, jest tym, co próbujesz zrobić).

Czy musisz utworzyć dwa znaczniki, jeśli mimo to są w tym samym punkcie? Jeśli nie, po prostu śledziłbym infoBubbles w tablicy, w której współrzędne punktu są kluczem. Tak więc przed utworzeniem nowego infoBubble sprawdzasz, czy już go masz, a jeśli tak, to po prostu zamień go na nowy połączony infoBubble.

Oto szkic kodu.

if(infoArray[point.lat+'_'+point.lng] != undefined){ 
    tmpBubble = infoArray[point.lat+'_'+point.lng]; 
    infoBubble = createCombinedBubble(tmpBubble, infoBubble); 
} 
infoArray[point.lat+'_'+point.lng] = infoBubble; 
Powiązane problemy