1

次のコードは非同期で動作します。都市、州を緯度と経度に変換するように設定しただけです。その後、その値が警告されます。

これらの値を実際に返す関数を作成するにはどうすればよいですか?

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

3 に答える 3

1

コールバックからこれらの値を返しても何もしません。これらの値をどこかに保存したい場合は、コールバックでそれを実行してください。マップとジオコーダー変数を宣言する上部で緯度と経度を宣言するだけで、現在のコードでそれを行うことができます。

于 2010-07-14T13:30:32.997 に答える
1

いいえ、私の知る限り、Google Maps API は同期ジオコーディング リクエストをサポートしていません。ただし、一般に、同期リクエストは使用しないでください。これは、ブラウザーの UI が応答を受信するまでブロックされ、ユーザー エクスペリエンスが低下するためです。

于 2010-07-14T13:31:20.390 に答える
0

このソリューションでは、Sharmil Desai の「A .NET API for the Google Maps Geocoder」を CodeProject (オープン ライセンス) からダウンロードする必要があり ます。 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;
                }
            }
        }
    }
}
于 2010-09-20T05:49:50.397 に答える