在不知道纬度和经度的情况下,如何调用 MapLocationFinder.FindLocationsAsync() 来获取地址的坐标?
How can I call MapLocationFinder.FindLocationsAsync() to get the coordinates for an address without already knowing the latitude and longitude?
我正在尝试调整代码 here 以获取传入地址的纬度和经度。
但是,传递给 MapLocationFinder.FindLocationsAsync() 的参数之一是已经设置了纬度和经度的 Geopoint,就像上面引用的代码中的这样:
// The nearby location to use as a query hint.
BasicGeoposition queryHint = new BasicGeoposition();
queryHint.Latitude = 47.643;
queryHint.Longitude = -122.131;
Geopoint hintPoint = new Geopoint(queryHint);
// Geocode the specified address, using the specified reference point
// as a query hint. Return no more than 3 results.
MapLocationFinderResult result =
await MapLocationFinder.FindLocationsAsync(
addressToGeocode,
hintPoint,
3);
最终结果是经纬度设置为:
if (result.Status == MapLocationFinderStatus.Success)
{
tbOutputText.Text = "result = (" +
result.Locations[0].Point.Position.Latitude.ToString() + "," +
result.Locations[0].Point.Position.Longitude.ToString() + ")";
}
这对我来说没有意义 - 该方法的全部目的是设置纬度和经度,换句话说,在调用 MapLocationFinder.FindLocationsAsync() 时它们是未知的。
这是我的代码,我根据给定的 link:
改编了上面的内容
public sealed partial class MainPage : Page
{
. . .
// Global, set by call to SetLatAndLongForAddress()
double latitude = 0.0;
double longitude = 0.0;
. . .
private async void SetLatAndLongForAddress(string fullAddress)
{
try
{
string addressToGeocode = fullAddress;
MapLocationFinderResult mapLocFinderResult =
await MapLocationFinder.FindLocationsAsync(
addressToGeocode,
null,
1); // changed 3 to 1 - only want one returned val
if (mapLocFinderResult.Status == MapLocationFinderStatus.Success)
{
latitude = mapLocFinderResult.Locations[0].Point.Position.Latitude;
longitude = mapLocFinderResult.Locations[0].Point.Position.Longitude;
}
}
. . .
}
这是方法吗 - 将 null 而不是 Geopoint 作为第二个参数传递给 MapLocationFinder.FindLocationsAsync()?那行得通吗,或者我对此有什么误解?
是的,你的方法没问题。
FindLocationsAsync(String, Geopoint, UInt32)方法将指定地址转换为地理位置集合(地理编码)。指定地址由你的fullAddress
提供,第二个参数Geopoint
只是提示,不是依据。第二个参数可以为null,方法可以正常工作。
当你想得到一个地址的坐标时,你可以给出一个已知的接近你的目标地址的坐标,这可能有助于搜索你的目标地址的坐标。
您传递给 FindLocationsAsync 的 Geopoint 是帮助地理编码器给出正确结果的“提示”。例如,如果您搜索“Paris”并且位于德克萨斯州的乡村,您可能希望将 Paris, TX 作为最佳结果。在其他任何地方,您可能想要法国巴黎。
传递 null 将尝试在没有提示的情况下进行地理编码,因此您可能无法获得最佳结果。
人们经常传递用户当前位置(使用地理定位 API https://docs.microsoft.com/en-us/windows/uwp/maps-and-location/get-location)或地图正在查看的当前位置(如果您有可见的地图控件(使用地图控件中心 属性) .
我正在尝试调整代码 here 以获取传入地址的纬度和经度。
但是,传递给 MapLocationFinder.FindLocationsAsync() 的参数之一是已经设置了纬度和经度的 Geopoint,就像上面引用的代码中的这样:
// The nearby location to use as a query hint.
BasicGeoposition queryHint = new BasicGeoposition();
queryHint.Latitude = 47.643;
queryHint.Longitude = -122.131;
Geopoint hintPoint = new Geopoint(queryHint);
// Geocode the specified address, using the specified reference point
// as a query hint. Return no more than 3 results.
MapLocationFinderResult result =
await MapLocationFinder.FindLocationsAsync(
addressToGeocode,
hintPoint,
3);
最终结果是经纬度设置为:
if (result.Status == MapLocationFinderStatus.Success)
{
tbOutputText.Text = "result = (" +
result.Locations[0].Point.Position.Latitude.ToString() + "," +
result.Locations[0].Point.Position.Longitude.ToString() + ")";
}
这对我来说没有意义 - 该方法的全部目的是设置纬度和经度,换句话说,在调用 MapLocationFinder.FindLocationsAsync() 时它们是未知的。
这是我的代码,我根据给定的 link:
改编了上面的内容public sealed partial class MainPage : Page
{
. . .
// Global, set by call to SetLatAndLongForAddress()
double latitude = 0.0;
double longitude = 0.0;
. . .
private async void SetLatAndLongForAddress(string fullAddress)
{
try
{
string addressToGeocode = fullAddress;
MapLocationFinderResult mapLocFinderResult =
await MapLocationFinder.FindLocationsAsync(
addressToGeocode,
null,
1); // changed 3 to 1 - only want one returned val
if (mapLocFinderResult.Status == MapLocationFinderStatus.Success)
{
latitude = mapLocFinderResult.Locations[0].Point.Position.Latitude;
longitude = mapLocFinderResult.Locations[0].Point.Position.Longitude;
}
}
. . .
}
这是方法吗 - 将 null 而不是 Geopoint 作为第二个参数传递给 MapLocationFinder.FindLocationsAsync()?那行得通吗,或者我对此有什么误解?
是的,你的方法没问题。
FindLocationsAsync(String, Geopoint, UInt32)方法将指定地址转换为地理位置集合(地理编码)。指定地址由你的fullAddress
提供,第二个参数Geopoint
只是提示,不是依据。第二个参数可以为null,方法可以正常工作。
当你想得到一个地址的坐标时,你可以给出一个已知的接近你的目标地址的坐标,这可能有助于搜索你的目标地址的坐标。
您传递给 FindLocationsAsync 的 Geopoint 是帮助地理编码器给出正确结果的“提示”。例如,如果您搜索“Paris”并且位于德克萨斯州的乡村,您可能希望将 Paris, TX 作为最佳结果。在其他任何地方,您可能想要法国巴黎。 传递 null 将尝试在没有提示的情况下进行地理编码,因此您可能无法获得最佳结果。 人们经常传递用户当前位置(使用地理定位 API https://docs.microsoft.com/en-us/windows/uwp/maps-and-location/get-location)或地图正在查看的当前位置(如果您有可见的地图控件(使用地图控件中心 属性) .