2014-03-24 53 views
-1

我有大約10K城市,st,zip行。我需要他們的經緯度。我嘗試了幾種不同的插件,但都使用Google。我聽說雅虎有一些更慷慨的限制,但我找不到像谷歌那麼好的書。有沒有用於excel的免費批處理地理編碼器有高限制(每天至少10K的請求)?還是我只是流浪?是否有免費的Excel插件地理編碼器沒有限制?

回答

1

使用此代碼,它爲我工作,我發現它在線時,我有相同的問題 您可能需要扭轉它以符合您的具體要求,以及從Excel中提供的地址數組。

// delay between geocode requests - at the time of writing, 100 miliseconds seems to work well 
var delay = 40; 


    // ====== Create map objects ====== 
    var infowindow = new google.maps.InfoWindow(); 
    var latlng = new google.maps.LatLng(-34.397, 150.644); 
    var mapOptions = { 
    zoom: 8, 
    center: latlng, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    } 
    var geo = new google.maps.Geocoder(); 
    var map = new google.maps.Map(document.getElementById("map"), mapOptions); 
    var bounds = new google.maps.LatLngBounds(); 

    // ====== Geocoding ====== 
    function getAddress(search, next) { 
    geo.geocode({address:search}, function (results,status) 
     { 
     // If that was successful 
     if (status == google.maps.GeocoderStatus.OK) { 
      // Lets assume that the first marker is the one we want 
      var p = results[0].geometry.location; 
      var lat=p.lat(); 
      var lng=p.lng(); 
      // Output the data 
      var msg = 'address="' + search + '" lat=' +lat+ ' lng=' +lng+ '(delay='+delay+'ms)<br>'; 
      document.getElementById("messages").innerHTML += msg; 
      // Create a marker 
      createMarker(search,lat,lng); 
     } 
     // ====== Decode the error status ====== 
     else { 
      // === if we were sending the requests to fast, try this one again and increase the delay 
      if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT) { 
      nextAddress--; 
      delay++; 
      } else { 
      var reason="Code "+status; 
      var msg = 'address="' + search + '" error=' +reason+ '(delay='+delay+'ms)<br>'; 
      document.getElementById("messages").innerHTML += msg; 
      } 
     } 
     next(); 
     } 
    ); 
    } 

// ======= Function to create a marker 
function createMarker(add,lat,lng) { 
    var contentString = add; 
    var marker = new google.maps.Marker({ 
    position: new google.maps.LatLng(lat,lng), 
    map: map, 
    zIndex: Math.round(latlng.lat()*-100000)<<5 
    }); 

    google.maps.event.addListener(marker, 'click', function() { 
    infowindow.setContent(contentString); 
    infowindow.open(map,marker); 
    }); 

    bounds.extend(marker.position); 

} 

    // ======= An array of locations that we want to Geocode ======== 
    var addresses = [ 
      'General Roberto Fierro Airport Zona Hangares hangar 12 CHIHUAHUA MEXICO ', 
'DURANGO MEXICO ', 'ENSENADA MEXICO ', 'GUADALAJARA MEXICO ', 'GUAYMAS MEXICO ',  'HERMOSILLO MEXICO ', 'HUATULCO MEXICO ', 'LA PAZ MEXICO ', 'LORETO MEXICO ','LOS MOCHIS  MEXICO ', 
'MANZANILLO MEXICO ', 'MATAMOROS MEXICO ', 'MAZATLAN MEXICO ', 'MERIDA MEXICO ', 
'MEXICALI MEXICO ', 'MINATITLAN MEXICO ', 'MONCLOVA MEXICO '  ]; 

    // ======= Global variable to remind us what to do next 
    var nextAddress = 0; 

    // ======= Function to call the next Geocode operation when the reply comes back 

    function theNext() { 
    if (nextAddress < addresses.length) { 
     setTimeout('getAddress("'+addresses[nextAddress]+'",theNext)', delay); 
     nextAddress++; 
    } else { 
     // We're done. Show map bounds 
     map.fitBounds(bounds); 
    } 
    } 

    // ======= Call that function for the first time ======= 
    theNext(); 
} 
相關問題