2011-12-26 4 views
7

Estoy usando gmap v3. Estoy enfrentando un problema El problema es que estoy creando marcadores dinámicamente y en un momento similar estoy creando la ventana de información de ese marcador. Ahora quiero agregar algunos contenidos en cualquier ventana de un marcador. Pero no sé cómo puedo obtener el contenido de una ventana de información. He almacenado mis objetos marcadores en una matriz y también los objetos de infowindow. Pero no se encontró ninguna solución.quiere obtener el contenido de la infobubble de un marcador?

Quiero obtener el contenido de la ventana de información en función del marcador.

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); 
} 

Esta función se llama dentro de una función muchas veces que crean marcador en el mapa. ahora con una condición, dos marcadores tienen la misma latitud y quiero mostrar un solo marcador con infowindow del contenido de ambos marcadores. Pude crear un solo marcador pero no puedo agregar el contenido en una ventana de información.

Respuesta

2

Si ya está manteniendo todas las InfoWindow 's en su infoArray, ¿por qué no simplemente se guardan con el mismo id como lo hace con sus marcadores?

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

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

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

(Nótese que he reemplazado sus arrays con valores hash.) Ahora se puede acceder InfoWindow (y su contenido a través de getContent()) de cada marcador de la misma manera que acceda al propio marcador.

2

Esto es bastante viejo, pero pensé que le daría a este un tiro

No estoy seguro de lo que InfoBubble es para mi ejemplo estoy usando ventana de información.

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); 
    }); 
} 

que creen en primer lugar la ventana, entonces el marcador, que después coloque un detector de clics para el marcador para mostrar la ventana de información en él cuando se hace clic en el marcador. Podrías sacar el clic y simplemente mostrarlo, pero para mis propósitos, quería que tuvieran que hacer clic.

EDITAR

Ok He releído su pregunta alrededor de 50 veces y espero que esta solución es buena. En cuanto a los marcadores múltiples en un lugar, no tengo una respuesta para eso. Creo que tengo una respuesta para los marcadores múltiples con su propia información. Si esto no funciona, entonces tendrás que crear un ejemplo en jsfiddle o algo así; de lo contrario, no entiendo lo que quieres. Compruébelo aquí jsfiddle

Al crear la ventana de información, solo la crea una vez que contiene contenido predeterminado. Así que colóquelo en la inicialización del mapa en sí. Luego, al crear los marcadores, puede usar el marcador para contener el html para que se muestre la ventana de información.

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

Luego, en su oyente pasar el ratón se utilizan this.html para obtener el contenido de la ventana de información

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

En cuanto a los múltiples marcadores en un solo lugar. Tendría que decir que programáticamente tendrás que atrapar esto y solo crear un marcador con el contenido de ambos en un marcador.

+0

Pero donde ha tomado el contenido de la infobubble después de crearlo. Solo lea la pregunta cuidadosamente. –

+0

@Gaurav ¿La respuesta después de la edición no funciona, parece razonable? – slawekwin

+0

no, mi pregunta es cómo obtener el valor del contenido significa html de infobubble anterior. –

1

No creo que sea posible buscar un marcador en un google maps (que creo que es lo que estás tratando de hacer).

¿Necesita crear dos marcadores cuando de todos modos están en el mismo punto? Si no, simplemente haría un seguimiento de las infoBubbles en una matriz donde las coordenadas del punto es la clave. Entonces, antes de crear una nueva InfoBubble, verifique si ya tiene una y si ese es el caso simplemente reemplácela con una nueva InfoBubble combinada.

Aquí hay un borrador del código.

if(infoArray[point.lat+'_'+point.lng] != undefined){ 
    tmpBubble = infoArray[point.lat+'_'+point.lng]; 
    infoBubble = createCombinedBubble(tmpBubble, infoBubble); 
} 
infoArray[point.lat+'_'+point.lng] = infoBubble; 
Cuestiones relacionadas