wp8中的公民地址

时间:2014-09-04 22:54:20

标签: windows-phone-8 reverse-geocoding

我正在开发一个wp8项目,需要找到该位置。我已经使用windows.device.geoloaction名称空间来查找现在需要找到地址(国家/地区和邮政编码)的纬度和经度。我找到了this example,但我很困惑如何传递我获得的坐标。这是我的代码。

public async void FindTADeviceLocation()
{
    ////Declare  Geolocator object
    Geolocator geolocator = new Geolocator();

    //  Set user's accuracy 
    geolocator.DesiredAccuracy = PositionAccuracy.High;

    //get the position of the user.
    try
    {
        //The await guarantee the calls  to be returned on the thread from which they were called

        Geoposition geoposition = await geolocator.GetGeopositionAsync(
            maximumAge: TimeSpan.FromMinutes(1),
            timeout: TimeSpan.FromSeconds(10)
            );

        var geoQ = new ReverseGeocodeQuery();
        geoQ.QueryCompleted += geoQ_QueryCompleted;

        if (geoQ.IsBusy == true)
        {
            geoQ.CancelAsync();
        }
        // Set the geo coordinate for the query
        geoQ.GeoCoordinate = geoposition.Coordinate;

        geoQ.QueryAsync();

    }

    catch (Exception ex)
    {
        if ((uint)ex.HResult == 0x80004004)
        {
            MessageBox.Show("position is unknown");
        }

    } 
}


void geoQ_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)
{      
    if (e.Result.Count() > 0)
    {
        string showString = e.Result[0].Information.Name;
        showString = showString + "\nAddress: ";
        showString = showString + "\n" + e.Result[0].Information.Address.PostalCode + " " + e.Result[0].Information.Address.City; 
        showString = showString + "\n" + e.Result[0].Information.Address.Country + " " + e.Result[0].Information.Address.CountryCode;
        showString = showString + "\nDescription: ";
        showString = showString + "\n" + e.Result[0].Information.Description.ToString();

        MessageBox.Show(showString);
    }   
}

我知道问题在于geoQ.GeoCoordinate = geoposition.Coordinate;

但是如何将坐标传递给geoQ.GeoCoordinate?

谢谢你

1 个答案:

答案 0 :(得分:0)

这样做了。 geocoordinate接受double类型的参数。所以我们要做的就是将坐标转换为double并传递它。

var currentLocationLatitude = Convert.ToDouble(geoposition.Coordinate.Latitude.ToString("0.0000000000000"));
var currentLocationLongitude = Convert.ToDouble(geoposition.Coordinate.Longitude.ToString("0.0000000000000"));

var geoQ = new ReverseGeocodeQuery();
geoQ.QueryCompleted += geoQ_QueryCompleted;

if (geoQ.IsBusy == true)
{
    geoQ.CancelAsync();
}
// Set the geo coordinate for the query

geoQ.GeoCoordinate = new GeoCoordinate(currentLocationLatitude, currentLocationLongitude);

geoQ.QueryAsync();

由于