Obtention et utilisation de données de localisation

Recherche de la localisation de votre utilisateur, et traçage de sa position sur une carte.

Lors du développement d’applications iOS, vous avez probablement utilisé l’infrastructure CoreLocation pour déterminer votre localisation, puis MapKit pour afficher cette position sur une carte. Avec Windows 8.1 et Windows Phone 8.1, vous pouvez utiliser la classe Geolocation pour obtenir des localisations et Bing Maps pour fournir les données de cartographie (accessoirement, Bing Maps peut fournir d’autres données, y compris des informations sur le trafic et des directions).

Utilisation du contrôle Bing pour afficher une carte autour d’une localisation spécifique

Obtention d’une localisation en C#

Si le code C# nécessaire pour obtenir une localisation est bref et concis, notez l’utilisation du mot clé async. Lorsque le mot clé async est spécifié, la méthode se comporte de manière semblable à un block en Objective-C, et empêche le code situé après d’être exécuté (sans bloquer le thread principal) jusqu’au retour de la méthode await. Dans le cas présent, la méthode est retournée avec un objet Geoposition. Pour plus d’informations, voir Démarrage rapide : appel d’API asynchrones en C# ou Visual Basic.


       // Add these:
        // using Windows.Devices.Geolocation;
        // using System.Threading.Tasks;
        // using System.Diagnostics;

        Geolocator geo = null;

        // Notice the use of async
        private async void FindLocation()
        {
            if (geo == null)
            {
                geo = new Geolocator();
            }

            try
            {
                Geoposition pos = await geo.GetGeopositionAsync();         
                Debug.WriteLine("Latitude: " + pos.Coordinate.Latitude.ToString() + " Longitude: " + pos.Coordinate.Longitude.ToString() + " Accuracy: " + pos.Coordinate.Accuracy.ToString());
            }

            catch (System.UnauthorizedAccessException)
            {
                // Failed - location capability not set in manifest, or user blocked location access at run-time.
            }

            catch (TaskCanceledException)
            {
                // Cancelled or timed-out.
            }


        }

Obtention d’une localisation en JavaScript

Le code JavaScript est très semblable au code C#. Il est important de gérer les erreurs et les échecs potentiels au cas où l’utilisateur choisirait de ne pas autoriser l’utilisation de données de localisation ou s’il est impossible d’obtenir ces données.


    var loc = null;

    function FindLocation() {
        if (loc == null) {
            loc = new Windows.Devices.Geolocation.Geolocator();
        }
        if (loc != null) {
            loc.getGeopositionAsync().then(getPositionHandler, errorHandler);
        }
    }

    function getPositionHandler(pos) {
        console.log("Latitude: " + pos.coordinate.latitude + " Longitude: " + pos.coordinate.longitude + " Accuracy: " + pos.coordinate.accuracy );
    }

    function errorHandler(e) {
        console.log("Error = " +  e.message);
    }


Les développeurs JavaScript qui souhaitent obtenir des données de localisation ont aussi la possibilité d’utiliser l’approche de type navigateur Web navigator.geolocation. Celle-ci est présentée en détail dans le billet de blog Comparaison des API de géolocalisation HTML5 et WinRT.

Obtention d’une localisation en C++

Là encore, le code C++ requis pour trouver la localisation actuelle est bref. La méthode s’exécutant de manière asynchrone, vous devez inclure la prise en charge C++ des threads en incluant ppltask.h et l’espace de noms concurrency. Pour plus d’informations, voir Runtime d’accès concurrentiel.


// Add the following:
#include <ppltasks.h> 
using namespace Windows::Devices::Geolocation;
using namespace concurrency; 

Geolocator ^geo ;
concurrency::cancellation_token_source geopositionTaskTokenSource;

 void WinLog(const wchar_t *text, int n)
	 // Helper function to display debugging information to output console
	{
		wchar_t buf[1024];
		_snwprintf_s(buf, 1024, _TRUNCATE, L"%s %d\n", text, n);
		OutputDebugString(buf);
	}


