1

以下代碼異步工作。我只設置了將城市,州轉化爲經緯度。然後該值被警告。Google的GeoCode將城市狀態轉換爲經度經度

我該如何編寫一個實際返回這些值的函數?

var map; 
var geocoder; 

function initialize() { 

    geocoder = new GClientGeocoder(); 

} 

// addAddressToMap() is called when the geocoder returns an 
// answer. It adds a marker to the map with an open info window 
// showing the nicely formatted version of the address and the country code. 
function addAddressToMap(response) { 
    //map.clearOverlays(); 
    if (!response || response.Status.code != 200) { 
    alert("Sorry, we were unable to geocode that address"); 
    } else { 
    place = response.Placemark[0]; 

    latitude = place.Point.coordinates[0]; 
    longitude = place.Point.coordinates[1]; 

    alert("Latitude " + latitude + " Longitude" + longitude); 

    } 
} 

function showLocation(address) { 
    geocoder.getLocations(address, addAddressToMap); 
} 

回答

1

從回調中返回這些值將不會執行任何操作。如果你想在某個地方存儲這些值,只需在回調中進行。如果您只是在聲明地圖和地理編碼器變量的頂部聲明經度和緯度,則可以在當前代碼中執行此操作。

+0

這正是我第一次嘗試,但它是在表單提交,並沒有及時設置值。我可能需要用ajax狡猾 – pws5068 2010-07-14 13:37:00

+0

@ pws5068:隨意發表另外一個問題,顯示錶單提交前進行地理編碼時遇到的問題...我們來看看:) – 2010-07-14 13:51:29

1

不,據我所知,Google Maps API不支持同步地理編碼請求。但是,一般而言,您不應該使用同步請求。這是因爲瀏覽器用戶界面會阻止,直到收到響應,這會造成糟糕的用戶體驗。

+0

謝謝,這是回答我很害怕。我會試着想出一個存儲這些值的ajax方法。 – pws5068 2010-07-14 13:38:13

0

對於此解決方案,您需要從CodeProject(開放許可證)下載Sharmil Desai的「Google Maps Geocoder的.NET API」,位於: http://www.codeproject.com/KB/custom-controls/GMapGeocoder.aspx

執行以下代碼,插入所需的城市,州或街道地址,GoogleMapsAPI將使用GMapGeocoder的實用程序方法'Util.Geocode'返回您的GeoCoded結果。

快樂編碼!

using System; 
using System.Collections.Generic; 
using System.Linq; 
using GMapGeocoder; 
namespace GeoCodeAddresses 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string city = "Carmel"; 
      string state = "Indiana"; 
      string GMapsAPIkey = 
       System.Configuration.ConfigurationSettings.AppSettings["GoogleMapsApiKey"].ToString(); 

       GMapGeocoder.Containers.Results results = 
        GMapGeocoder.Util.Geocode(
        string.Format("\"{1}, {2}\"", city, state), GMapsAPIkey); 

       switch (results.StatusCode) 
       { 
        case StatusCodeOptions.Success: 
         GMapGeocoder.Containers.USAddress match1 = results.Addresses[0]; 
         //city = match1.City; 
         //state = match1.StateCode; 
         double lat = match1.Coordinates.Latitude; 
         double lon = match1.Coordinates.Longitude; 
         Console.WriteLine("Latitude: {0}, Longitude: {1}", lat, lon); 
         break; 
        case StatusCodeOptions.BadRequest: 
         break; 
        case StatusCodeOptions.ServerError: 
         break; 
        case StatusCodeOptions.MissingQueryOrAddress: 
         break; 
        case StatusCodeOptions.UnknownAddress: 
         break; 
        case StatusCodeOptions.UnavailableAddress: 
         break; 
        case StatusCodeOptions.UnknownDirections: 
         break; 
        case StatusCodeOptions.BadKey: 
         break; 
        case StatusCodeOptions.TooManyQueries: 
         break; 
        default: 
         break; 
       } 
      } 
     } 
    } 
}