Google Maps API v3 (PHP и Javascript) - PullRequest
0 голосов
/ 28 июля 2011

Я хотел бы отображать несколько маркеров (не менее 20) на картах Google через Javascript. Данные, поступающие в массив, находятся в PHP.

После запуска кода карта 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); 
  }

Ответы [ 2 ]

0 голосов
/ 28 июля 2011

Вам не нужно зацикливать полную часть 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 голосов
/ 28 июля 2011

Ваш код немного странный.Вы count($split_data) раз включили «библиотеку карт Google», закрытый тег </style>, создали map, инициализировали функцию initialize.Зачем?Вы уверены, что count($split_data)>=20?Вы бросили это?Почему бы не разделить php-часть и js-часть?Вы можете получить все места для отображения на карте с помощью ajax или даже из необходимого массива объектов (каждый объект может содержать lat, lng, name и т. Д.) В php.Затем сделайте $j_array=json_encode($array) в php-части, чтобы преобразовать его в строку, и var places=<?php echo $j_array; ?>; в js-части, чтобы снова создать объект.И чем вам нужно работать с массивом объектов в js.Это намного проще и очевидно.Рефакторинг вашего кода.Это перепутано.

Надеюсь, это будет полезно.Извините за испорченный английский, я хочу прояснить ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...