void MainPage::FindLocation()
{
	geo = ref new Geolocator();
	task<Geoposition^> geopositionTask(geo->GetGeopositionAsync(), geopositionTaskTokenSource.get_token());
    geopositionTask.then([this](task<Geoposition^> getPosTask)
    {
        try
        {
            Geoposition^ pos = getPosTask.get();

			WinLog(L"Latitude",pos->Coordinate->Latitude);
			WinLog(L"Longitude",pos->Coordinate->Longitude);
			WinLog(L"Accuracy",pos->Coordinate->Accuracy);
        }
        catch (AccessDeniedException^)
        {
			// 
        }
        catch (task_canceled&)
        {
           // Cancelled or timed-out
        }

	});
}

Traçage d’une localisation

L’approche recommandée pour afficher des données de localisation sur une carte consiste à utiliser Bing Maps. Comme indiqué dans la rubrique Prise en main des Cartes Bing, l’accès à ces données cartographiques peut s’effectuer de plusieurs façons, notamment à l’aide d’une solution basée sur le Web (et non sur l’API) et d’un contrôle Windows 8 dédié. La solution Web, plus simple, peut afficher une carte personnalisée et comprend divers contrôles à l’écran ; toutefois, elle ne propose qu’une interactivité limitée et n’offre pas l’expérience fluide d’une application. Les efforts supplémentaires requis pour utiliser le contrôle personnalisé sont justifiés.

Pour accéder au contrôle Bing Maps dédié ou utiliser les fonctionnalités plus avancées du service Bing Maps, vous devez vous inscrire afin d’obtenir une clé spéciale qui vous identifie, vous et votre application. Pour plus d’informations, voir Obtention d’une clé Cartes Bing. Une fois que vous avez la clé, l’utilisation du contrôle est simple. Pour cela, voir la rubrique Comment afficher votre localisation à l’aide des Cartes Bing (applications du Windows Store en C#/VB/C++ et XAML) qui contient une vidéo très utile.

Dans le même registre, votre application du Windows Store peut lancer l’application Cartes intégrée en suivant le schéma d’URI. Ce dernier permet, entre autres, d’ouvrir l’application en la centrant sur une localisation spécifique. Pour plus d’informations, voir Schéma d’URI pour l’application Cartes.

Points à retenir

  • Vous devez configurer votre application pour prendre en charge la localisation dans le fichier manifeste, sans quoi une exception sera levée. Ouvrez Package.appxmanifest, sélectionnez l’onglet Capacités et cochez Localisation.
  • L’utilisateur peut choisir de ne pas fournir de données de localisation. Si c’est le cas, votre application doit répondre élégamment (voir les gestionnaires d’exceptions et les gestionnaires d’erreurs dans l’exemple de code).
  • Ne demandez pas de données de localisation tant que vous n’en avez pas vraiment besoin, et ne le faites pas plus souvent que nécessaire.
  • Les données de localisation sont des informations personnelles. Vous devez donc faire attention à la façon dont vous les utilisez. Pour obtenir des instructions, voir cette rubrique relative à la confidentialité.

Rubriques associées

Obtention d’une localisation
Exemple de géolocalisation
Recommandations pour les applications prenant en charge la géolocalisation (applications du Windows Store en JavaScript et HTML)
Détection de la géolocalisation (applications du Windows Store en JavaScript et HTML)
Démarrage rapide : détection de la localisation d’un utilisateur (applications du Windows Store en C#/VB/C++ et XAML)
Geolocator.GetGeopositionAsync() | getGeopositionAsync() method
Traçage d’une localisation
Comment afficher votre localisation à l’aide des Cartes Bing (applications du Windows Store en C#/VB/C++ et XAML)
Kit de développement logiciel (SDK) des cartes Bing pour les applications du Windows Store - Exemples

 

 

Afficher:
© 2015 Microsoft