2012-03-18 13 views
6

私はPerlとJavascriptを組み合わせて、Google Maps API v3を使用してIPアドレスの緯度/経度の場所をGoogleマップにマッピングしようとしています。私は戻ってきてると、私はエラーを取得しています、マーカーである:Uncaught Error: Invalid value for property <position>: 43.073052,-89.40123プロパティの値が無効です<position>

私のコードです:

#!/usr/bin/perl -w 
    use CGI qw(:standard); 
    use CGI::Carp qw/fatalsToBrowser warningsToBrowser/; 
    use CGI::Session ('-ip_match'); 
    use SOAP::Lite; 
    use lib '/home/schreiber/perl5/lib/perl5'; 
    use JSON qw(encode_json); 

    $session = CGI::Session->load(); 
    $q = new CGI; 
    my $soap = SOAP::Lite 
     -> uri('http://v1.fraudlabs.com/') 
     -> proxy('http://v1.fraudlabs.com/ip2locationwebservice.asmx') 
     -> on_action(sub { join "/", "http://v1.fraudlabs.com", $_[1] }); 

    $license = "<removed>"; 

    #if($session->is_expired) { 
    # print $q->header(-cache_control=>"no-cache, no-store, must-revalidate"); 
    # print "Your session has expired. Please login again."; 
    # print "<br/><a href=\"../login.html\">Login</a>"; 
    #} elsif($session->is_empty) { 
    # print $q->header(-cache_control=>"no-cache, no-store, must-revalidate"); 
    # print "You have not logged in"; 
    #} else { 
     print $q->header(-cache_control=>"no-cache, no-store, must-revalidate"); 

     open (IPF, "/home/access_log"); 
     @incomingarray=<IPF>; 

     $i = 0; 
     foreach $pair(@incomingarray) { 
     ($ip, $rest) = split(/ - - /, $pair); 
     $incomingarray[$i] = $ip; 

     chomp $ip; 
     $i++; 
     } 

     close (IPF); 

     my %hash = map { $_, 1 } @incomingarray; 
     my @distinctIP = keys %hash; 

     $j = 0; 
     my @iplocation; 
     foreach (@distinctIP) { 
     my $method = SOAP::Data->name('IP2Location')->attr({xmlns => 
     'http://v1.fraudlabs.com/' }); 

     my @params = SOAP::Data->name('inputdata' => \SOAP::Data->value(
     SOAP::Data->name(IP=>$_), 
     SOAP::Data->name(LICENSE=>$license) 
     )); 

     my $result = $soap->call($method => @params); 
     $lat = $result->valueof('//LATITUDE'); 
     $long = $result->valueof('//LONGITUDE'); 

     push(@iplocation, "$lat,$long"); 
     } 

     my $json = encode_json(\@iplocation); 

    # print "Content-Type: text/html\n\n"; 
     print '<html> 
     <head> 
     <script type="text/javascript"> 
      function initialize() { 
      var myOptions = { 
       zoom: 8, 
       center: new google.maps.LatLng(44.49, -91.30), 
       mapTypeId: google.maps.MapTypeId.ROADMAP 
      }; 

      var map = new google.maps.Map(document.getElementById(\'map_canvas\'), 
       myOptions); 

      var coord_data = new Array(); 
      coord_data = '.$json.'; 

      var marker; 
      for (var i = 1; i < coord_data.length; i++) { 
       console.log(coord_data[i]); 
     var marker = new google.maps.Marker({ 
     position: new google.maps.LatLng(coord_data[i]), 
     map:map 
     }); 

       marker.setMap(map); 
      } 
      } 

      function loadScript() { 
      var script = document.createElement(\'script\'); 
      script.type = \'text/javascript\'; 
      script.src = \'//maps.googleapis.com/maps/api/js?sensor=false&callback=initialize\'; 
      document.body.appendChild(script); 
      } 

      window.onload = loadScript; 
     </script> 
     </head> 

     <body> 
     <div id="map_canvas" style="width: 100%; height: 100%"></div> 
     </body> 
     </html> 
     '; 
    #} 

どのような援助をいただければ幸いです。

答えて

10

問題は、あなたがここに位置を割り当てるときということです -

marker = new google.maps.Marker({ 
    position:coord_data[i], 
    map:map 
}); 

- あなたはそれを生のJSONオブジェクトを与えるが、それはgoogle.maps.LatLngオブジェクトを期待しています。あなたはthis--

position: new google.maps.LatLng(coord_data[i].lon,coord_data[i].lat) 

のようにそれを割り当てることになるでしょうGmapsのAPIの使用方法のいくつかの良いサンプルにもここを参照してください: https://developers.google.com/maps/documentation/javascript/v2/examples/

+0

ありがとうございました。それはもはや私にエラーを与えていませんが、マップにマーカーを追加していません。何か案は? – Kruug

+0

私は今あなたの構文をチェックするだけの問題だと思う(私は問題がちょうどJavascriptの構文であると思う)。私はPerlに慣れていないので、何が起こっているのか正確に言うことはできません。テストとして、あなたのHTMLをテキストファイルにコピーし、FirebugでテストしてChromeにロードしました。これは2行のコードを変更した後、マーカーと一緒に働いた: coord_data = [{lat:44.49、lng:-91}]; 位置:新しいgoogle.maps.LatLng(coord_data [i] .lat、coord_data [i] .lng)、 – McGarnagle

関連する問題