2011-07-28 23 views
0

Javascriptを使用してGoogleマップに複数のマーカー(少なくとも20個まで)を表示したいと思います。配列に入ってくるデータはPHPで書かれています。Google Maps API v3(PHPとJavascript)

コードを実行すると、Googleマップは配列の最後の座標のみをプロットします。あなたは私のことを啓発できますか? (私は初心者だとして、これは厄介いえあれば申し訳ありませんが事前に任意の助けに感謝します。)以下はコードです:

$link ="http://network-tools.com/default.asp?prog=trace&host="."$ip_address"; 
$link_traceroute ="http://api.ipinfodb.com/v3/ip-city/?key=a15e8640c34837e4d402df55d7fd5e059e50d0d407d285a7a3b2ccbf85e1a234&ip="; 

$response = file_get_contents("$link", false, $context); 

$pieces_traceroute = strchr ($response, "$ip_address is from"); 
$split_pieces_traceroute = str_replace("Trace","$$$",$pieces_traceroute); 
$better_pieces_traceroute =(explode("$$$",$split_pieces_traceroute)); 

$raw_data = strip_tags($better_pieces_traceroute[1]); 
$split_data = (explode(" ",$raw_data)); 

for ($i=0; $i<count($split_data);$i++) 
{ 

$checker= valid_ip($split_data[$i]); 

    if ($checker != null){ 
    $response_traceroute = file_get_contents("$link_traceroute"."$split_data[$i]", false, $context); 
    $pieces_traceroute = (explode(";",$response_traceroute)); 
    $Cord1 = $pieces_traceroute[8]; 
    $Cord2 = $pieces_traceroute[9]; 
    echo $Cord1.nl2br("\n"); 
    echo $Cord2.nl2br("\n"); 
    ?> 

    </style> 
<script type="text/javascript" 
    src="http://maps.googleapis.com/maps/api/js?sensor=true"> 
</script> 
<script type="text/javascript"> 
    function initialize() { 
    var myLatlng = new google.maps.LatLng(<?php echo $Cord1;?>, <?php echo $Cord2;?>); 
    var myOptions = { 
    zoom: 4, 
    center: myLatlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP, 
    } 
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

var marker = new google.maps.Marker({ 
     position: myLatlng, 
     title:"Hello World!" 
    }); 

    // To add the marker to the map, call setMap(); 
    marker.setMap(map); 
    } 
+0

アレイをダンプ/プリントアウトできますか? – toopay

+0

ここにu行く:) Ermは以前に要求されたように私の結果は私のコーディネートの反響時です。彼らは変数$ Cord1と$ Cord2から来ました。 38.9048 -77.0354 38.9048 -77.0354 38.9048 -77.0354 44.9631 -93.4943 38.9048 -77.0354 38.9048 -77.0354 38.9048 -77.0354 38.9048 -77.0354 38.9048 -77.0354 39.9 116.413 39.9 116.413 39.9 116.413 39.9 116.413 29 120 –

答えて

0

完全なjs部分(<script>initializeを含む)をループする必要はありません。そのために最後の価値しか得られません。代わりにこのようなものを試してみてください...

// Assume we have $locations variable which hold array data 
<script> 
function initialize() { 
    var centerMap = <?php echo json_encode($locations[0]) ?>; 
    var locations = <?php echo json_encode($locations) ?>; 
    var centerLatlng = new google.maps.LatLng(centerMap[0], centerMap[1]); 
    var map = new google.maps.Map(document.getElementById("map_canvas"), { 
     zoom: 4, 
     center: centerLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
    }); 

    var marker, i; 

    for (i = 0; i < locations.length; i++) { 
     marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
      map: map 
     }); 
    } 
} 
</script> 
+0

Erm、ok私はurコードを編集してそれを働かせました。私はマーカーのライブを表示する方法を知っていますか? on? –

+0

上記のコードは、php配列をjson構造体に転送しています(この行で 'var locations = <?php echo json_encode($ locations)?>;')、jsで簡単に処理できます。その後、ループステートメント(作成されたマーカー/プロットであって、それらをあなたのマップにアタッチして 'for(i = 0; i toopay

0

あなたのコードは少し奇妙です。あなたはcount($split_data)回 'Googleマップライブラリ'、閉じたタグ</style>map、初期化された関数initializeを作成しました。どうして? count($split_data)>=20は本当ですか?それを投げ捨てましたか?なぜPHP部分とjs部分を分けていないのですか?あなたはajaxを使って地図上に表示されるすべての場所を得ることができます。または、必要な配列のオブジェクトからでも(各オブジェクトはlat,lngnameなどを含むことができます)。次に、PHPパーツの$j_array=json_encode($array)を文字列に変換し、js-partのvar places=<?php echo $j_array; ?>;をオブジェクトにし直します。そして、あなたはjsのオブジェクトの配列で作業するよりも。はるかに簡単で明白です。コードをリファクタリングしてください。それは混乱している。

私はそれが役に立つと願っています。英語を混乱させて申し訳ありませんが、私は明確にしています。

+0

私が持っている座標の数動的です。それは20になる必要はありません。私はそれをコード化して、Google Mapsが私の配列を横断し、明らかにそれがなかったかどうかをチェックするようにしました。 Erm、私はajaxに慣れていません。このコードはGoogleが提供するサンプルです。私はそれをさまざまな座標をプロットするように私のPHP配列のコーディングに統合しました。あなたの質問に答えるかどうかはわかりませんでしたが、( –