Xamarin Essentials VS API Карт Google - PullRequest
1 голос
/ 27 марта 2019

В чем разница между использованием этих двух методов при попытке найти город и штат по почтовому индексу, который вводит пользователь.При использовании Essentials, насколько я могу судить, вы должны сделать два вызова: один для получения долготы / широты почтового индекса, а другой - для получения дополнительной информации о долготе / широте.

public async Task GetLocationEssentials(string zip)
{
    var locations = await Geocoding.GetLocationsAsync(zip);
    var location = locations?.FirstOrDefault();
    if (location != null)
    {
        Console.WriteLine($"Latitude: {location.Latitude}, Longitude: {location.Longitude}, Altitude: {location.Altitude}");
    }

    try
    {
        var lat = location.Latitude;
        var lon = location.Longitude;

        var placemarks = await Geocoding.GetPlacemarksAsync(lat, lon);

        var placemark = placemarks?.FirstOrDefault();
        if (placemark != null)
        {
            var geocodeAddress =
                $"AdminArea:       {placemark.AdminArea}\n" +
                $"CountryCode:     {placemark.CountryCode}\n" +
                $"CountryName:     {placemark.CountryName}\n" +
                $"FeatureName:     {placemark.FeatureName}\n" +
                $"Locality:        {placemark.Locality}\n" +
                $"PostalCode:      {placemark.PostalCode}\n" +
                $"SubAdminArea:    {placemark.SubAdminArea}\n" +
                $"SubLocality:     {placemark.SubLocality}\n" +
                $"SubThoroughfare: {placemark.SubThoroughfare}\n" +
                $"Thoroughfare:    {placemark.Thoroughfare}\n";

            Console.WriteLine(geocodeAddress);
        }
    }
    catch (FeatureNotSupportedException fnsEx)
    {
        // Feature not supported on device
    }
    catch (Exception ex)
    {
        // Handle exception that may have occurred in geocoding
    }
}

Второй вариант - получить ключ API карт Google и позвонить в их API с помощью почтового индекса, но для этого необходимо получить ключ API, а затем ограничить до 2500 вызовов в день.

public async System.Threading.Tasks.Task GetLocationAsync(string zip)
{
    string url = "http://maps.googleapis.com/maps/api/geocode/json?address=" + zip + "&sensor=true";
    var client = new HttpClient();

    // 'using' forces proper cleanup after finishing the operation
    using (var response = await client.GetAsync(url))
    {
        if (response.IsSuccessStatusCode)
        {
            var jsonResult = await response.Content.ReadAsStringAsync();
            //var jsonResponse = JsonConvert.DeserializeObject<>(jsonResult);
        }
    }
}

Есть ли польза от использования вызова googleapi, кроме необходимости совершать 1 звонок?Будут ли заблокированы предметы первой необходимости, если вы будете делать много звонков?

1 Ответ

1 голос
/ 28 марта 2019

Основным отличием является то, что Essentials использует «нативные» функции каждой платформы для служб геолокации, поэтому ваши результаты будут различаться в зависимости от платформы для одного и того же адреса / местоположения LatLong.

В iOS CLGeocoderи, таким образом, используется база данных Apple о географическом местоположении, подобно тому, как мудрый Android использует Geocoder (результаты намного проще и скуднее по сравнению с API Googles), а UWP использует BasicGeoposition (требуется маркер карты).

API Google Direct Geolocation предоставляют согласованный набор запросов для разных платформ и (ОСТОРОЖНО: основанный на мнениях) набор результатов, более полный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...