Google GeoCode конвертирует город, STATE в широту и долготу - PullRequest
1 голос
/ 14 июля 2010

Следующий код работает асинхронно. Я только настроил его, чтобы преобразовать город, штат в широту и долготу. Это значение затем оповещается.

Как мне написать функцию, которая на самом деле возвращает эти значения?

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);
}

Ответы [ 3 ]

1 голос
/ 14 июля 2010

Нет, насколько мне известно, API Карт Google не поддерживает синхронные запросы геокодирования. Однако, как правило, вы не должны использовать синхронные запросы. Это связано с тем, что пользовательский интерфейс браузера будет блокироваться до тех пор, пока не получит ответ, и это приведет к ужасному взаимодействию с пользователем.

1 голос
/ 14 июля 2010

Возвращать эти значения из обратного вызова не будет ничего делать.Если вы хотите сохранить эти значения где-нибудь, просто сделайте это в обратном вызове.Вы можете сделать это в своем текущем коде, если просто объявите широту и долготу вверху, где объявите карту и переменные геокодера.

0 голосов
/ 20 сентября 2010

Для этого решения вам необходимо скачать «API .NET для Google Maps Geocoder» Шармила Десаи из CodeProject (открытая лицензия), расположенного здесь: http://www.codeproject.com/KB/custom-controls/GMapGeocoder.aspx.

Реализуйте следующий код, вставив требуемый адрес города, штата или улицы, и GoogleMapsAPI вернет результаты GeoCoded, используя служебный метод GMapGeocoder, 'Util.Geocode'.

Счастливого кодирования!

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;
                }
            }
        }
    }
}
...