Получение CivicAddress на Windows Phone 8.1

Я пытаюсь получить CivicAddress из геопозиции в Windows Phone 8.1.

Я пробовал использовать следующий код:

// Get Current Location
var geolocator = new Geolocator();
geolocator.DesiredAccuracyInMeters = 100;
var position = await geolocator.GetGeopositionAsync();

// Get Country
var country = position.CivicAddress.Country;

который генерирует исключение NullReferenceException, поскольку поле CivicAddress имеет значение null. Я понимаю, что провайдер CivicAddress не предоставляется для Windows 8. Я хотел бы проверить, так ли это для Windows Phone 8.1. Если да, то как я могу получить/записать провайдера CivicAddress?


person Kiang Teng    schedule 16.05.2014    source источник


Ответы (2)


Для этого вам нужно будет использовать ReverseGeocoding — дополнительная информация в MSDN .

Что касается среды выполнения Windows, вы можете, например, использовать MapLocationFinder.FindLocationsAtAsync для этой цели:

 var geolocator = new Geolocator();
 geolocator.DesiredAccuracyInMeters = 100;
 Geoposition position = await geolocator.GetGeopositionAsync();

 // reverse geocoding
 BasicGeoposition myLocation = new BasicGeoposition
     {
         Longitude = position.Coordinate.Longitude,
         Latitude = position.Coordinate.Latitude
     };
 Geopoint pointToReverseGeocode = new Geopoint(myLocation);

 MapLocationFinderResult result = await MapLocationFinder.FindLocationsAtAsync(pointToReverseGeocode);

 // here also it should be checked if there result isn't null and what to do in such a case
 string country = result.Locations[0].Address.Country;
person Romasz    schedule 16.05.2014
comment
СПАСИБО! Я некоторое время искал решение WinRT. Это просто работает. - person Scott Nimrod; 23.07.2014
comment
Здесь нет необходимости создавать новую BasicGeoposition myLocation, можно напрямую использовать position.Coordinate.Point в качестве параметра для MapLocationFinder.FindLocationsAtAsync(); - person vITs; 04.05.2015
comment
@vITs Вы правы в том, что если вы хотите использовать текущую позицию, вы можете просто передать ее напрямую. Новая Geopoint будет полезна, если у вас есть долгота и широта (например, из базы данных или откуда-то еще). - person Romasz; 04.05.2015
comment
да... если вам нужны другие свойства position.Coordinate из БД. - person vITs; 04.05.2015

Если вы хотите получить адрес для позиции, я бы посоветовал вам использовать API ReverseGeocodeQuery с позицией, которую вы получаете с помощью API Geolocator, для эталонной реализации у меня есть пример, доступный на github здесь https://github.com/nokia-developer/maps-samples/tree/master/RevGeoCoding

в противном случае вы также можете попробовать это, чтобы получить гражданский адрес из GeoCoordinates http://msdn.microsoft.com/en-us/library/system.device.location.civicaddress%28v=vs.110%29.aspx

person Gaurav Deochakke    schedule 16.05.2014