1
ここで何か助けを得ることを望んでいます。私はデータベース上の位置を持っていて、マップ上にマーカーをうまくプロットする配列に配置することに成功しました。唯一の欠点は、私は市場のinfowindowの外観をカスタマイズしたいので、私はinfoboxを使用しています。Google Map API Infoboxとforループ
私の配列から変数をエコーすると、最後の結果が各infoboxにエコーされ、imは完全にこの1つに困惑します。
誰かが私のコードを見て、どこが間違っているのか、正しい方向に向いているのを見てください。ここ
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/tags/infobox/1.1.9/src/infobox.js"></script>
<script type="text/javascript" language="javascript">
// -- Location API -- //
infos = [];
function initialize() {
var myOptions = {
zoom: 3,
center: new google.maps.LatLng(54.57206165565852, 12.48046875),
mapTypeControl: false,
mapTypeId: google.maps.MapTypeId.TERRAIN
}
/* now inside your initialise function */
infowindow = new google.maps.InfoWindow({
content: "holding..."
});
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
setMarkers(map, beaches);
}
/**
* Data for the markers consisting of a name, a LatLng and a zIndex for
* the order in which these markers should display on top of each
* other.
*/
var beaches = [
[1, 'Peterhead', 57.487044, -1.800417, 1, 'Building 1', 'Glenbank'],
[2, 'Cowdenbeath', 56.09946, -3.35909, 1, 'Building 22', 'The Paragon Works Station'],
[3, 'Norfolk', 52.595971, 1.728609, 1, 'Building 3', '39 Southgates Road']
];
function setMarkers(map, locations) {
// Add markers to the map
// Marker sizes are expressed as a Size of X,Y
// where the origin of the image (0,0) is located
// in the top left of the image.
// Origins, anchor positions and coordinates of the marker
// increase in the X direction to the right and in
// the Y direction down.
var image = new google.maps.MarkerImage('http://stlab.co.uk/group/assets/img/icons/map-pin.png',
// This marker is 20 pixels wide by 32 pixels tall.
new google.maps.Size(15, 22),
// The origin for this image is 0,0.
new google.maps.Point(0,0),
// The anchor for this image is the base of the flagpole at 0,32.
new google.maps.Point(5, 22));
for (var i = 0; i < locations.length; i++) {
var beach = locations[i];
var html = '<div class="phoney">'+beach[4]+'<br>'+beach[5]+'</div>'
var myLatLng = new google.maps.LatLng(beach[2], beach[3]);
var marker = new google.maps.Marker({
position: myLatLng,
map: map,
icon: image,
content:html,
title: beach[1],
zIndex: beach[4]
});
var boxText = document.createElement("div");
boxText.style.cssText = "border: 1px solid black; margin-top: 8px; background: yellow; padding: 5px;";
boxText.innerHTML = beach[0]+"<br>"+beach[6];
var myOptions = {
content: boxText,
disableAutoPan: false,
maxWidth: 0,
pixelOffset: new google.maps.Size(-140, 0),
zIndex: null,
boxStyle: {
background: "url('tipbox.gif') no-repeat",
opacity: 0.75,
width: "280px"
},
closeBoxMargin: "10px 2px 2px 2px",
closeBoxURL: "http://www.google.com/intl/en_us/mapfiles/close.gif",
infoBoxClearance: new google.maps.Size(1, 1),
isHidden: false,
pane: "floatPane",
enableEventPropagation: false
};
google.maps.event.addListener(marker, "click", function (e) {
ib.open(map, this);
});
var ib = new InfoBox(myOptions);
}
}
</script>
Ramesh K.ありがとうございます。でも、複数のInfoBoxを開くたびに、すべて開いたままになります。 – ngplayground
setMarkers()メソッド内でInfoBox()を初期化するため、新しいインスタンスを作成するたびに、グローバルなInfoBox()変数を作成し、そのたびに参照します。 –
これを試してもうまく動作しませんでした – ngplayground