处理循环遍历IP地址哈希列表的.cgi文件中的某些perl代码,然后通过返回IP地址的经度和纬度的Web服务运行每个IP地址,然后需要显示每个IP地址作为谷歌地图上的标记。截至目前,我已经通过哈希表运行并打印每个IP地址的坐标。我无法弄清楚如何在谷歌地图上显示多个地图标记。我目前只是通过将值硬编码到$ latitude和$ longitude变量来测试它。我认为需要在javascript中存在某种循环,它将贯穿并分配每个坐标,但我不知道如何处理它。
更新:我已添加第一个答案的代码,并在循环外成功打印列表。我现在遇到的问题是谷歌地图将不再加载。我已将问题缩小到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>
答案 0 :(得分:2)
显然你需要保存所有纬度和经度,而不是仅仅打印它们。除了($ result){
之外,我会使用2个全局变量my $lats = '';
my $lons = '';
....
$lats .= $latitude . ',';
$lons .= $longitude . ',';
(你可能需要一个印章($ lats);在循环之后切断($ 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
});
}
答案 1 :(得分:0)
修正了它,现在一切正常。问题是$ latitude和$ longitude变量仍然被分配了一堆不需要的额外文本。现在它只是分配了值。
my $latitude = $result->valueof('//LATITUDE');
my $longitude = $result->valueof('//LONGITUDE');