2011-12-26 7 views
7

私はgmap v3を使用しています。私は問題に直面している。 問題は、私は動的にマーカーを作成していて、同様の時にそのマーカーのインフォ画面を作成していることです。 マーカーのinfowindowにいくつかの内容を追加したいと思います。 しかし、情報ウィンドウのコンテンツをどのように取得できるか分かりません。 私はマーカーオブジェクトを配列に格納しており、インフォウインドウのオブジェクトも格納しています。 しかし、解決策は見つかりませんでした。マーカーのinfobubbleの内容を取得したいですか?

マーカーに基づいてinfowindowのコンテンツを取得したいと考えています。

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

。 今では、2つのマーカーが同じlatにあり、両方のマーカーの内容のinfowindowを持つ単一のマーカーを表示したいと考えています。私は単一のマーカーを作成することができましたが、情報ウィンドウにコンテンツを追加することはできません。

答えて

2

既になぜあなたは単にあなたがあなたのマーカーで行うのと同じIDでそれらを格納しない、あなたのinfoArray内のすべてのInfoWindow年代を維持している場合は?

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

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

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

(私はハッシュを使用して配列を置き換えていることに注意してください。) 今、あなたはすべてのマーカーの InfoWindowgetContent()を経由して、その内容)あなたは、マーカー自体にアクセスするのと同じ方法でアクセスすることができます。

2

は、これはかなり古いですが、私はこれに私はInfoBubbleは私が情報ウィンドウを使用しています私の例何のためにあるのかわからないんだけど、ショット

を与えるだろう考え出し。

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

私が最初にマーカーが、私はその後、マーカーがクリックされたときに、その上に情報ウィンドウを表示するには、マーカーのクリックリスナーを添付し、ウィンドウを作成します。あなたはクリックを外して表示することができましたが、私の目的のために、クリックする必要がありました。

EDIT

[OK]を私は約50倍あなたの質問を読み直していると私は、このソリューションは良いです願っています。 1つの場所にある複数のマーカーに関しては、私はその答えを持っていません。私はそれ自身の情報で複数のマーカーの答えがあると思う。これがうまくいかない場合は、jsfiddleなどのサンプルを作成する必要があります。そうでなければ、あなたが望むものが理解できません。ここでそれを確認してくださいjsfiddle

infoWindowを作成するときは、デフォルトのコンテンツを保持して初めて作成します。それで、地図自体の初期化に入れてください。マーカーを作成する際には、マーカー自体を使用して、情報ウィンドウのHTMLを表示することができます。

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

は、その後、あなたのマウスオーバーのリスナーに、あなたは一つの場所で複数のマーカーについては

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

情報ウィンドウのコンテンツを取得するためにthis.htmlを使用しています。私はプログラム的に言うと、これをキャッチして、両方の内容を1つのマーカーで作成する必要があるでしょう。

+0

しかし、それを作成した後、infobubbleのコンテンツを取得した場所。質問を丁寧に読んでください。 –

+0

@ Gaurav編集後の答えはうまくいかない、合理的なようですか? – slawekwin

+0

いいえ、私の質問は、コンテンツの価値を得る方法は、以前のinfobubbleのhtmlを意味します。 –

1

私はGoogleマップ(あなたがやろうとしていると思います)でマーカーを検索することはできないと思います。

とにかく同じポイントに2つのマーカーを作成する必要がありますか?そうでなければ、ポイント座標がキーである配列内のinfoBubblesを追跡するだけです。したがって、新しいinfoBubbleを作成する前に、すでに存在するかどうかを確認し、そうであれば新しい組み合わせのinfoBubbleに置き換えます。

ここにコードドラフトがあります。

if(infoArray[point.lat+'_'+point.lng] != undefined){ 
    tmpBubble = infoArray[point.lat+'_'+point.lng]; 
    infoBubble = createCombinedBubble(tmpBubble, infoBubble); 
} 
infoArray[point.lat+'_'+point.lng] = infoBubble; 
関連する問題