2011-07-28 215 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

这里你去:) 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 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

嗯,好吧,我编辑了你的代码,并使其工作。我可以知道你如何显示标记生活吗?因为它会绘制标记一次,并刷新浏览器和on? –

+0

上面的代码是将你的php数组转换成json结构(通过这一行:'var locations = <?php echo json_encode($ locations)?>;'),所以在js中使用它更容易。然后你循环json,而不是在循环语句中循环你的php数组(这是标记制作/绘制并附加到你的地图,由行开始for(i = 0; i toopay

0

你的代码是有点怪异。您有count($split_data)次包括'谷歌地图库',封闭标签</style>,创建map,初始化函数initialize。为什么?你确定count($split_data)>=20?你甩了它吗?为什么不分开php-part和js-part?您可以使用ajax将所有地点显示在地图上,或者甚至可以根据需要的数组元素(每个对象可以包含lat,lng,等)。然后在php-part中将$j_array=json_encode($array)转换为字符串,并在js-part中将其转换为var places=<?php echo $j_array; ?>;以再次创建对象。而且你要在js中处理一些对象。这很容易,很明显。重构你的代码。它是混乱的。

我希望它会有帮助。对不起,英语搞砸了,我很清楚。

+0

呃坐标的数i有是动态的。它不一定是20.我硬编码它,以检查谷歌地图是否会遍历我的数组,并绘制它们显然没有。呃,我不熟悉ajax,这个代码是Google提供的示例。我只是将它集成到我的PHP数组编码中,以便绘制各种坐标。不知道我是否回答你的问题,但雅:( –