12 novembre 2011

API de Géolocalisation et applications web ArcGIS - 3/3


Je termine ma série d'articles concernant l'utilisation de l'API de Géolocalisation d'HTML5 en traitant, aujourd'hui, le cas des applications web développées avec Silverlight.

Le SDK Silverlight ne propose pas plus solution que Flex pour géolocaliser l'utilisateur. Tout comme avec Flex, la solution peut consister à se connecter directement à des services de Géolocalisation pour établir la correspondance entre l'adresse IP de l'utilisateur avec une position géographique. Cette option nécessitera un codage non négligeable et la qualité du positionnement sera dépendante de la qualité de la base de données de votre fournisseur (potentiellement très variable).

Comme pour Flex, une solution plus standard et plus rapide à l'implémenter consistera à s'appuyer sur l'API de Géolocalisation du navigateur. La méthode sera d'ailleurs la même, nous allons appeler une fonction JavaScript de la page hébergeant l'application Silverlight afin de tirer profit de ses capacités de Géolocalisation.

Appeler la fonction JavaScript à partir de l'application Silverlight

Invoquer notre fonction JavaScript de Géolocation à partir de Silverlight est un chose très simple puisque Silverlight peut appeler n’importe quel code JavaScript de la page hôte en utilisant l'instruction: HtmlPage.Windows.Invoke("nom_de_la_fonction_JS").



Appeler une fonction Silverlight à partir de JavaScript

Pour pouvoir exploiter la position géographique renvoyée par la fonction JavaScript, cette dernière doit pouvoir appeler une méthode dans l'application Silverlight. Ce mécanisme nécessite les étapes suivantes:

Dans le constructeur de l’application Silverlight, il faudra faire un appel à l'intruction HtmlPage.RegisterScriptableObject() pour autoriser le dialogue entre JavaScript et l’application Silverlight. Cette instruction créé, en même temps, un nom par lequel le plugin Silverlight sera visible de la fonction JavaScript (ici ce nom est "MainPage").


Ensuite, toute méthode devant pouvoir être appelée de l’extérieur doit être marquée par l’attribut ScriptableMember.


Enfin, depuis JavaScript, il est maintenant possible d’accéder directement aux membres visibles de la classe Silverlight au travers du DOM. Dans l'exemple ci-dessous on récupère, via son ID, le contrôle correspondant à l'application Silverlight. A partir de ce contrôle, on accède au contenu de l'application en utilisant le nom d'enregistrement (ici: MainPage) puis on appelle la méthode (ici: ResultGeolocalisation) en passant éventuellement un argument (ici: la chaine contenant les coordonnées géographiques) pour le traiter dans l'application Silverlight.



Un exemple d'application avec l'API ArcGIS for Silverlight

Maintenant que nous avons détaillé le mécanisme de communication entre Silverlight et JavaScript (et inversement), vous pouvez l'utiliser dans une application Web basée sur l'API ArcGIS for Silverlight. Vous noterez que les positions retournées par l'API de Géolocalisation sont exprimées dans le système WGS84, vous pourrez donc les convertir directement en Web Based Mercator à l'aide de la classe ESRI.ArcGIS.Client.Projection.WebMercator de l'API ArcGIS, si vous utilisez les fonds de carte ArcGIS Online ou Bing Maps. Si vous utilisez d'autres systèmes de coordonnées pour votre carte, vous utiliserez alors un Geometry Service (celui de votre propre serveur ArcGIS ou celui d'ArcGIS Online). J'ai développé cet exemple d'application en guise d'illustration, vous trouverez le code source de l'application ici.



Aucun commentaire: