Отображение нескольких маркеров карты в Google Maps API - PullRequest
1 голос
/ 11 марта 2012

работает с некоторым кодом perl в файле .cgi, который проходит по хеш-списку IP-адресов, затем запускает каждый IP-адрес через веб-сервис, который возвращает эту широту и долготу IP-адреса, затем необходимо отобразить каждый IPадрес в качестве маркера на карте Google.На данный момент он проходит через хэш-лист и печатает координаты каждого IP-адреса.Что я не могу понять, так это как отобразить более одного маркера на карте Google.В настоящее время я просто тестирую это путем жесткого кодирования значений в переменные $ latitude и $ longitude.Я думаю, что в javascript должен быть какой-то цикл, который будет проходить и присваивать каждую координату, но я не знаю, как к этому приблизиться.

Обновление: я добавил код изсначала ответьте и получите список, успешно печатающий за пределами цикла.Проблема у меня сейчас в том, что карта Google больше не загружается.Я сузил проблему до javascript, где переменной широты и долготы присвоено ее значение.

unless ($result->fault) {

# Print out the results one by one
my $latitude = "LATITUDE = " . $result->valueof('//LATITUDE') . "\n";
my $longitude = "LONGITUDE = " . $result->valueof('//LONGITUDE') . "\n";

#print "MESSAGE = " . $result->valueof('//MESSAGE') . "\n";


$lats .= $latitude . ',';
$lons .= $longitude . ',';


} else {

print "IP2Location Web Service Failed!\n";
print join ', ',
$result->faultcode,
$result->faultstring,
$result->faultdetail;

}
}

chop $lats;
chop $lons;

#printing here to test if the variable is making it out of the loop
print $lats ;
print $lons ;

print <<ENDHTML;
<html>
  <head>
<title>IP Lookup Map</title>
<meta name="viewport"
    content="width=device-width, initial-scale=1.0, user-scalable=no">
<meta charset="UTF-8">
<style type="text/css">
  html, body, #map_canvas {
    margin: 0;
    padding: 0;
    height: 90%;
    width: 90%;
  }
</style>
<script type="text/javascript"
    src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript">
//If I comment out the following variables the map will load, not sure what the problem is
    var latitudes = "$lats".split(",");
    var longitudes = "$lons".split(",");

  var map;
  function initialize() {
    var myOptions = {
      zoom: 7,
      center: new google.maps.LatLng(44, -90),
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map_canvas'),
        myOptions);

    // Creating a marker and positioning it on the map
    for(var i = 0; i < latitudes.length; i++){
        var latitude = latitudes[i];
        var longitude = longitudes[i];
    // Creating a marker and positioning it on the map
        var marker = new google.maps.Marker({
        position: new google.maps.LatLng(latitude,longitude),
        map: map
    });
    }
  }

  google.maps.event.addDomListener(window, 'load', initialize);
</script>

Ответы [ 2 ]

2 голосов
/ 11 марта 2012

Очевидно, что вам нужно сохранить все широты и долготы, а не просто распечатать их.Я бы использовал 2 глобальные переменные, кроме вашей, если ($ result) {

my $lats = '';
my $lons = '';
....
$lats .= $latitude . ',';
$lons .= $longitude . ',';

(вам может понадобиться chop ($ lats); chop ($ lons) после цикла, чтобы удалить последнюю запятую)в вашем разделе JavaScript:

// create two arrays from that lats and lons string using split()
var latitudes = "$lats".split(',');
var longitudes = "$lons".split(',');
.....
// create map code
....
for(var i = 0; i < latitudes.lenght; i++){
    var latitude = latitudes[i];
    var longitude = longitudes[i];
   // Creating a marker and positioning it on the map
   var marker = new google.maps.Marker({
       position: new google.maps.LatLng(latitude,longitude),
       map: map
   });
}
0 голосов
/ 11 марта 2012

Исправлено, и теперь все работает. Проблема заключалась в том, что переменные $ latitude и $ longitude, где все еще присваивалась куча лишнего текста, были не нужны. Теперь ему просто присвоено значение.

my $latitude = $result->valueof('//LATITUDE');
my $longitude = $result->valueof('//LONGITUDE');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...