2012-02-21 33 views
0

すべて、 データマップにマーカーをいくつか作成しています。作成した地図に基づいて地図の中心を表示

var map; 
var icon0; 
var newpoints = new Array(); 

function addLoadEvent(func) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function'){ 
    window.onload = func 
} else { 
    window.onload = function() { 
     oldonload(); 
     func(); 
    } 
} 
} 

addLoadEvent(loadMap); 

function loadMap() { 
map = new GMap2(document.getElementById("map")); 
map.addControl(new GLargeMapControl()); 
map.addControl(new GMapTypeControl()); 
map.setCenter(new GLatLng(<?php echo $_SESSION['pav_event_latitude']; ?>, <?php echo $_SESSION['pav_event_longitude']; ?>), 12); 
map.setMapType(G_NORMAL_MAP); 

icon0 = new GIcon(); 
icon0.image = "http://www.google.com/mapfiles/marker.png"; 
icon0.shadow = "http://www.google.com/mapfiles/shadow50.png"; 
icon0.iconSize = new GSize(20, 34); 
icon0.shadowSize = new GSize(37, 34); 
icon0.iconAnchor = new GPoint(9, 34); 
icon0.infoWindowAnchor = new GPoint(9, 2); 
icon0.infoShadowAnchor = new GPoint(18, 25); 

addPoints(myStores); 
} 

function addPoints(points) 
{ 
for (var p = 0; p < points.length; ++p) 
{ 
    var pointData = points[p]; 
    if (pointData == null) return; 
    var point = new GLatLng(pointData.latitude, pointData.longitude); 
var marker = createMarker(point, icon0, pointData.html); 
map.addOverlay(marker); 
} 
} 

function createMarker(point, icon, popuphtml) { 
var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>"; 
var marker = new GMarker(point, icon); 
GEvent.addListener(marker, "click", function() { 
    marker.openInfoWindowHtml(popuphtml); 
}); 

function Store(lat, long, text) 
{ 
this.latitude = lat; 
this.longitude = long; 
this.html = text; 
} 

var myStores = [<?php echo $jsData;?>, null]; 

は私がやりたいそれは何で私のすべてのポイントを示しているが、私のマップの中心となることができるように作成されたすべてのポイントの平均値を取得する基本的にされています。ここでマップを表示するために私のコードです時には地図の代わりに地図を表示することがあります。誰もこれのような何かをしたことがありますか?

事前にお問い合わせいただきありがとうございます。

+0

あなたは*すべて*のポイントを表示したい場合は、なぜ、中心点の代わりにバウンディングボックスを設定していませんか? – alex

+0

@alex複数の緯度/経度の座標がある場合、どのようにしてそれらがすべてfitBoundsに収まるかどうかを確認できますか? – user1048676

答えて

2

私はあなたがこれは動作するはずgoogle.maps.Map.fitBounds()

を探していると思います:

<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"> 
    </script> 
<script type="text/javascript"> 
function addLoadEvent(func) { 
var oldonload = window.onload; 
if (typeof window.onload != 'function'){ 
    window.onload = func 
} else { 
    window.onload = function() { 
     oldonload(); 
     func(); 
    } 
} 
} 

var map, 
    infowin=new google.maps.InfoWindow({content:'moin'}); 
function loadMap() 
{ 
    map = new google.maps.Map(
    document.getElementById('map'), 
    { 
     zoom: 12, 
     mapTypeId:google.maps.MapTypeId.ROADMAP, 
     center:new google.maps.LatLng(<?php echo $_SESSION['pav_event_latitude']; ?>, 
            <?php echo $_SESSION['pav_event_longitude']; ?>) 
    }); 

    addPoints(myStores); 
} 

function addPoints(points) 
{ 
    var bounds=new google.maps.LatLngBounds(); 
    for (var p = 0; p < points.length; ++p) 
    { 
    var pointData = points[p]; 
    if (pointData == null) {map.fitBounds(bounds);return; } 
    var point = new google.maps.LatLng(pointData.latitude, pointData.longitude); 
    bounds.union(new google.maps.LatLngBounds(point)); 
    createMarker(point, pointData.html); 
    } 
    map.fitBounds(bounds); 

} 

function createMarker(point, popuphtml) 
{ 
    var popuphtml = "<div id=\"popup\">" + popuphtml + "<\/div>"; 
    var marker = new google.maps.Marker(
    { 
     position:point, 
     map:map 
    } 
); 
    google.maps.event.addListener(marker, 'click', function() { 
     infowin.setContent(popuphtml) 
     infowin.open(map,marker); 
    }); 

} 
function Store(lat, long, text) 
{ 
this.latitude = lat; 
this.longitude = long; 
this.html = text; 
} 



var myStores = [<?php echo $jsData;?>, null]; 
addLoadEvent(loadMap); 
</script> 
+0

@DrMolle複数の緯度/経度座標がある場合、どのようにしてそれらがすべてfitBoundsに収まるかどうかを確認できますか? – user1048676

+0

上記の例ではこれを行います(既存のaddPoints関数を置き換えることができます)。それは最初のLatLngBoundsをとり、与えられた点ごとにそれを延長します。結果は、与えられたすべての点が配置される矩形を定義する2点のLatLngBoundsオブジェクトになります。この結果、LatLngBoundsはfitBounds()の引数として渡されます。 –

+0

それ。しかし、loadMap()関数を更新して正しい方法でロードするにはどうすればよいですか?私はmap.setCenter(new GLatLng(<?php echo $ _SESSION ['pav_event_latitude'];?>、<?php echo $ _SESSION ['pav_event_longitude'];?>)、12)をコメントアウトしようとしましたが、地図を表示しない。 – user1048676

関連する問題