Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Comme à chaque trimestre, nous sommes plusieurs à attendre et à nous demander si nous allons être renouvelés en tant que Microsoft Most Valuable Professional (MVP).

Bing Maps expertise et developpement

Voilà chose faite pour moi, je remercie Microsoft qui m’a choisi pour une troisième année sur la plateforme Bing Maps for Enterprise.

MVP Bing Maps Development

Je remercie bien évidemment également Wygwam qui encourage toute participation et tout partage avec un esprit communautaire depuis de nombreuses années maintenant.

Wygwam recrute et avance

J’encourage par ailleurs tous les passionnés à venir nous rejoindre, Wygwam recrute, avance et progresse. Alors si vous souhaitez vous aussi monter en compétences et/ou partager vos connaissances sur les technologies Microsoft telles que le développement .Net, Windows 8, Windows Phone, Windows Azure ou encore SharePoint ou la BI, rendez vous sur le site et osez postuler !

 

V-TSP et bien plus :

A noter que depuis 2010, j’assure au sein de Wygwam le support technique avant-vente et après-vente pour Microsoft sur la plateforme Bing Maps for Enterprise dans le cadre du partenariat V-TSP.

Cette expérience plus qu’enrichissante ne fait que renforcer cette envie de partage de connaissance et d’aider les clients ou les développeurs à implémenter les plateformes de cartographie et de mettre à disposition mon expertise pour la réalisation des projets.

Cartographie interactive Bing Maps, Google Maps et Nokia Maps

L’expertise de l’équipe dédiée à la cartographie de chez Wygwam dépasse l’implémentation de la plateforme de Microsoft avec notamment une connaissance pointue des autres plateformes du marché.

Parmi celles-ci et en plus de la plateforme Bing Maps for Enterprise, on retrouve également la plateforme Google Maps API ou encore la plateforme Nokia Location Platform ce qui nous permet de vous accompagner sur tous les types de projets implémentant ces plateformes de cartographie que ce soit à travers des prototypes, des implémentations complexes ou innovantes ou des projets concrets et intégrant vos problématiques métiers.

 

Toujours plus :

J’entame cette troisième année motivé comme toujours avec en tête la volonté de montrer des cas plus pratiques et concrets livrés clés en main permettant de pousser vos réflexions sur l’utilisation de manière encore plus avancée.

Des projets qui seront sans aucun doute poussés sur les sites dédiés dès que possible et à propos desquels je ne manquerai pas de partager mes connaissances.

Une année 2012-2013 qui s’annonce remplie de défis et projets sur tous les fronts, toujours plus beaux en perspective que j’entame avec un enthousiasme fou !

MVP Summit 2012 

Au plaisir de vous retrouver sur les évènements Microsoft et autres, à travers des contributions en ligne ou en personne avec toujours plus de cartographie !

De nombreux projets utilise la cartographie pour présenter des données plus ou moins complexes dans des scénarios toujours plus avancées mais nous avons parfois l’occasion d’utiliser ces contrôles dans des cas bien plus drôles.

Bing Maps AJAX V7.0 treasure maps

Le concept et exemples de réalisation

L’idée principale est de fournir une expérience autour d’une carte interactive permettant de rechercher des éléments cachés qui ne s’afficheront uniquement lorsque l’utilisateur sera positionné au dessus de l’objet en question et à un niveau de zoom avancé.

Bing Maps et cartes au trésor

Plusieurs expériences similaires ont déjà été réalisées par Microsoft (MSN) dans le cadre d’une campagne autour de l’artiste Jay-2 et d’autres projets en étant parfois accompagné de partenaires français tels qu’Itelios pour le jeu de la Marine Nationale :

Bing Maps Jay-Z implementation chasse aux indicesItelios Bing Maps Marine nationale

 

Processus technique

En pratique, une telle utilisation est relativement simple à développer en utilisant le contrôle AJAX v7.0 de Bing Maps. Naturellement cette approche peut être adaptée à toute plateforme (Bing Maps, Google Maps, Nokia Maps…) ou tout contrôle (AJAX, Windows Phone, Windows 8…) puisque la logique est la même.

Il suffit de détecter et effectuer une action de vérification lors de changement de la vue effectué à travers le contrôle : position (à partir de bounds) et niveau de zoom.

image

Plusieurs approches sont possibles pour traiter cette vérification puisqu’en fonction de la sécurité que l’on souhaite sur les informations, il faudra éventuellement effectuer cette vérification sur un serveur distant appelé en asynchrone à travers un appel AJAX.

 

Solution simple : utilisation de code client uniquement

Dans cette première implémentation, nous ne souhaitons pas apporter de sécurité particulière sur les données mais nous nous concentrons sur l’implémentation technique et la mise en place de la logique évènementiel autour du contrôle AJAX v7.0.

  • Evènement de changement de vue et vérification
// -- Implements view change end
bm.globals.logic.viewChangeEndHandler = Microsoft.Maps.Events.addHandler(
    bm.globals.geo.map,
    'viewchangeend', 
    function () {
        if (bm.globals.geo.map.getZoom() > bm.constants.logic.zoomMini) {
            var bounds = bm.globals.geo.map.getBounds();
            var nw = bounds.getNorthwest();
            var se = bounds.getSoutheast();

            // Check if the bounds are covering the items
            if ((nw.latitude > bm.constants.logic.itemLocationLatitude)
                && (se.latitude < bm.constants.logic.itemLocationLatitude)
                && (nw.longitude < bm.constants.logic.itemLocationLongitude)
                && (se.longitude > bm.constants.logic.itemLocationLongitude)) {
            
                // Add the item on the map
                addItem(bm.constants.logic.itemLocationLatitude, 
                        bm.constants.logic.itemLocationLongitude);

                // Clear the time limit
                clearTimeout(bm.globals.logic.timer);
                bm.globals.logic.timer = null;

                // Remove the event if already found
                Microsoft.Maps.Events.removeHandler(bm.globals.logic.viewChangeEndHandler);
            }
        }
    }
);
 

 

Code complet :

Un exemple d’implémentation est alors disponible via ce lien : http://www.boonaert.net/element/bingmaps/samples/Treasure/index-simple.htm

Bing Maps rené la taupe et chasse aux indices

 

Solution avancée : utilisation de code client et service distant

Au sein de cette seconde implémentation, nous nous intéressons de manière plus précise à la sécurité des coordonnées au moment de la vérification qui s’effectue désormais sur le serveur.

Cette vérification peut être réalisée depuis des coordonnées statiques où dynamiques, la logique autour du stockage des données n’est pas abordé dans cet article mais il va de soit qu’il est possible d’utiliser tous moyens de stockage en fonction du besoin avec une préférence sur les bases spatiales (Type géographique sur SQL Server, PostgreSQL…) pour des raisons évidentes de performances en cas de fortes volumétries de données et/ou de requêtes.

La logique applicative en termes d’évènement n’est pas grandement modifié et la seule différence notable concerne la vérification qui effectue désormais un appel à un service de manière asynchrone.

  • Evènement de changement de vue et vérification

Code client :

// -- Implements view change end
bm.globals.logic.viewChangeEndHandler = Microsoft.Maps.Events.addHandler(
    bm.globals.geo.map,
    'viewchangeend', 
    function () {
        var mapZoom = bm.globals.geo.map.getZoom();

        if (bm.globals.geo.map.getZoom() > bm.constants.logic.zoomMini) {
            var bounds = bm.globals.geo.map.getBounds();
            var nw = bounds.getNorthwest();
            var se = bounds.getSoutheast();

            var data = {
                zoom: mapZoom,
                topLeftLat: nw.latitude,
                topLeftLng: nw.longitude,
                botRightLat: se.latitude,
                botRightLng: se.longitude
            };
        
            // Abort the previous call
            if (bm.globals.logic.ajaxCall) bm.globals.logic.ajaxCall.abort();
        
            // Call the WS
            bm.globals.logic.ajaxCall = $.ajax({
                url: 'Services/GeoService.svc/CheckPosition',
                data: JSON.stringify(data),
                type: 'POST',
                dataType: 'json',
                contentType: 'application/json; charset=utf-8'
            }).done(function (result) {
                if (result.d) {
                    // Add the item on the map
                    addItem(result.d.Latitude, result.d.Longitude);

                    // Clear the time limit
                    clearTimeout(bm.globals.logic.timer);
                    bm.globals.logic.timer = null;

                    // Remove the event if already found
                    Microsoft.Maps.Events.removeHandler(bm.globals.logic.viewChangeEndHandler);
                }
            });
        }
    }
);

 

Code serveur :

[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class GeoService
{
    [OperationContract]
    public GeoItem CheckPosition(int zoom,
                                 double topLeftLat, double topLeftLng,
                                 double botRightLat, double botRightLng)
    {
        GeoItem item = null;

        if (zoom >= 12)
        {
            var itemLat = double.Parse(ConfigurationManager.AppSettings["itemLat"],
                                       CultureInfo.InvariantCulture.NumberFormat);
            var itemLng = double.Parse(ConfigurationManager.AppSettings["itemLng"],
                                       CultureInfo.InvariantCulture.NumberFormat);

            if ((topLeftLat > itemLat)
                && (botRightLat < itemLat)
                && (topLeftLng < itemLng)
                && (botRightLng > itemLng))
            {
                item = new GeoItem(itemLat, itemLng);
            }
        }

        return item;
    }
}

 

Il est important de considérer également un ordonnanceur d’appel client permettant de réduire le nombre d’appel envoyés au serveur.

 

Bing Maps code source d'exempleLe code complet peut être récupéré ici : http://www.boonaert.net/element/bingmaps/samples/
Treasure/BingMaps.TreasureMap.zip

 

Considérations sur la sécuritéBing MAps securité et web services

Un point supplémentaire à considérer dans le cadre d’un développement d’une telle expérience pour une opération de communication ou un jeu concours réside dans la sécurité de la plateforme.

Il est indéniable que la sécurité optimale n’existe pas et qu’il sera toujours possible d’avoir des malins cherchant à exploiter les services de vérification directement de manière automatique afin de trouver les lieux concernés.

Voici quelques pistes de considérations techniques sur la sécurité :

  • Journaliser (logs) les IPs d’appels et les requêtes associées afin de limiter les appels à un nombre raisonnable pour chaque jour (1000 appels) et étudier les métriques pour ajuster ces limites
  • Génération de jeton temporaire pour les appels
  • Utiliser une session avec connexion login/password : peut limiter la portée de l’opération

Il est plus qu’important de mesurer, sur des opérations grand publics, l’impact d’une action conjointe sur l’infrastructure et sur le déroulement même de l’opération.

Il est en effet assez délicat d’éviter ce genre de détournement pouvant même être volontairement orchestré pour détourner l’opération (cas du concours Monopoly ou plus récemment le concours Virgin Radio) et possiblement pire, pour nuire à la stabilité de la plateforme mise en place.

 

Conclusions

A travers cet article, nous avons étudié les bases de réalisation d’une application permettant de créer une expérience de carte au trésor, de “Où est Charlie ?” ou encore de piste aux indices.

Il parait évident que cette expérience doit être accompagné d’une réelle réflexion de parcours et d’ergonomie sur lesquels viennent se greffer de l’information utile sur la carte et de contenu éditorial pour susciter l’intérêt et ainsi transformer l’expérience en une réussite.

Enfin, pour conclure, dans ces cas d’usage où la volumétrie d’utilisateur peut totalement variée au fil du déroulement de l’opération, Windows Azure et ses capacités d’hébergement peuvent être une option plus qu’intéressante garantissant la haute disponibilité et les couts réduits. C’est une solution d’autant plus intéressante qu’elle utilise les technologies de Microsoft telles que SQL Sevrer pour mettre à disposition ces fonctionnalités.

Tresor

 

N’hésitez pas à me contacter si vous avez un besoin similaire ou si vous avez des questions techniques concernant ce genre d’implémentation.

Un des principaux points apportés par l’API AJAX V7 de la plateforme Bing Maps for Enterprise est sa capacité à pouvoir être étendu afin d’apporter de nouvelles fonctionnalités que ce soit à travers des modules dynamiques ou tout simplement pour améliorer ou compléter les éléments de base.

Bing Maps extensions et modules AJAX v7

L’extension, pourquoi et comment ?

Le principe d’extension est un des fondamentaux du langage JavaScript et permet d’ajouter des propriétés ou méthodes sur des objets définis voir même de remplacer directement un comportement par un autre de manière totalement dynamique.Extension de Bing Maps ajax v7 HTML5 et module dynamique

Le contrôle AJAX v7 de la plateforme Bing Maps for Enterprise n’échappe pas à la règle et on peut tout à fait ajouter de nouvelles fonctionnalités sur des objets existants ou créer ses propres objets s’intégrant dans la même logique.

L’ensemble des éléments définis sont extensibles et on peut tout à fait définir des méthodes supplémentaires sur des classes standards.

Lorsque l’on souhaite apporter un composant complet, l’API permet de charger dynamiquement des modules. Ces modules sont ainsi des fichiers développés en JavaScript qui seront chargé dynamiquement et dont le cycle de vie sera géré à travers l’utilisation de plusieurs méthodes du contrôle AJAX v7.

 

Conseils

Il est toutefois important de rappeler qu’il faut toujours garder à l’esprit que puisqu’il s’agit d’un service en ligne, ce dernier peut évoluer et par conséquent nos extensions pourront avoir à être adaptées au besoin.

imageAussi, il est important d’être conscient de ce que l’on fait lorsqu’on utilise ces principes d’extensions pour des raisons évidents de stabilité et de support de la part de Microsoft. Il serait en effet délicat d’expliquer que l’on aurait remplacé 30% des méthodes existants par ses propres méthodes tout en continuant de demander un support technique.

 

Exemple d’extension simple

Afin de mettre en pratique un cas simple d’extension de l’API, je vais maintenant m’intéresser au cas des classes standards Polygon et Polyline du contrôle AJAX v7.

  • Calcul du nombre de pointAJAX v7 Bing Maps polygone et nombre de points dans un polygone

Dans le cas d’exemple, nous allons ajouter des fonctionnalités nous permettant de très simplement retourner le nombre de point qui compose la géométrie concernée.

Voici le code d’extension associé :

// Extension
if(typeof(Microsoft) !== 'undefined') {
    if(typeof(Microsoft.Maps) !== 'undefined') {
        Microsoft.Maps.Polygon.prototype.getNumPoints = function() {
            return this.getLocations().length;
        };
    }
}

Et en utilisation :

alert(polygon.getNumPoints());

On remarque que l’extension s’effectue par l’intermédiaire de l’objet prototype, approche tout à fait classique en JavaScript et se retrouve donc être très facilement extensible. Il est également possible d’accéder aux autres méthodes définies au sein de la classe concernée.

  • Calcul du périmètre et de l’aireCalcul de la surface d'un polygone et de la longueur d'une polyligne en JavaScript

Pour ce second cas, nous allons continuer d’étendre la classe Polygone de manière à retourner la longueur du périmètre extérieur du polygone ainsi que le calcul son emprise.

Tout d’abord, nous aurons besoin d’une méthode permettant d’estimer approximativement la distance entre 2 emplacements géographiques définis par une latitude et une longitude.

Voici le code nécessaire :

// Utilities
var Wygwam = {
    Utilities: {
        degToRad: function(value) {
            return value * Math.PI / 180;
        },
        radToDeg: function(value) {
            return value * 180 / Math.PI;
        },
        getHaversineDistance: function(locA, locB) {
            var lat1 = this.degToRad(locA.latitude);
            var lon1 = this.degToRad(locA.longitude);
            var lat2 = this.degToRad(locB.latitude);
            var lon2 = this.degToRad(locB.longitude);

            var dLat = lat2 - lat1;
            var dLon = lon2 - lon1;
            var cordLength = Math.pow(Math.sin(dLat / 2), 2) 
                            + Math.cos(lat1)
                            * Math.cos(lat2) 
                            * Math.pow(Math.sin(dLon / 2), 2);
            var centralAngle = 2 * Math.atan2(
                Math.sqrt(cordLength), 
                Math.sqrt(1 - cordLength));

            // earthRadius = 6371 km;
            earthRadius = 6378137;

            return (earthRadius / 1000) * centralAngle;
        }
    }
}

Voici le code d’extension associé :

// Extension
if (typeof (Microsoft) !== 'undefined') {
    if (typeof (Microsoft.Maps) !== 'undefined') {
        Microsoft.Maps.Polygon.prototype.getNumPoints = function () {
            return this.getLocations().length;
        };
        Microsoft.Maps.Polygon.prototype.getDistance = function () {
            var distance = 0;
            var locs = this.getLocations();
            for (var i = 1; i < locs.length; i++) {
                distance += Wygwam.Utilities.getHaversineDistance(locs[ i ], locs[i - 1]);
            }

            return distance;
        };
        Microsoft.Maps.Polygon.prototype.getArea = function () {
            var area = 0;

            var locs = this.getLocations();
            if (locs.length >= 3) {
                var bounds = Microsoft.Maps.LocationRect.fromLocations(locs);
                var x0 = bounds.getNorthwest().longitude;
                var y0 = bounds.getSoutheast().latitude;

                var j = 0;

                // Aggregate the area of triangle
                for (var i = 0; i < locs.length; i++) {
                    j++;
                    if (j == locs.length) j = 0;

                    // Calculate the area
                    var x1 = Wygwam.Utilities.getHaversineDistance(
                        locs[ i ], new Microsoft.Maps.Location(locs[ i ].latitude, x0));
                    var x2 = Wygwam.Utilities.getHaversineDistance(
                        locs[ j ], new Microsoft.Maps.Location(locs[ j ].latitude, x0));
                    var y1 = Wygwam.Utilities.getHaversineDistance(
                    locs[ i ], new Microsoft.Maps.Location(y0, locs[ i ].longitude));
                    var y2 = Wygwam.Utilities.getHaversineDistance(
                    locs[ j ], new Microsoft.Maps.Location(y0, locs[ j ].longitude));

                    area += (x1 * y2) - (x2 * y1);
                }
            }

            return Math.abs(area / 2);
        };
    }
}

Et en utilisation :

alert("Distance in km=" + polygon.getDistance());
alert("Area in square km=" + polygon.getArea());

L’appel d’autres méthodes de l’API est tout à fait réalisable et simple à mettre en œuvre. Votre code final s’en voit grandement réduit et gagne en lisibilité et donc la maintenabilité générale est renforcée.

  • Binding simple et objet liéBinding simplifié avec Bing Maps ajax v7 en Javascript

Enfin, une autre utilisation beaucoup plus régulière dans nos développements consiste à utiliser un objet qui est directement utilisé pour afficher les infoboxes et l’ensemble des informations liées.

Voici le code d’extension associé :

// Extension
if (typeof (Microsoft) !== 'undefined') {
    if (typeof (Microsoft.Maps) !== 'undefined') {
        Microsoft.Maps.Polygon.prototype.dataObject = null,
        Microsoft.Maps.Polygon.prototype.id = null
    }
}

Et l’utilisation ici dans la méthode associée à l’évènement onclick sur le polygone, ici e est un paramètre de type MouseEventArgs :

function clickPolygon(e) {
    if (e.targetType == 'polygon') {
        alert(e.target.id + ' == ' + e.target.dataObject.title);
    }
}

En utilisation, il devient possible de stocker un objet pouvant par exemple provenir d’un Web Service et dont on souhaiterait conserver l’ensemble des propriétés métiers.

 

Exemple de module d’extension

Les modules dynamiques d’extensions développés ont une utilisation propre à Bing Maps for Enterprise et ils vous permettent de construire des éléments complètement indépendants du développement en cours.Développement d'un module dynamique pour Bing Maps AJAX v7 avec Canvas et HTML5

Ces modules doivent être construit de manière à être complètement abstrait et indépendant de votre implémentation ce qui vous permettra notamment de construire un catalogue de fonctionnalités mutualisé entre plusieurs projets. C’est l’approche à privilégier dans le cas de développement d’un quelconque Framework par dessus le contrôle AJAX v7.

Afin d’illustrer l’utilisation et le développement d’un module d’extension, j’ai choisi de créer un module permettant de créer et surtout ajouter, des punaises à travers un canvas HTML5 de manière à fournir des performances optimales sur les navigateurs modernes.

  • Développement du module :

Le développement d’un module repose sur un pattern simple à respecter qui permet de définir un objet global et des méthodes associés.

imageL’ensemble de la démarche de création d’un module peut être retrouvée ici dans la MSDN : http://msdn.microsoft.com/en-us/library/hh125836.aspx

imageLe code source du module sera disponible à travers le portail de Module Bing Maps et en utilisant ce lien : http://www.boonaert.net/element/bingmaps/modules/CanvasEntityManager.js

Le module réalisé s’inspire fortement de celui réalisé par mon camarade Alastair Aitchison réalisant des cartes de chaleur mais sera étendu de manière à couvrir.

  • Cycle de vie d’un module :

Le module est tout d’abord enregistrer de manière à lui définir un nom et surtout une adresse correspondant au script à charger, pour cela on utilise la méthode statique registerModule() disponible à travers l’espace de nom Microsoft.Maps.

Le module est ensuite chargé ce qui correspond globalement à l’instanciation et l’initialisation de ce composant. Cette action est réalisé via l’appel à la méthode statique loadModule().

A la fin du module, il est important de noter que le module signale au contrôle AJAX v7 qu’il a été chargé de manière à déclencher le callback qui dans notre cas charge des données. Ce comportement est établi à travers l’utilisation de l’évènement moduleLoaded.

  • Utilisation du module dans une application d’exemple :

Dans une page statique HTML, le module est utilisé comme suit :

// Register the module
Microsoft.Maps.registerModule('CanvasEntityManager', './CanvasEntityManager.js');
Microsoft.Maps.loadModule('CanvasEntityManager', { callback: loadElements });

Dès lors, le traitement effectué dans le code de l’évènement de callback qui est déclenché est le suivant :

function loadElements() {
    var manager = new CanvasEntityManager(map);
    manager.drawElements(pins); }

Le code s’en voit très fortement simplifié et le module est complètement réutilisable dans d’autres applications.

  • Résultat en exécution :

Insertion en masse avec utilisation du Canvas HTML5 Bing MAps V7

  • Analyse du résultat dans le DOM du contrôle :

Il est important de noter que les deux techniques diffèrent dans la gestion des éléments au sein du DOM du navigateur.

Voici une vue du DOM dans le navigateur dans le cas d’une utilisation classique :

DOM element Bing Maps v7 ajout d'un grand nombre de punaise

Bing Maps DOM en cas d'ajout en masse de punaise

La vue du DOM dans le navigateur dans le cas de l’utilisation du canvas :

Bing Maps Canvas HTML 5 DOM view - utilisation avec HTML5

Bing Maps Canvas HTML 5 DOM view

  • Comparaison des résultats :

En test, il n’y a aucun photo quant à la rapidité ou la fluidité de l’utilisation du canvas qui ne change pas peu importe le nombre de point. Le contrôle Bing Maps avec 10000 punaises laisse apparaitre un ralentissement tout à fait logique puisque Microsoft recommande de ne pas excéder 500 punaises.

Temps de rendu et traitement JavaScript

Le gain est significatif notamment en ce qui concerne le temps de rendu puisqu’ici nous tirons partie de l’accélération graphique des éléments.

Voici l’analyse des temps de rendu et traitement JavaScript:

image

Ici les premières colonnes de chaque navigateur sont pour 1000 punaises, les secondes sont pour 10000 punaises.

On remarque alors que selon les navigateurs, le changement modifie les temps en bien ou en mal. Je suis par ailleurs assez surpris des résultats et suis très persuadé qu’il est possible d’optimiser soit de manière générale, soit pour chaque navigateur de manière indépendante et dédiée.

Impact mémoire

En mémoire aussi on peut observer une différence notable puisque l’ensemble des éléments n’est pas directement présent dans le DOM.

Voici l’analyse de l’état de la mémoire :

Bing Maps memoire empreinte v7

 

  • Considérations :

Bing Maps HTML5 canvas interet en cartographieL’utilisation de ces technologies HTML5 pour afficher de l’information cartographique offre un spectre très étendu de possibilité de présentation, attention toutefois à limiter votre impact en termes de transport réseau et de mémoire dans la gestion des vos éléments.

Le gain ici n’est pas forcément très visible, mais sur nombre de traitement de type “image”, le gain est considérable et c’est sans doute un des gros avantages de l’utilisation du canvas dans un contexte de traitement client par dessus des cartes interactives.

Il est également important de considérer les navigateurs qui ne proposent pas cette fonctionnalité et par conséquent de gérer les scénarios de fallback pour garantir la compatibilité et l’affichage dans les navigateurs ciblés.

Au delà de ces considérations technique, l’affichage d’un si grand nombre de point est une incohérence en soit sous cette forme, on ne peut pas distinguer ou tirer intérêt de cette présentation dans ces cas précis. Par contre, pour générer des cartes de densité de points, de chaleur ou autre, cela peut tout à fait être une option pertinente.

 

Conclusions

Ces possibilités d’extension sous différentes formes permettent d’enrichir le contrôle AJAX v7 tout en vous garantissant une réutilisation maximale de vos développement.

Dans les faits, les modules et extensions ici développés ne doivent pas présenter de dépendances à votre code d’implémentation, vous permettant ainsi de les utiliser dans de nombreux projets. Veillez à éventuellement les extraire dans des fichiers externes (geo.extensions.js par exemple).

A noter également que, si vous le pouvez, vous avez toujours la possibilité de partager vos modules à travers le projet CodePlex dédié qui représente la galerie des contributions communautaires des développements autour de la plateforme Bing Maps for Enterprise et plus particulièrement ce contrôle AJAX en version 7.bonnes pratiques et conclusions bing maps ajax v7 et html5 et extensions

Cet article nous a permis d’aborder les notions d’extension ainsi qu’une brève introduction à l’utilisation des possibilités d’HTML5 au sein d’une carte issue du contrôle Bing Maps AJAX V7, ce qui nous permettra d’aborder ces éléments davantage dans le détail dans les prochains articles.

Si vous avez des questions concernant ces possibilités d’extension ou sur l’utilisation des fonctionnalités d’HTML5 dans un contexte cartographique, n’hésitez surtout pas à me contacter.

Comme indiqué depuis septembre 2011 sur les différentes sources que ce soit le blog et site officiel, les messages envoyés aux utilisateurs ou les différents autres moyens de communication, le service de jeton autrefois utilisé par MapPoint et réutilisé dans ce même esprit par Bing Maps for Enterprise est remplacé par le service d’authentification par clé.

Ce service de jeton sera définitivement coupé le 30 mars 2012.

Bing Maps migration du service de jeton vers les clés Bing - AJAX v6.3, v7 , SOAP, REST et Silverlight

 

Bing Maps jeton remplacé par les clésQuels sont les composants impactés ?

Le système d’authentification étant une partie importante de la plateforme, on le retrouve dans de nombreux composants.

Parmi les composants impactés, on retrouve :

  • Le contrôle Bing Maps AJAX v6.3 (et précédentes qui pointent de toute manière sur cette version désormais)
  • Le contrôle Silverlight
  • Bing Maps Web Services SOAP

Si vous utilisez ces composants, veillez à vérifier le type d’authentification et autorisation utilisé au sein du développement et à migrer le cas échéant.

 

Quels gains ?

Le changement de système apporte son lot de nouveautés et d’avantages tels que :

  • Performances améliorées : évite l’étape nécessaire à la récupération du jeton avant l’appel à la plateforme
  • Pas de gestion d’expiration des jetons, les clés n’expirent pas
  • Gestion améliorée et visualisation plus précise de l’utilisation de la plateforme Bing Maps for Enterprise à travers le portail dédiéBing Maps performances optimisées

Ainsi, la modification obligatoire apporte un réel plus pour l’utilisateur de la plateforme et l’applicatif bénéficie de cette migration en observant des performances améliorées.

 

Comment migrer facilement ?

Afin de migrer de l’ancien service d’authentification vers le nouveau, il est nécessaire procéder par étape et de gérer vos clés d’application à travers le portail d’administration Bing Maps for Enterprise disponible ici : http://www.bingmapsportal.com/

Microsoft a bien entendu documenté ces éléments avec précision et vous retrouverez plusieurs exemples de code et ressources documentaires utiles pour réaliser cette migration sans souci. image

Ces éléments sont disponibles à travers le lien suivant : http://msdn.microsoft.com/en-us/library/gg197514.aspx

Je vous recommande naturellement de procéder avec prudence en conservant notamment une copie de vos développements avant modification de manière à prévenir tout risque de perte de code utile.

 

Qu’est-ce qui change et comment migrer ?

En concret, nous allons ici aborder les éléments qui changent pour chaque composants de la plateforme impactés par cette migration.

  • Contrôle AJAX v6.3

Le contrôle AJAX v6.3 utilisé dans un contexte entreprise nécessitait de spécifier les informations d’authentification.

var token = "<%=clienttoken %>";
var map = new VEMap('mymap');
map.SetClientToken(token);
map.LoadMap();

Désormais le code à utiliser et légèrement modifié est le suivant :

var key = "BINGMAPSKEY";
var map = new VEMap('mymap');
map.SetCredentials(key);
map.LoadMap();

imageLa méthode SetCredentials de la classe VEMap est maintenant celle qui faut utiliser pour spécifier les informations d’authentification, la document est disponible ici : http://msdn.microsoft.com/en-us/library/ee692182.aspx

 

  • Contrôle Silverlight

Le contrôle Silverlight nécessite de spécifier la clé en utilisant la classe dédiée ApplicationIdCredentialsProvider au lieu d’utiliser la classe ClientTokenCredentialsProvider autrefois utilisée.

Ainsi le code utilisé, permettant de spécifier la clé peut être le suivant en code XAML déclaratif :

<UserControl x:Class="SilverlightApplication1.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:m="clr-namespace:Microsoft.Maps.MapControl;assembly=Microsoft.Maps.MapControl"
    Width="1024" Height="768">
    <Grid x:Name="LayoutRoot" Background="White">
        <m:Map x:Name="myMap" CredentialsProvider="BINGMAPSKEY" Mode="Road"/>
    </Grid>
</UserControl>

Pour information, l’ensemble des exemples documentés respectaient ce processus et ces bonnes pratiques.

 

  • Utilisation des Web Services SOAP

L’utilisation des services SOAP nécessite la définition de la propriété ApplicationId de la classe Credentials dont l’objet instancié est passé comme valeur de la propriété Credentials de l’objet la classe GeocodeRequest ou de tout autre requête d’imagerie, de calcul d’itinéraire ou autre héritant toutes de la classe de base RequestBase.

Voici maintenant le code à utiliser :

string key = "BINGMAPSKEY";

GeocodeRequest geocodeRequest = new GeocodeRequest();

// Set the credentials using a valid Bing Maps Key
geocodeRequest.Credentials = new Credentials();
geocodeRequest.Credentials.ApplicationId = key;

// Set the full address query
geocodeRequest.Query = "165 avenue de bretagne, Lille, France";

// Make the geocode request
GeocodeServiceClient geocodeService = new GeocodeServiceClient();
GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest);

On remarquera qu’il est tout à fait possible d’extraire cette clé dans un fichier de configuration ou tout autre solution permettant de modifier la clé sans reconstruire l’ensemble de l’application.

 

Conclusions

Cette migration longuement anticipée et très documentée va nécessairement imposer une migration de certaines parties de vos applications qui utilisaient le système de jeton.

A travers cet article, nous avons pu voir que la migration est relativement aisée et apporte des éléments intéressants pour vos applications.

Si toutefois vous rencontrez un souci particulier pour effectuer cette migration, n’hésitez pas à me contacter directement ou à contacter votre responsable au sein de Microsoft qui pourra vous rediriger vers moi ou une autre personne du support technique.

Après avoir introduit les différents types d’éléments géographiques disponibles au sein de SQL Server et en abordant leurs déclarations et les règles de définition associées, nous allons pouvoir enfin tirer partie du meilleur en utilisant les méthodes spatiales spécifiques à ce type de données.

SQL Server geography 2008 et 2012 et SQL Azure - Presentation des méthodes standards OGC telles que STUnion(), STBuffer(), STSymDifference()...

Cet article s’incrit dans la série dédiée à l’explication du type géographique au sein de SQL Server 2008, 2012 et Azure.

Retrouvez les anciens articles sur le même sujet :

 

Standards et systèmes d’information géographiques (SIG)

OGC logoLes standards sont établis par l’OGC (Open Geospatial Consortium) et définissent un comportement, un prototype et un résultat pour les méthodes que nous allons découvrir ici.

Afin d’obtenir davantage d’informations sur les standards et sur la définition de ces méthodes, n’hésitez pas à parcourir les liens suivants :

Il est important de rappeler qu’il existe de nombreux serveurs de base de données permettant de stocker ces éléments géographiques, on parle souvent de serveur de base de données spatiales.

Voici les principaux serveurs de base de données en question :

  • Oracle Spatial
  • IMB DB2
  • Microsoft SQL Server 2008 et supérieur
  • Postgre SQL

Attention, il est important de différencier le serveur de base de données ayant le support de types spatiaux et les systèmes d’information géographiques complets.

SQL Server 2008 et 2010 SIG Systeme d'information géographique

En effet, ces solutions intègrent la plupart du temps des services complémentaires ou des modèles d’exposition de données qui dépasse la simple restitution sous forme d’enregistrement de tables (ex : WMS, WMS avec cache, capacité de géocodage, calcul d’itinéraire avec contraintes…).

 

Présentation des méthodes

Il existe donc plusieurs méthodes standards que tout serveur qui se dit ‘spatial’ doit pouvoir executer en restituant des résultats cohérents.

Ces méthodes sont les suivantes :

Méthodes Description rapide
STArea() Calcul de l’aire
STAsBinary() Représentation binaire (WKB)
STAsText() Représentation textuelle (WKT)
STBuffer() Tampon autour des données
STDifference() Difference entre une technologie et une autre
STDimension() Nombre de dimension
STDisjoint() Liaison entres les géométries
STDistance() Distance entre les géométries
STEndPoint() Dernier point de la géométrie
STGeometryN() Point identifié (n) sur la géométrie
STGeometryType() Type de géométrie
STIntersection() Géométrie d’intersection entre géométries
STIntersects() Vérification de l’intersection entre géométries
STIsClosed() Fermeture de la géométrie
STIsEmpty() Possède une données
STLength() Longueur d’une géométrie
STNumGeometries() Nombre de géométries composants
STNumPoints() Nombre de points composants au total
STPointN() Point identifié (n) de la géométrie
STSrid() SRID de la géométrie
STStartPoint() Premier point de la géométrie
STSymDifference() Différence symétrique entre 2 géométries
STUnion() Union entre géométries

Il existe également plusieur méthodes statiques standards qui sont abordées dans cet article.

MSDN SQL Server Geography bonnes pratiques et utilisationsBien entendu, il est tout à fait possible d’utiliser ces méthodes qui sont implémentées dans SQL Server 2008 et supérieure (2012 ‘Denali’) avec les types géographiques ou géométriques :
http://msdn.microsoft.com/en-us/library/bb933914.aspx

 

Implémentation technique dans SQL Server

Afin de comprendre l’intérêt de ces méthodes, il faut se mettre dans la situation où nous souhaitons localiser des éléments, des zones ou des lignes référencée géographiquement et parmis lesquels nous souhaitons réaliser plusieurs opérations de tri, de sélection ou filtre ou bien même d’aggrégation.

Ici nous n’aborderons pas les précédentes solutions qu’il nous fallait réaliser en SQL Server 2005, mais nous pouvons très rapidement comprendre l’intérêt de l’utilisation de ces méthodes en termes de développement, mais aussi en termes de performances puisque le moteur SQL Server inclut de manière native ces méthodes et se révèle donc particulièrement rapide.

On remarque, dans l’implémentation SQL Server, le préfixe de ces méthodes “ST” différenciant ainsi ces méthodes de celles spécifiques que nous aborderons dans un prochain article.

 

  • Méthodes de calcul sur les éléments

    • Calcul de distance : STDistance

Description :

Cette méthode permet de calculer la distance la plus courte qui sépare deux éléments en tenant bien évidemment compte de la distance réelle en fonction du référentiel dans lequel on travaille. Il s’agit donc de la longueur de la ligne géodésique liant les éléments concernés renvoyée en mètre.

Schéma descriptif :

STDistance() Explication

Implémentation SQL Server :

Voici l’implémentation d’exemple utilisant 2 points comme éléments :

--STDistance
DECLARE @pointA AS GEOGRAPHY
SET @pointA = GEOGRAPHY::STGeomFromText('POINT(4 45)', 4326);
DECLARE @pointB AS GEOGRAPHY
SET @pointB = GEOGRAPHY::STGeomFromText('POINT(3 44)', 4326);
SELECT @pointA.STDistance(@pointB) as 'Distance'

Résultat :

STDistance resultat de l'execution SQL Server

 

    • Calcul de la longueur d’un élément : STLength

Description :

Cette méthode permet de calculer la longueur d’un élément défini et retourne le résultat en mètre.

Note : La longueur d’un point retourne 0.

Cas pratiques :

- Longueur du Tour de France : distance parcourue

Schéma descriptif :

STLength() sql geography description

 

Implémentation SQL Server :

--STLength
DECLARE @line AS GEOGRAPHY
SET @line = GEOGRAPHY::STGeomFromText('LINESTRING(3 45,4 45,4 44)', 4326);
SELECT @line as 'Line', @line.STLength() as 'Length'

Résultat :

STLength() resultat geography

STLength() resultat geography

 

    • Calcul de l’aire : STArea

Description :

Cette méthode permets de calculer l’aire d’un élément tel qu’un polygon ou un élément complexe.

Note : L’aire d’un point ou d’une ligne vaut 0.

Cas pratiques :

- Aire d’une parcelle cadastrale
- Surface boisée en France

Schéma descriptif :

STArea() sql geography

 

Implémentation SQL Server :

--STArea
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon as 'Polygon', @polygon.STArea() as 'Area'

Résultat :

STArea() resultat geography

STArea() resultat geography

 

  • Méthodes de parcours ou manipulation des propriétés des éléments

    • Détermination du point de départ de l’élément : STStartPoint

Description :

Cette méthode permet de retourner le premier point (géométrie) d’une géométrie définie.

Note : La méthode renvoie le point concerné dans le cas où la géométrie correspond à un simple point.

Schéma descriptif :

STStartPoint() description details

Implémentation SQL Server :

--STStartPoint
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon as 'Polygon', @polygon.STStartPoint().ToString() as 'StartPoint'

Résultat :

STStartPoint() geography resultat

On remarque donc qu’il s’agit bien du premier point défini dans la déclaration de la géométrie de type polygone.

 

    • Détermination du dernier point de l’élément : STEndPoint

Description :

Cette méthode retourne sur le même principe que la méthode précédente, le dernier point défini dans la géométrie.

Note : Dans le cas d’un point, cette méthode retounr le point correspondant à la géométrie. Dans le cas d’un polygone, on observera souvent le même résultat que la méthode STStartPoint() tout simplement parce que la géométrie d’un polygone doit être fermée et par conséquent le point de définition initial est le même que le point final.

Schéma descriptif :

STEndPoint() description sql geography

 

Implémentation SQL Server :

--STEndPoint
DECLARE @line AS GEOGRAPHY
SET @line = GEOGRAPHY::STGeomFromText('LINESTRING(3 45,4 45,4 44)', 4326);
SELECT @line as 'Line', @line.STEndPoint().ToString() as 'EndPoint'

Résultat :

STEndPoint() geography resultat

 

    • Récupération du nombre de points de l’élément : STNumPoints

Description :

Cette méthode retourne le nombre de point composant la géométrie définie.

Note : Dans le cas d’un point, la méthode retourne 1.

Schéma descriptif :

STNumPoints() sql geography

 

Implémentation SQL Server :

--STNumPoints
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon as 'Polygon', @polygon.STNumPoints() as 'NumPoints'

Résultat :

STNumPoints() resultat geography

 

    • Récupération d’un point spécifique : STPointN

Description :

Cette méthode permet de récupérer un point particulier déterminé par son index, composant la géométrie.

Note : l’index noté N est un entier et commence à 1. Par conséquent STPointN(1) équivaut à STStartPoint().

Schéma descriptif :

STPointN() sql geography

 

Implémentation SQL Server :

--STPointN
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon as 'Polygon', @polygon.STPointN(1).ToString() as 'STPointN'

Résultat :

STPointN() result geography

 

    • Récupération du type d’élément : STGeometryType

Description :

Cette méthode renvoie le type de géométrie qui est associé à l’élément défini. Ce type peut donc correspondre aux différents présentés dans les articles précédents de cette série : Point, linestring, polygon ou collections…

Schéma descriptif :

image

Implémentation SQL Server :

--STGeometryType
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon as 'Polygon', @polygon.STGeometryType() as 'Type'

Résultat :

STGeometryType() resultat geography

 

    • Récupération d’une géométrie spécifique de l’élément : STGeometryN

Description :

Cette méthode est très utile dans le cas de collection de géométrie car elle permet de renvoyer une instance géométrique de cette collection. Il devient par exemple possible de récupérer le N-ième élément d’une collection de géométrie et donc potentiellement de récupérer les inner-rings d’un polygone dit “à trous”.

Schéma descriptif :

STGeometryN()

Implémentation SQL Server :

--STGeometryN
DECLARE @multipolygon AS GEOGRAPHY
SET @multipolygon = GEOGRAPHY::STGeomFromText('MULTIPOLYGON(((3 45,4 45,4 46,3 45)),((5 46,6 47,5 47,5 46)))',4326)
SELECT @multipolygon, @multipolygon.STGeometryN(2) as 'SecondGeometry'

Résultat :

STGeometryN() resultat sql geography

 

    • Récupération du nombre de dimension associée à la représentation de l’élément (2D ou 3D) : STDimension

Description :

Cette méthode retourne le nombre de dimension associée à la représentation de l’élément, ainsi une surface s’incrivant dans un plan simple comportera logiquement 2 dimensions, tandis que si l’on définit cette surface avec des points indiquant l’altitude (la valeur Z) on obtiendra 3 dimensions.

Implémentation SQL Server :

--STDimension
DECLARE @line AS GEOGRAPHY
SET @line = GEOGRAPHY::STGeomFromText('LINESTRING(3 45,4 45,4 44)', 4326);
SELECT @line as 'Line', @line.STDimension() as 'Dimension'
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon as 'Polygon', @polygon.STDimension() as 'Dimension'

Résultat :

STDimension() resultat sql geography

 

    • Récupération du SRID associé : STSrid

Description :

Cette méthode retourne l’identifiant du référentiel spatial utilisé (SRID) et qui permet de définir l’élément.

Implémentation SQL Server :

--STSrid
DECLARE @line AS GEOGRAPHY
SET @line = GEOGRAPHY::STGeomFromText('LINESTRING(3 45,4 45,4 44)', 4326);
SELECT @line as 'Line', @line.STSrid as 'SRID'

Résultat :

STSrid resultat sql geography geometry

 

  • Méthodes de relations entre les éléments

    • Vérification d’intersection : STIntersects

Description :

Cette méthode vérifie l’intersection entre deux géométries utilisées. Elle retourne True si les géométries présentent une intersection.

Cas pratiques :

- Vérification de l’existence d’une intersection
- Détection de points communs entre deux géométries

Schéma descriptif :

STIntersects() sql server geography

 

Implémentation SQL Server :

--STIntersects
DECLARE @polygonA AS GEOGRAPHY, @polygonB AS GEOGRAPHY
SET @polygonA = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SET @polygonB = GEOGRAPHY::STGeomFromText('POLYGON((3 44,4 44,4 45,3 44))', 4326);
SELECT @polygonA.STIntersects(@polygonB) AS 'Intersects'

Résultat :

STIntersects sql geography

 

    • Détermination de l’intersection : STIntersection

Description :

La méthode STIntersection() retourne la ou les géométries correspondant à l’intersection entre deux géométries utilisées.

Cas pratiques :

- Recherche polygonale
- Zone concernée par un projet de construction ou d’urbanisme

Schéma descriptif :

STIntersection() sql geography precision et description

 

Implémentation SQL Server :

--STIntersection
DECLARE @polygonA AS GEOGRAPHY, @polygonB AS GEOGRAPHY
SET @polygonA = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SET @polygonB = GEOGRAPHY::STGeomFromText('POLYGON((3 44,4 44,4 45,3 44))', 4326);
SELECT @polygonA.STIntersection(@polygonB) AS 'Intersection'
UNION ALL SELECT @polygonA
UNION ALL SELECT @polygonB

Résultat :

STIntersection sql geography

 

    • Différence entre deux éléments : STDifference

Description :

Cette méthode permets d’obtenir la géométrie correspondant à la partie de la géométrie n’étant pas en intersection avec une seconde géométrie.

Cas pratiques :

- Surface non détruite par un événément climatique
- Tronçon de route non concerné par une zone travaux

Schéma descriptif :

STDifference() sql server geography

 

Implémentation SQL Server :

--STDifference
DECLARE @polygonA AS GEOGRAPHY, @polygonB AS GEOGRAPHY
SET @polygonA = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SET @polygonB = GEOGRAPHY::STGeomFromText('POLYGON((3 44,4 44,4 45,3 44))', 4326);
SELECT @polygonA.STDifference(@polygonB) AS 'Difference A from B'

Résultats :

image

 

    • Différence symétrique entre deux éléments : STSymDifference

Description :

Cette méthode permet de récupérer la différence symétrique entre deux géographies. En clair, la méthode permet de récupérer tout ce qui n’est pas commun aux deux géométries utilisées.

Cas pratiques :

- Zone couverte par un seul opérateur mobile
- Extraction de points distincts (non-communs entre 2 collections de points)

Schéma descriptif :

STSymDifference() sql server geography

Implémentation SQL Server :

--STSymDifference
DECLARE @polygonA AS GEOGRAPHY, @polygonB AS GEOGRAPHY
SET @polygonA = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SET @polygonB = GEOGRAPHY::STGeomFromText('POLYGON((3 44,4 44,4 45,3 44))', 4326);
SELECT @polygonA.STSymDifference(@polygonB) AS 'SymDifference'

Résultats :

STSymDifferenc() stsymdifference between a and b sql server geography (SQL Server 2012)

 

 

    • Combinaison avec un autre élément : STUnion

Description :

Cette méthode permet de récupérer la géométrie résultant de l’union des deux géographies.

Cas pratiques :

- Couverture géographique et aérienne cumulée
- Ensemble des batis d’un projet immobilier

Schéma descriptif :

STUnion() resultat sql geography

 

Implémentation SQL Server :

--STUnion
DECLARE @polygonA AS GEOGRAPHY, @polygonB AS GEOGRAPHY
SET @polygonA = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SET @polygonB = GEOGRAPHY::STGeomFromText('POLYGON((3 44,4 44,4 45,3 44))', 4326);
SELECT @polygonA.STUnion(@polygonB) AS 'Union'

Résultat :

STUnion() sql geography

 

  • Méthodes de transformation d’éléments

    • Transformation en représentation binaire WKB : STAsBinary

Description :

Cette méthode permet de renvoyer la valeur de la colonne sous forme de binaire sous forme de Well Known Binary (WKB)

Implémentation SQL Server :

--STAsBinary
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon.STAsBinary() AS 'WKB'

Résultat :

STAsBinary() sql geography

 

    • Transformation en représentation textuelle WKT : STAsText

Description :

Comme la précédente, cette méthode permet de renvoyer la valeur modifiée mais cette fois-ci sous forme textuelle Well Known Text (WKT).

Implémentation SQL Server :

--STAsText
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon.STAsText() AS 'WKT'

Résultat :

STAsText() sql geography

 

    • Création d’un buffer autour de l’élément : STBuffer

Description :

Cette méthode permet de composer une autre géométrie tampon autour de celle d’origine en utilisant une distance passée en paramètre.

Cas pratiques :

- Création d’une zone de recherche à vol d’oiseau autour d’un point spécifique 
- Création d’un corridor de recherche

Schéma descriptif :

STBuffer() sql server geography

 

Implémentation SQL Server :

--STBuffer
DECLARE @line AS GEOGRAPHY
SET @line = GEOGRAPHY::STGeomFromText('LINESTRING(3 45,4 45,4 44)', 4326);
SELECT @line.STBuffer(5000) AS 'Buffer'
DECLARE @polygon AS GEOGRAPHY
SET @polygon = GEOGRAPHY::STGeomFromText('POLYGON((3 45,4 44,4 45,3 45))', 4326);
SELECT @polygon.STBuffer(5000) AS 'Buffer'

Résultat :

STBuffer() sql geography buffer (tampon)

 

  • Méthodes statiques sur le type géographique

    • Création d’un élément à partir de la représentation textuelle connue – WKT : STGeomFromText

Description :

Cette méthode statique permet d’initialiser la valeur d’une colonne géographique à partir de la définition WKT.

Implémentation SQL Server :

--STGeomFromText
DECLARE @line AS GEOGRAPHY
SET @line = GEOGRAPHY::STGeomFromText('LINESTRING(3 45,4 45,4 44)', 4326);
SELECT @line.STAsBinary() AS 'Line WKB', @line as 'Line'
Résultat :

STGeomFromText() resultat sql geography geometry

 

    • Création d’un élément à partir de la représentation binaire connue – WKB : STGeomFromWKB

Description :

Dans le même esprit que la méthode précédente, cette méthode statique permet d’initialiser la valeur d’une colonne géographique ou géométrique à partir de la définition WKB.

Implémentation SQL Server :

--STGeomFromWKB
DECLARE @line AS GEOGRAPHY
SET @line = GEOGRAPHY::STGeomFromWKB(0x010200000………000004640, 4326);
SELECT @line AS 'Line', @line.STAsText() AS 'WKT'

Résultat :

STGeomFromWKB() resultat sql geography geometry

 

Conclusions

Ces méthodes et les possibilités offertes par ces opérations sur les données montrent une fois de plus l’intérêt de l’utilisation de ce type géographique (ou bien même le type géométrique) surtout dans leurs utilisations combinées.

En effet, en l’absence de type géographique ou géométrique ou en cas de non-utilisation de ces types, il devient nécessaire d’utiliser des formules de calcul coûteuses et certainement approximatives et délicates à écrire (ex : calcul de surface d’une géométrie multiples, génération du buffer d’une zone) pour obtenir des résultats exploitables et précis alors qu’ici en utilisant le moteur SQL Server, ces méthodes sont présentes et conformes aux standards imposés et directement utilisables sur ces types.

Dans un prochain article nous nous intéresserons aux méthodes spécifiques à SQL Server (méthodes non standards) et nous analyserons avec précision les performances de chacunes de ces opérations.

La plateforme Bing Maps for Enterprise nécessite une licence qui doit être choisie ou qui est attribuée avec soin en fonction du type d’application dans laquelle on intègre la plateforme.

A travers cet article nous allons donc aborder le point des licences disponibles pour l’utilisation de la plateforme Bing Maps for Enterprise.

Licence Bing Maps - Transaction et session - description du fonctionnement de Bing Maps

imageCet article n’aborde pas les informations tarifaires et ne se veut pas être le remplacement des informations plus précises qu’il est possible d’obtenir directement auprès des équipes Microsoft.

Il fournit un premier niveau d’information qui saura vous aider et vous donner de bons indicateurs sur les types de licence disponibles et celle qui sera à choisir ou qui vous sera associée et le fonctionnement technique de la plateforme au niveau de la facturation qui est liée.

 

Système d’authentification

Chaque requête ou chaque chargement d’une carte effectue une requête vers les services de la plateforme Bing Maps qui permets de comptabiliser chaque opération de consommation des services ou d’utilisation du contrôle.

L’authentification est réalisé en utilisant une clé d’application qui indique le contrat lié, en complément de cette information, l’URL du site appelant (dans le cas d’intégration Web) est utilisé ainsi que l’adresse IP d’appel. Cela permets notamment à Microsoft d’identifier les appels illicites.

Transaction et session - description du fonctionnement de Bing Maps

Pour récupérer une clé d’authentification, il faut se rendre sur le portail Bing Maps for Enterprise (Account Center) et une fois identifié à l’aide d’un compte associé à un live ID, il est possible de générer des clés pour les applications : http://www.bingmapsportal.com/

Par défaut, il est possible de générer 5 clés associées par compte identifié et associé à un Live ID. Il est possible d’excéder cette limite avec les licences entreprise et selon les accords de licences et après avoir contacté Microsoft via mpnet@microsoft.com.

Bing Maps Account Center - Generation des clés Bing Maps (Bing Maps Key generation)

 

Sessions et transactions

Au delà même des types de licence, on retrouve une unité qui comptabilise les sessions et les transactions. Il est donc nécessaire d’éclaircir les points concernant ces 2 types d’intéractions.

  • La transaction

Une transaction correspond à un appel à la plateforme quel qu’il soit que ce soit le chargement d’un contrôle (AJAX ou Silverlight), l’appel aux Web Services ou à des services tiers.

Il existe des transactions facturables et non-facturables, le statut est défini en fonction du contexte d’utilisation. Voici le détail permettant de différencier les transactions facturables et donc comptabilisés et celles non-facturables qui ne sont comptabilisées que pour information.

Bing Maps licence et transaction facturable ou non facturable en fonction de l'utilisation
Détails complets disponibles ici : http://www.boonaert.net/documents/BingMaps/Bing%20Maps%20-%20Transaction%20information.xlsx

Source: http://msdn.microsoft.com/en-us/library/ff859477.aspx

 

  • La session

Une session correspond au chargement du contrôle AJAX ou Silverlight qui est donc généralement associé au chargement de la page.

Au sein d’une session, il est possible d’effectuer des déplacements sur la carte, des changements de niveaux de zoom mais également des appels au Web Services pour géocoder des lieux, calculer des itinéraires ou bien résoudre des adresses.

L’ensemble de ces intéractions réalisées dans le cadre d’une session est comptabilisé comme des transactions non-facturables car associée à une session et non incrémentées de manière individuelle.

 

Différents types de licencesLicence Bing Maps for Enterprise

Afin de s’adapter le plus facilement au besoin client, la plateforme propose plusieurs types de licences dont voici la présentation complète issue des informations disponibles sur le site officiel :
http://www.microsoft.com/maps/product/licensing.aspx

 

  • Licence développeur

Ce type de licence ne permet pas une utilisation dans une application mise en production quelle qu’elle soit. Elle permet d’assurer un développement dans les mêmes conditions que la réalisation finale.

Avec cette licence, le développeur ou l’équipe utilisant la même clé, possède une limite de 500 000 transactions ou 125 000 sessions pour une période d’un an.

Ce type de licence donne accès à l’ensemble de la plateforme et des contenus.

 

  • Licence entreprise

Licence entreprise par utilisateurs nommés

Dans cette configuration, il faut au préalable connaître le nombre d’utilisateurs de votre application exploitant la plateforme Bing Maps for Enterprise.

Avec ce type de licence, il est alors possible d’effectuer un nombre d’appels non-limités par utilisateurs ce qui permets d’afficher autant de cartes que souhaités ou d’effectuer autant d’appel que souhaité vers les Web Services.

Il s’agit d’un contrat à transactions illimitées pour un nombre fini et connu d’utilisateur, ce nombre doit être communiqué à Microsoft et c’est une informations determinant le coût associé à l’utilisation de la plateforme.

 

Licence entreprise par transaction

Cette licence correspond à un nombre fini de transactions / sessions établi pour une période de mois déterminés par le contrat (par exemple 500 000 transactions pour une période de 12 mois).

Les transactions sont comptabilisés comme expliqué précédemment.

 

Licence entreprise par équipement de suivi

Lors d’utilisation de la plateforme Bing Maps for Enterprise dans le cadre de suivi de flotte, il existe un modèle de licence adapté permettant d’exploiter parfaitement la plateforme pour effectuer des appels illimités aux services et de suivre les éléments sur une carte interactive.

Ce type de licence donne accès à l’ensemble de la plateforme ainsi qu’aux divers contenus sans restriction particulière.

  • Licence pour application mobile

Bing Maps iPhone, iPad, Android et WP7 licenceCette licence est dédiée aux applications mobiles publiques distribuées à travers les MarketPlaces ou AppStore.

L’exploitation de la plateforme peut être réalisée depuis une version mobile du site ou depuis les différents SDK :

Ce type de licence donne plein accès à l’ensemble de la plateforme et aux différents contenus disponibles à l’exception des contenus liés au informations de traffic routier.

 

  • Licence pour organisation à but non-lucratif

Les organisations à but non-lucratif ou les associations peuvent bénéficier d’une licence gratuite leur permettant d’accèder à la plateforme et au contenu disponibles excepté le contenu en vue oblique (Bird’s eye view).

L’implémentation doit être réalisé sur un site publiquement accessible, l’accès à la carte ne doit pas être protégé par un mot de passe.

 

  • Licence pour l’éducation

Cette licence est réservé aux institutions d’éducation telle que les collèges, les lycées ou universités qui souhaiterait l’utiliser pour des projets d’études à but non commercial (but d’éduction/formation).

L’implémentation doit être réalisé sur un site publiquement accessible, l’accès à la carte ne doit pas être protégé par un mot de passe.

Cette licence donne accès à l’ensemble des fonctionnalités et contenu de la plateforme exceptés les contenus de traffic et l’imagerie en vues obliques.

 

  • Licence pour les diffuseurs et annonceurs (Broadcast)

Les contenus et la plateforme peuvent être exploités et présentés en télévision ou cinéma de manière gratuite sous formes de vidéos et images.
Sous certaines conditions qu’il est nécessaire d’étudier aves les équipes de Microsoft, il est également possible d’utiliser cette licence pour intégrer les composants sur un site Internet.

Cette licence donne accès à l’ensemble des fonctionnalités et des contenus exceptées les informations de traffic.

 

Autres cas d’utilisation

Les autres cas d’utilisation sont rares mais peuvent intervenir, je pense notamment au cas des organismes publiques ou gouvernementales qui sont soumis à des conditions particulières : http://www.microsoft.com/maps/product/licensing_for_government.aspx

A noter que certains autres cas peuvent ne pas entrer dans les modes de licences décris plus tôt, il faut alors en discuter avec l’équipe Bing Maps qui pourra estimer si le cas présenté peut entrer ou non dans une des licences précédentes ou s’il faut convenir d’un contrat adapté au besoin.

En résumé, si votre utilisation n’entre pas dans les licences décrites plus haut, il ne faut pas hésiter à contacter l’équipe dédiée qui pourra vous accompagner et trouver une solution adaptée et même vous proposer une discussion technique au besoin.

 Informations sur les licences et droits d'utilisation de Bing Maps et les cas particuliers pour les organismes publiques

Remarques

Afin d’être cohérent et surtout efficace, il faut rester logique et utiliser au mieux la plateforme.

J’entends par là, dans le cas où par exemple, on souhaite géocoder un très grand nombre de point il faut considèrer l’utilisation du service de géocodage en masse (en batch) déjà présenté à travers l’article disponible via ce lien : http://blogs.developpeur.org/nicoboo/archive/2011/06/20/bing-maps-for-enterprise-presentation-technique-du-service-de-g-ocodage-en-batch.aspx

En effet, l’appel successif ou récursif de la plateforme de manière massive n’apportent aucun gain par rapport à cette méthode, et même si l’on se retrouve dans un scénario de possibilité d’appels sans limites aux Web Services, il est bien souvent plus intéressant d’optimiser ces appels pour réduire la charge globale de l’application.

Aussi, le cas particulier de l’utilisation du service Spatial de la plateforme n’est pas présenté ici. Il est soumis à une utilisation adaptée :

 Choisir sa licence Bing Maps - explication

Comment choisir ?

Afin de choisir le meilleur mode de licence adapté à votre solution, il est recommandé d’analyser plusieurs points que je choisis de regrouper ici :

  • L’implémentation technique

Il faut savoir que dans la plupart des cas c’est l’implémentation technique qui détermine le type de licence à utiliser. En effet, l’accessibilité du site, les solutions techniques utilisées présentent forcément des contraintes qui déterminent le modèle de licence.

  • Le profil d’utilisation

Il est cependant important de comprendre comment les utilisateurs vont utiliser votre application car au-delà du simple fait d’optimisation de l’interface ou de présentation au sein de la solution développée, on peut très facilement obtenir une estimation approximative concernant les statistiques d’utilisation.

Le profil d’utilisateur établi permet en effet de pouvoir faire des estimations plus précises quant à l’utilisation global de la plateforme et dans le même temps.

  • Les besoins et contraintes techniques, métiers et budgétaires

Les besoins exprimés et les contraintes que l’on applique à votre application implémentant la plateforme Bing Maps for Enterprise vont également guider le choix de la licence.

Les besoins sont la pièce maitresse de la décision car elle dirige en réalité les points précédents. Mais lors des phases d’analyse de ces besoins, on peut conserver certains points en tête afin de s’organiser de manière à garantir le meilleur résultat.

Le besoin principal lorsque l’on traite de cartographie interactive concerne bien évidemment l’interactivité finale de l’application que l’on souhaite maximiser, imaginons un instant que nous souhaitons réaliser une application Web à destination des partenaires externes.
Sur l’interface vous souhaitez présenter un nombre important de point de distribution. Il sera bien évidemment préférable d’effectuer le géoréférencement des éléments en amont de la présentation sur la carte et pourquoi pas utiliser le géocodage de masse pour aider à apporter de la pertinence aux résultats. L’affichage des points n’en sera que plus rapide.

Dans la plupart des cas, Microsoft et son équipe dédiée au produit saura vous assister dans la décision à prendre concernant la licence.

 Contact commercial, produit et technique de Bing Maps

Qui contacter ?

  • Les contacts commerciaux et produit

Microsoft, c’est aussi et avant tout une équipe dédiée au niveau France et Europe pour accompagner les clients dans les choix mais aussi dans l’implémentation technique.

Cette équipe accompagne les clients et informe les sociétés intéressées par la plateforme en fournissant en général une présentation adaptée.

Si vous souhaitez contacter les équipes commerciales directement via le formulaire de contact suivant : https://support.microsoft.com/contactus/emailcontact.aspx?scid=sw;en;1327&WS=virtualearth

D’une manière générale, pour les questions concernant la plateforme, vous pouvez utiliser les adresses communiquées suivantes :

Pour les informations concernant les licences et les droits d’utilisation, il est possible de contacter l’adresse suivante : maplic@microsoft.com

 

  • Utiliser votre contact existant avec Microsoft

Dans le cas où vous travaillez déjà avec Microsoft, il est possible de revenir directement via votre account manager (PAM) ou votre revendeur qui pourra faire suivre la demande d’information vers les équipes Bing Maps.

 

  • Le support technique en France

Je remplis avec mon équipe au sein de Wygwam, ce rôle de support technique pour les pays francophones européens et donc agis en tant que V-TSP – Technical Support Partner pour la France, la Suisse et la Belgique.

V-TSP Bing Maps - Support technique Bing Maps en France, Suisse et Belgique

Il est très fréquent que nous répondions aux questions techniques et nous intervenions régulièrement en assistance ou en réalisation pour un projet ou une implémentation spécifique.

Pour les entreprises, c’est un gage de temps et de qualité avec des possibilités de transferts de compétences, connaissances et bonnes pratiques afin de devenir à termes autonome sur la plateforme et les choix techniques étroitement liés.

 

Licence et droits d'utilisation Bing Maps en France, Suisse et Belgique

Conclusions

A travers cet article, l’objectif était de présenter et expliquer de manière plus précise et plus claire les différents types de licences de la plateforme Bing Maps for Enterprise.

Comme on peut le remarquer il existe plusieurs type de licence qui correspondent respectivement à des cas d’utilisation ou des types d’organisations associés.

Je ne saurai que vous recommander d’échanger avec les équipes dédiées pour obtenir une information officielle mais j’espère que les précisions sur le licensing de la plateforme Bing Maps for Enterprise apporteront un peu plus de compréhension dans un modèle qui se révèle en réalité commun à de nombreuses plateformes.

N’hésitez pas à me contacter si vous avez une remarque ou une question à propos de cet article.

Les éléments de base définis dans le précédent article, il est parfois utile de pouvoir utiliser ces derniers afin de composer des éléments plus complexes avec des géométries fusionnées ou présentant des zones d’exclusion.

Sql Server 2008 et Denali (Sql Azure) - type géographique (geography) - MultiPoint, MultiLine, MultiPolygon, Collection - déclaration d'objet et règle de définition

Liens vers les articles liés

Cet article s’inscrit dans la série dédiée aux types géographiques et géométriques :

 

Présentation

Ces types complexes sont en réalité des composés d’éléments simples, autrement dit ils ne sont que des collections d’objets de même type ou non.

Parmi ces objets, on retrouve les éléments suivants :

  • MultiPoint : collection de plusieurs points
  • MultiLineString : collection de plusieurs lignes
  • MultiPolygon : collection de plusieurs polygones
  • Collection : collection de plusieurs géométries composées ou non

Multi geometrie (MultiPoint, MultiLine, MultiPolygon, Collection) au sein de SQL Server

Comme indiqué, les types d”éléments simples associés peuvent varier et composer ce qu’on appelle alors des collections de géométries. Ces collections peuvent tout à fait contenir d’autres collections et donc être imbriquées.

Pour rappel, l’architecture globale peut être représentée comme suit :

Architecture des types géographiques (geography) et géométriques (geometry) en WKT

 

Contraintes techniques

La composition de ces éléments ne présentent pas de difficultés supplémentaires en comparaison de l’utilisation d’objets simples et basiques.

La tâche se complexifie quelque peu lorsque l’on doit composer des collections de géométries elles-mêmes composées et contenant des objets avancés par exemple : un polygone avec trous ou multi-polygones.

Il faut toujours garder à l’esprit les limitations des éléments de manière individuelle pour composer l’objet global.

 

Implémentation technique dans SQL Server

Au niveau de SQL Server, la déclaration de ces éléments est relativement aisée puisqu’il s’agit de composer le WKT adéquat et d’utiliser les méthodes natives permettant d’initialiser une instance de l’objet déclaré.

La déclaration des différents éléments s’opère comme suit :

  • Construction d’une collection de points – MultiPoint 

La construction WKT d’un MultiPoint se présente comme suit :

MULTIPOINT((COORDINATES1),(COORDINATES2)) Ou 
MULTIPOINT((LONGITUDE LATITUDE),(LONGITUDE LATITUDE))

Voici un exemple de WKT pour le MultiPoint :

MULTIPOINT((3 45),(3.5 45))

Au niveau de la déclaration SQL Server :

DECLARE @multipoint AS GEOGRAPHY
SET @multipoint = GEOGRAPHY::STGeomFromText(
'MULTIPOINT((3 45),(3.5 45),(3.5 46),(4 47),(3 47),(3 45))', 4326) SELECT @multipoint

Pour les rendres visibles, nous ajoutons un buffer autour des points :

SELECT @multipoint.STBuffer(10000)

Ce qui donne en exécution :

MultiPoint SQL Server Denali 2011 et SQL Server 2008 R2 SP2

 

  • Construction d’une collection de lignes – MultiLineString

La construction WKT d’un MultiLineString se présente comme suit :

MULTILINESTRING((LINE1),(LINE2))

Ou

MULTILINESTRING((LONGITUDE1 LATITUDE1,
LONGITUDE2 LATITUDE2,
LONGITUDE3 LATITUDE3),
(LONGITUDEA LATITUDEA,
LONGITUDEB LATITUDEB)
)

Voici un exemple de WKT pour le MultiLine :

MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45))

Au niveau de la déclaration SQL Server :

DECLARE @multipolyline AS GEOGRAPHY
SET @multipolyline = GEOGRAPHY::STGeomFromText(
'MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45))', 4326) SELECT @multipolyline

Ce qui donne en exécution :

MultiLineStrings SQL Server Denali 2011 et SQL Server 2008 R2 SP2

  • Construction d’une collection de polygones – MultiPolygon

La construction WKT d’un MultiPolygon se présente comme suit :

MULTIPOLYGON((POLYGON1),(POLYGON2))

Soit :

MULTIPOLYGON(((COORDINATESPOLYGON1)),((COORDINATESPOLYGON2)))

imageA noter les doubles parenthèses qui définissent les polygones.

Voici un exemple de WKT pour le MultiPolygon :

MULTIPOLYGON(((3 45,4 45,4 46,3 45)),((5 46,6 47,5 47,5 46)))

Au niveau de la déclaration SQL Server :

DECLARE @multipolygon AS GEOGRAPHY
SET @multipolygon = GEOGRAPHY::STGeomFromText('MULTIPOLYGON(((3 45,4 45,4 46,3 45)),((5 46,6 47,5 47,5 46)))',4326)
SELECT @multipolygon

Ce qui donne en exécution :

MultiPolygon SQL Server Denali 2011 et SQL Server 2008 R2 SP2

 

image Attention : Dans le cas d’une collection de polygones, la composition de chacun d’entre eux nécessite de respecter les règles de définitions déjà abordées à travers cet article.
Il s’agit notamment de conserver une orientation correcte dans la définition afin de définir le polygone souhaitée et non l’inverse vis à vis du globe terrestre.

  • Construction d’une collection imbriquée

La construction WKT d’une collection de géométries se présente comme suit :

GEOMETRYCOLLECTION(ELEMENT1, ELEMENT2)

Voici un exemple de WKT pour la collection de géométries :

GEOMETRYCOLLECTION(
MULTIPOINT((3 44),(3.5 44),(3.25 44.5)),
MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45)),
POINT(2.75 44),
POLYGON((4 46,3.75 46,4 45,4 46))
)

Au niveau de la déclaration SQL Server :

DECLARE @multigeometry AS GEOGRAPHY
SET @multigeometry = GEOGRAPHY::STGeomFromText('GEOMETRYCOLLECTION(
MULTIPOINT((3 44),(3.5 44),(3.25 44.5)),
MULTILINESTRING((3 45,3.5 45),(3.5 46,4 47),(3 47,3 45)),
POINT(2.75 44),
POLYGON((4 46,3.75 46,4 45,4 46))
)'
,4326) SELECT @multigeometry

Ce qui donne en exécution :

GeometryCollection SQL Server Denali 2011 et SQL Server 2008 R2 SP2

La déclaration de ce type d’élément peut être réalisée de manière unitaire comme ici, ou à l’aide de méthodes dédiées pour générées des géométries, nous verrons dans un prochain article comment exploiter ces méthodes pour générer ces éléments et exploiter SQL Server 2008 pour ce qu’il fait de mieux avec ce type géographique.

 

Conclusions

L’ensemble des objets disponibles dans SQL Server 2008 a été couvert et ils seront très utiles pour stocker, manipuler, organiser ou filtrer vos données.

La prochaine version de SQL Server ‘Denali’ apportera plusieurs nouveaux types de bases et composés pour ces données géographiques et repoussera également les limites en termes de définition, nous aborderons ces nouveautés dans un article dédié.

Cette étape de déclaration et définition d’objet au sein de SQL Server 2008 présentée, nous pourrons, dans les prochains articles nous intéresser à l’utilisation des méthodes et à l’exploitation de ce type géographique disponible à travers les versions de SQL Server 2008 et supérieures ainsi qu’au sein de l’offre SQL Azure.

A travers ce précédent article dédié à la réalisation d’application de cartographie à travers une application WinForm et/ou WPF (Windows Presentation Foundation), nous avions déjà abordé certaines techniques d’implémentation en pondérant chacune de ces solutions en fonction du contexte.

Bing Maps integration en WPF et WinForm pour remplacer le contrôle Concierge sur la table Surface

Cet article a pour but d’aider les entreprises souhaitant effectuer la migration de leurs applications existantes sur la table Surface (basée sur l’application Concierge, le composant InfoStrat.VE ou autres…) ou tout simplement intégrer de la cartographie au sein d’application WPF ou WinForm.

Cet article est disponible ici en PDF et sera prochainement traduit en anglais : http://www.boonaert.net/documents/BingMaps/Bing%20Maps%20for%20Enterprise%20-%20Integration%20WPF.pdf

WPF et WinForm avec une carte bing maps (ou meme Google Maps, Yahoo Maps, Ovi Maps, Open Street Map)

Wygwam - Expertise technologique MicrosoftAu sein de Wygwam, nous avons régulièrement des demandes pour réaliser ce type d’application ou de contrôle d’intégration permettant d’apporter des possibilités cartographiques (affichage de carte, utilisation des contenus) aux applicatifs utilisant la technologie WPF.

C’est donc avec mon collègue Ludovic Czarnecki que j’ai pu tester les différentes solutions techniques présentées ci-dessous dans un contexte d’exécution de la table Microsoft Surface V1.

Bing Maps au sein d'une application Microsoft Surface / WPF

N’hésitez donc pas à nous contacter si vous avez ces besoins d’intégration ou si vous souhaitez davantage d’informations concernant une technique en particulier.

 

Rappel des derniers événements

Afin de comprendre la raison de cette mise à jour concernant les solutions d’intégration disponibles, il faut parcourir à nouveau l’actualité des derniers mois des technologies concernées.

  • Fin de vie du plugin 3D de la plateforme Bing Maps

Microsoft a annoncé en novembre 2010 la fin de vie programmée en novembre 2011 du plugin 3d disponible depuis plusieurs années et surtout utilisable à travers l’API en version 6.3.

Plugin 3D Bing Maps Virtual Earth 3D

Ce plugin 3d est pourtant utilisé dans de nombreux cas pour intégrer cette plateforme au sein d’application WPF et plus particulièrement sur la table Surface V1.

En effet, l’application Concierge mais également le contrôle Infostrat.VE disponible sur CodePlex utilisent ce plugin pour effectuer l’affichage.
Dès lors, même si ce plugin est installé (ou les assemblies nécessaires conservées), rien ne garantit son fonctionnement après la date indiquée notamment pour la récupération du modèle de terrain (DEM : Digital Elevation Model) ou pour les géométries 3d des bâtiments ou lieux connus.

Plugin 3D Bing Maps Virtual Earth 3D

Bref, le taux de pénétration réduit de ce plugin sur le poste grand public et l’évolution technologique ont motivé Microsoft a stoppé l’investissement sur ce dernier et à se concentrer sur d’autres possibilités de présentation et d’exploitation de ces informations et contenus 3D.

UPDATE : Microsoft vient de mettre à disposition les sources du plugin 3d et donne davantage d’information pour la fin de vie et le comportement à prévoir.
Plus d’infos via :
http://blogs.msdn.com/b/virtualearth3d/archive/2011/08/14/how-to-make-virtual-earth-3d-live-forever.aspx

Comme le suggère Alastair Aitchison – on pourrait dire "Fin de vie du plugin 3D?" "Non - vive le plugin 3D!"

 

  • Nouvelle version de la table Surface : Surface 2.0

L’arrivée prochaine de la table Surface 2.0 avec une technologie différente (voir plus bas) pour analyser les contacts utilisateurs amène son lot de changement pour les développements réalisés jusqu’à présent.

Microsoft Surface 2.0 expertise et developpement - demoMicrosoft Surface 2.0 expertise et developpement - demo

La technologie logicielle implémentée modifie également les développements sur la table Surface, l’ensemble du SDK et du Framework dédié à ce produit en v2 a été modifié, on n’utilise par exemple plus d’événement de type Contact (spécifique à la table Surface v1) mais au contraire des événements de types Touch standard à l’ensemble des applications WPF dédiées au tactile.

 

Résumé des possibilités d’intégration

D’une manière générale, ces possibilités d’intégration concernent les applications WPF et WinForm. Les cas spécifiques associés à la table Microsoft Surface sont abordés plus bas.

Voici, avant de nous intéresser aux détails, les différentes techniques d’implémentation listées :

  • Utilisation du WebBrowser et de l’API Bing Maps AJAX v7
  • Utilisation du WebBrowser et du contrôle Silverlight de Bing Maps
  • Utilisation d’un navigateur alternatif et de l’API Bing Maps AJAX V7
  • Utilisation d’un navigateur alternatif et du contrôle Silverlight
  • Utilisation d’une application Silverlight directement en WPF
  • Utilisation du plugin 3d à travers le contrôle InfoStrat.VE – CodePlex
  • Utilisation du contrôle GreatMaps for WPF – CodePlex
  • Utilisation d’un contrôle commercial dédié
    • Contrôle Telerik – RadMap
  • Développement personnalisé natif WPF

 

Présentation détaillée des solutions techniques

Après avoir résumé les solutions, nous allons nous intéresser aux détails d’implémentation mais également aux avantages et inconvénients de chacun d’elles.

  • Utilisation du WebBrowser et de l’API Bing Maps AJAX v7

Description technique :

Cette solution consiste à intégrer une instance du contrôle WebBrowser qui charge une page HTML distante ou un contenu HTML disponible en ressource intégrée à l’application.

API Bing Maps AJAX V7 control WebBrowser control in WPF application

Il suffit alors ensuite d’utiliser les méthodes InvokeScript() sur le contrôle WebBrowser (ou InvokeScript() sur la propriété Document du WebBrowser en WinForm) pour déclencher du code JavaScript depuis l’application .Net.

Du côté client, en JavaScript, il suffit d’utiliser l’élément window.external pour obtenir une référence vers l’objet passé dans la propriété ObjectForScripting du contrôle WebBrowser permettant ainsi de pouvoir appeler les méthodes de l’application .Net depuis le code client.

Analyse :

Avantages Inconvénients
Méthode supportée Intégration graphique limitée
Evolution aisée des développements et migration simple Complexité de développement
Intégration simple du modèle de licence de la plateforme Difficultés possibles lors d’un déploiement multi-systèmes

Mon avis :

Cette solution permets d’intégrer une application cartographie utilisant le contrôle interactif Bing Maps via l’API AJAX v7 en utilisant des techniques connues pour le développement autour de l’API.

Le principal effort consiste à effectuer l’ensemble du code d’interopérabilité entre le WebBrowser/JavaScript et le code .Net.

 

  • Utilisation du WebBrowser et du contrôle Silverlight de Bing Maps

Description technique :

En utilisant la même technique que la précédente, on charge cette fois une page contenant le contrôle Silverlight de la plateforme Bing Maps.

Voici un vue d’ensemble de ce qui est opéré :

Utilisation avancée du contrôle WebBrowser pour interop avec Silverlight et Bing Maps

Il suffit donc de réaliser une application .Net exposée en COM et établi comme propriété ObjectForScripting sur le composant WebBrowser.

Le code JavaScript assure la communication entre l’application WPF et le contrôle Silverlight.

Le contrôle Silverlight expose ses méthodes comme étant des ScriptableMember (en ajoutant l’attribut) et référence l’application comme ScriptableObject via la méthode RegisterScriptableObject() du contrôle WebBrowser en permettant ainsi d’accéder à ces différents attributs et méthodes.

Analyse :

Avantages Inconvénients
Méthode supportée Intégration graphique limitée
Performances du contrôle Silverlight Complexité important du développement
Possibilité d’intégrer la logique applicative dans l’application Silverlight Dépendance au plugin Silverlight

Mon avis :

Cette solution relativement proche de la précédente approche possède toujours les mêmes limites en termes d’intégration graphique mais permet d’exploiter les performances du contrôle Silverlight de Bing Maps for Enterprise.

La contrainte supplémentaire du plugin Silverlight augmente la complexité du développement des couches d’interopérabilités (voir Article en 4 parties : Bing Maps for Enterprise – Integration WPF : interopérabilité avec Silverlight) et nécessite une connaissance pointue des possibilités d’interopérabilité de chaque brique applicative.

 

  • Utilisation d’un navigateur alternatif et de l’API Bing Maps AJAX V7

Description technique :

A travers cette réalisation, on souhaite utiliser le contrôle basé sur Chromium afin de charger la page sous le même mode que le WebBrowser standard.

Avec ce contrôle, on observe la possibilité d’intégrer graphiquement le navigateur dans l’application WPF et d’opérer des manipulations impossibles à réaliser avec le contrôle WebBrowser standard : rotation, modification des dimensions, transformations avancées…

Chromium AJAX V7 API Control Bing Maps integration en WPF

Pour simplifier l’utilisation de Chromium au sein d’une application WPF, il est possible d’utiliser le projet WPFChromium disponible via ces liens :

Analyse :

Avantages Inconvénients
Intégration graphique facilitée Méthode non-supportée
Utilisation du contrôle AJAX Complexité de développement et limitations d’interopérabilité possibles
Intégration simple du modèle de licence de la plateforme Quid de l’évolution

Mon avis :

Cette solution permets de s’affranchir de la limite d’intégration graphique, en effet avec le contrôle navigateur alternatif, il devient possible de le manipuler (taille, orientation…) et surtout d’afficher des éléments par-dessus chose impossible en utilisant le contrôle WebBrowser de base.

Cependant, cette méthode présente la limite précise qu’il s’agit d’une utilisation de composant non supporté et d’une utilisation de l’API AJAX de la plateforme Bing Maps for Enterprise dans un contexte non supporté.

 

  • Utilisation d’un navigateur alternatif et du contrôle Silverlight

Description technique :

En utilisant le contrôle navigateur basé sur Chromium à travers le wrapper dédié, on charge une application simple intégrant le contrôle Silverlight de la plateforme Bing Maps for Enterprise.

Chromium Silverlight Bing Maps integration en WPF

Le projet WPFChromium présenté avec la solution précédente permet de réaliser cette intégration mais peut amener des difficultés de chargement du contenu Silverlight.

Analyse :

Avantages Inconvénients
Intégration graphique facilitée Méthode non-supportée
Performances Problème possible de compatibilité Silverlight
Possibilité d’intégrer la logique applicative dans l’application Silverlight Evolution, difficulté de développement et limitations d’interopérabilité possibles

Mon avis :

Cette solution présente de nombreux points de doutes avec notamment un gros souci de compatibilité/support du contrôle navigateur tout comme le support Silverlight dans ce contexte.

La complexité de développement et les limitations possibles d’interopérabilité avec ce navigateur alternatif devront faire l’objet d’une reflexion approfondie.

 

  • Utilisation d’une application Silverlight directement en WPF

Description technique :

En réalisant une application Silverlight intégrant le contrôle Silverlight de Bing Maps for Enterprise, on utilise directement ce composant au sein de l’application WPF.

Pour cela plusieurs techniques possibles dont voici quelques liens utiles :

Silverlight rendu dans WPF (integration silverlight wpf)

Un projet CodePlex facilite cette intégration, il s’agit de SilverlightViewport développé par Jeremiah Morrill (qui soit dit au passage est un vrai guru en WPF et autres technologies de présentation).
Ce projet est disponible via ce lien : http://silverlightviewport.codeplex.com/

Analyse :

Avantages Inconvénients
Intégration WPF Méthode non supportée
Performance du contrôle Silverlight Complexité de développement
Possibilité d’intégrer la logique applicative dans l’application Silverlight Dépendance au plugin Silverlight

Mon avis :

Cette technique d’implémentation est assez délicate à mettre en place et nécessite une connaissance pointue des technologies WPF et Silverlight.

Elle présente toutefois un avantage notable, elle permet en effet de s’intégrer de manière parfaite en WPF et n’impose pas de dépendance à un quelconque contrôle navigateur.

 

  • Utilisation du plugin 3d à travers le contrôle InfoStrat.VE – CodePlex

Description technique :

Cette solution technique repose sur l’utilisation du plugin 3d disponible avec la version 6.3 et qui est utilisé au sein d’une surface Direct3D directement au sein de WPF.

codeplex_header

Le projet InfoStrat.VE disponible sur CodePlex et développé par InfoStrat, fournit la couche de manipulation entre WPF et le plugin 3D ce qui simplifie grandement la gestion des événements et la manipulation du composant natif.

Analyse :

Avantages Inconvénients
Utilisation du plugin 3D Fin de vie du plugin 3D
Performances Méthode non supportée
Intégration WPF et simplicité du développement Nombre d’instance simultanée limitée du contrôle

Mon avis :

Cette solution fonctionne à merveille et permets de proposer des performances élevées et une expérience 3d qui se combine à merveille sur les applications Surface.

Cependant, la fin de vie programmée du plugin 3D de la plateforme Bing Maps for Enterprise impose à chacun de considérer cette solution comme obsolète et même à remplacer dans un futur proche compte tenu de l’évolution prochaine de la plateforme, relativement incertaine vis à vis de ce plugin 3D.

 

  • Utilisation du contrôle GreatMaps for WPF – CodePlex

Description technique :

La solution technique employée utilise un contrôle natif WPF (ou WinForm et même Windows Mobile) qui repose sur un fonctionnement standard de génération de tuile.image

Le contrôle est disponible au sein du projet GreatMap hébergé sur CodePlex rend possible l’affichage de cartes chargées sous formes de tuiles.

Great Maps for WPF Windows Form and Bing Maps for Enterprise

Voici le lien vers ce projet : http://greatmaps.codeplex.com/

Analyse :

Avantages Inconvénients
Intégration WPF Support limité
Simplicité du développement et possibilité de changement de fournisseur de contenu Evolution délicate du contrôle vis à vis des services de la plateforme
Performances  

Mon avis :

Cette solution mérite le détour puisque dans la version actuelle, on dispose d’un contrôle dédié à WinForm et un autre à WPF.

Le contrôle permet d’utiliser de multiples fournisseurs de carte (Bing Maps for Enterprise, OSM, Google Maps…) et simplifie grandement le développement et l’intégration d’une carte performante dans vos applications WPF.

 

  • Utilisation d’un contrôle commercial dédié – Telerik RadMap

Description technique :

En utilisant le contrôle RadMap de la librairie proposée par Telerik, on obtient un composant cartographique multifournisseur, permettant d’afficher des cartes nativement en WPF.

Telerik logoRadMap control from Telerik RadControl library

Le contrôle tente de reproduire le comportement et le rendu disponible dans celui proposé en Silverlight reposant sur la technologie DeepZoom.

Analyse :

Avantages Inconvénients
Méthode supportée par Telerik Performances et expérience relativement limitées
Simplicité de développement et possibilité de changement de fournisseur de contenu Composant commercial et licence associée
Intégration WPF Evolution du composant

Mon avis :

Cette solution commerciale présente un contrôle simple à utiliser mais qui n’apporte pas une expérience utilisateur suffisante pour approcher celle du contrôle AJAX ou Silverlight.

L’aspect commercial de la solution n’est également pas là pour simplifier la mise en place au sein d’un projet client.

 

  • Développement personnalisé natif WPF

Description technique :

La solution la plus radicale consiste à recréer soi-même un contrôle en WPF natif utilisant des éléments standards pour charger une carte à travers un canvas dédié.

Développement WPF WinForm pour Bing Maps dans la table Surface ou dans des applications lourdes

Analyse :

Avantages Inconvénients
Maitrise complète du développement Complexité de développement
Intégration WPF et performances Coût lié
Evolution du contrôle vis à vis de la plateforme Problématique d’évolution, de performances, de test et charges

Mon avis :

Certainement l’option la plus permissive peu importe l’exploitation du contrôle qui est faite, cette solution a cependant des inconvénients notables puisqu’elle nécessite un développement personnalisé qui peut très vite devenir couteux en temps et très délicat à appréhender.

 

Cas particuliers de la table Microsoft Surface

Microsoft Surface - developpement et expertise - WPF Bing Maps

La table Surface de Microsoft se présente à présent en 2 versions distinctes que je choisis ici de présenter brièvement. Nous allons ensuite nous intéresser au cas spécifique des applications s’exécutant sur ce type de périphérique.

imageLe détail complet et des articles explicatifs précis sont disponibles sur la MSDN : http://msdn.microsoft.com/en-us/library/ee804845(v=Surface.10).aspx

  • La table Surface en version 1 (Microsoft Surface Table V1)

La première version a été rendue disponible à partir de 2009 et reposait sur une technologie de reconnaissance de forme utilisant des caméras intégrées à la table qui se présente comme cela :

Table Surface V1 - Développement et expertise

 

  • La table Surface en version 2 (Microsoft Surface Table V2)

La seconde version a été annoncée et devrait être commercialisée dans le second semestre 2011.

Table Surface V2 - Développement et expertise

Pour réaliser la reconnaissance de forme et la détection des interactions utilisateurs, Samsung et Microsoft ont mis au point une technologie baptisée PixelSense qui s’appuie sur un réseau de LED Infrarouge et une couche de détection optique capturant le résultat réfléchie de l’infrarouge.

PixelSense - Fonctionnement de la table Surface 2.0 de Microsoft

Pour plus d’informations sur la technologie PixelSense utilisée au sein de cette Surface 2.0, n’hésitez pas à vous rendre sur le site dédié : http://www.microsoft.com/surface/en/us/pixelsense.aspx

 

  • Principales différences

Forme, matériel et technologie :

La table Surface V1 pèse 70 Kg et utilise une technologie de reconnaissance de forme basé sur un réseau de caméra.

La table Surface V2 quant à elle présente un poids moindre (40 Kg) et donne la possibilité d’être orienté et même être disposée sur un mur. Une épaisseur de seulement une dizaine de centimètre grâce à l’utilisation de la technologie PixelSense.

Evidemment, la configuration matérielle (le PC qui exécute les applications) a aussi connu une cure de jouvence. Le système d’exploitation est logiquement changé pour passer de Windows Vista (v1) à Windows 7 (v2).

En résumé :

  Surface V1.0 Surface V2.0
Ecran 30” XGA projecteur avec surface polie 40” LCD avec une vitre de type Gorilla Glass
Résolution 1024 * 768 1920 * 1080 (HD 1080p)
Technologie multitouch Réseau de projecteur et de 5 caméras
52 contacts simultanés
PixelSense
50 contacts simultanés
Dimensions 56 cm d’épaisseur
68.6 cm de large pour la surface
57.2 cm de large pour la base
108 cm de long
10 cm d’épaisseur
102 cm de diagonale
Poids 70 Kg 40 Kg
Disposition Horizontale Horizontale ou Verticale (inclinable)
Processeur Intel Core 2 Duo (2.13 Ghz) AMD Athlon II X2 Dual-Core Processor 2.9GHz
Carte graphique ATI X1650 AMD Radeon HD 6700M
RAM 2 Go DDR2 4 Go DDR3
Disque dur 250 Go SATA 7200 t/min 320 Go SATA 7200 t/min
Support HDMI Non Oui
Système Windows Vista Pro 32-bit Windows 7 Pro 64-bit
Coût 12 500 $ / 9000 € env. 7 600 $ / 5 400 € env.

Sources :

 

Aspect logiciel :

Fondamentalement la technologie utilisée reste identique puisqu’il s’agit dans les 2 versions d’un Framework basé sur WPF. Il est également possible de réaliser des applications en XNA sur ce type de périphérique.

Le gros point de différence réside dans la manière de gérer les contacts qui dans la première version étaient des ContactEvent (avec des propriétés dédiées).

Le nouveau SDK ainsi que les outils de développement ou de simulation de la table Surface ont eux aussi été mis à jour avec notamment un simulateur amélioré de la table :

Microsoft Surface Simulator

Enfin, évidemment, le Framework Surface a été étendu avec de nouveaux contrôles et nouvelles possibilités disponibles à travers ce lien :

http://www.microsoft.com/download/en/details.aspx?id=26716

 Microsoft Surface 2.0 SDK Library Control and Container

Concernant la migration d’une application Surface v1 vers Surface v2, pour les cas simples, il est possible d’utiliser le PowerToy fourni par Microsoft et présenté à travers le lien suivant : http://msdn.microsoft.com/en-us/library/gg697146.aspx.

 

  • Considérations pour vos applications pour la table Surface V1.0

La table Surface v1.0 repose sur une couche de capture des événements qui s’opère au-dessus de l’application WPF. Il faut alors pouvoir capturer ses contacts au-dessus des composants utilisés et bindés ces derniers sur une manipulation WPF adaptée.

Surface V1 - Bing Maps application

Les solutions reposant sur l’utilisation du contrôle WebBrowser ne peuvent pas fonctionner en manipulation directe de la carte : on ne peut donc pas capturer les contacts au-dessus d’un contrôle WebBrowser classique.
En effet, ce contrôle existe depuis les anciennes versions du Framework et repose sur un contrôle Win32 et le rendu s’opère au dessus de tout contrôle WPF et également au-dessus de la couche de capture des contacts. Dès lors il est donc impossible d’obtenir un événement de contact au-dessus de la page hébergé par le contrôle WebBrowser.

  • Evolution des développements

Les applications développées pour la table Surface seront les mêmes que ceux des tablettes Windows 7 ou des PC avec écran tactiles. Elles seront naturellement compatibles sur PC avec une simple souris.

Ce qui intéressant dans ce cas c’est la capacité simple permettant de migrer une application sur un type de support vers un autre et inversement. Il est également intéressant de voir que l’intégration de contrôles avancés se fera de manière plus aisée et surtout une méthode unique, les considérations concernant l’intégration de la cartographie en WPF se réduisent puisqu’il s’agit là des mêmes développements.

Attention toutefois, les applications s’exécutant sur une table Surface doivent, à mon sens, faire preuve d’une réflexion particulière sur l’utilisation qui va en être faite. Il faut concevoir l’application comme étant possiblement exploitable de n’importe quel côté de la table et surtout avec de l’information adaptée et lisible dans ce cas présent. L’utilisation simultanée par plusieurs utilisateurs est également un élément dont il faut tenir compte et qui est à réfléchir.

 

Conclusions

L’ensemble de ces solutions techniques d’intégration de plateforme cartographique au sein d’application WPF sont à considérer en fonction du contexte final d’exécution.

En effet, on ne peut pas aisément désigner LA solution parfaite pour tous les cas car là où pour certains le besoin en support et évolution du composant est primordial, l’intégration fine et le besoin de customisation seront négligés et inversement.

Par contre, la solution utilisant le plugin 3d (Concierge ou contrôle InfoStrat.VE) ne doivent plus être utilisées pour de nouveaux projets et devront très certainement subir une migration dans les mois à venir à la fin de vie du plugin (novembre 2011).

Il également à noter que dans ce type d’intégration, il est toutefois nécessaire de conserver en tête l’aspect légal et donc se rapprocher de Microsoft pour obtenir davantage d’information concernant les licences d’utilisation de la plateforme Bing Maps for Enterprise.

 

Autres pistes à explorer :

Si vous avez en tête d’autres solutions d’intégration de l’API Bing Maps ou plus généralement de cartographie au sein d’application WPF à laquelle je n’aurai pensé, n’hésitez pas à me contacter ou à laisser un commentaire.

Je n’ai pas présenté la solution d’intégration de Google Earth API puisque je voulais des solutions d’intégration de la plateforme Bing Maps for Enterprise principalement, mais il est évident que cela peut être une solution possible d’intégration.

La solution d’intégration ESRI n’a pas non plus été présentée puisque leurs contrôles ne sont pas librement accessibles en version d’évaluation.

 

Aussi, si vous aussi vous rencontrez ce genre de besoin, n’hésitez pas à me contacter pour échanger sur le sujet.

Nombreuses sont les sociétés ou organisation, qui, en France, utilisent ou possèdent des données provenant de l’Institut Géographique National – IGN.

Ces données se matérialisent sous forme de bases de données multiples intégrant les données parcellaires, les bases topographiques et bien d’autres contenu qui sont désormais rendu disponibles dans le cadre de la directive Européenne INSPIRE.Bing Maps IGN intégration des données BD-TOPO BD-Parcellaire BD carto de l'IGN sur une carte de type Bing Maps ou Google Maps

A travers cet article, nous allons donc nous intéresser à ce qu’est la directive INSPIRE, comment accéder aux informations fournies par l’IGN et pour finir à l’intégration des données de l’IGN au sein du contrôle AJAX en version 7 de la plateforme Bing Maps for Enterprise.

 

INSPIRE en quelques mots

La directive INSPIRE – Infrastructure for Spatial Information in Europe se résume à cette volonté :

La directive INSPIRE, élaborée par la Direction générale de l'environnement de la Commission européenne, vise à établir en Europe une infrastructure de données géographiques pour assurer l’interopérabilité entre bases de données et faciliter la diffusion, la disponibilité, l'utilisation et la réutilisation de l’information géographique en Europe.

C’est donc bel et bien un effort commun en Europe pour favoriser la mise à disposition sous une forme standard des contenus cartographiques.

INSPIRE directive en France et en Europe - logo

Les grands principes visent principalement à :

  • Rendre la collecte de données géographiques unique et réduire les coûts de collecte (acquisition, traitement, mise à disposition) de manière globale
     
  • Donner la possibilité de manière simple de combiner ces informations géographiques provenant de sources multiples à travers des applications ou autres services
     
  • Partager les données avec tous les autres organismes publics
     
  • Mettre à disposition la donnée de manière claire et accessible
     
  • Présenter quelles informations sont disponibles, les besoins auxquels ces informations peuvent répondre et communiquer efficacement sur les conditions d’utilisation

IGN - Institut géographique National - BD PARCELLAIRE, ORTHO, BATI intégré dans Bing Maps à travers ces article - logo L’IGN a été un acteur majeur dans la défense de la mise en place de cette directive et c’est un projet auquel nous pouvons espérer, beaucoup collaboreront au delà des choses imposées en se rendant également disponible pour facilité l’implémentation de leurs données et en communiquant sur des réseaux adaptés.

A ce propos et quelques peu en lien, il est également à noter la volonté de l’Etat Français, d’ouvrir les données et de créer un espèce de data.gouv.fr que l’on pourra bientôt espérer riche en contenu comme il est possible d’en trouver dès à présent sur Open Data Paris ou bien d’autres villes ou même régions comme expliqué via ce lien : http://www.europecreative.eu/2011/05/06/open-data-les-collectivites-territoriales-ouvrent-leurs-donnees-au-public/.

Ne manquez pas de suivre l’actualité du groupe constitué Etalab à travers ce blog officiel, dédié à la création de cette espace de partage de données publiques : http://etalab.over-blog.com/.

 

Accès aux données de l’IGN

Les licences :

L’IGN, concernée de près par cette directive ont mis à disposition leurs données à travers des services dédiés et restreint à des usages non-commerciaux.

Données cartographiques intégrées dans Bing Maps WMS et WMSC

Pour obtenir d’avantages d’informations concernant les licences et les conditions d’utilisations des données et services de l’IGN : https://api.ign.fr/geoportail/index.do

Après avoir créé son compte et rempli les différentes informations sur le site de l’IGN, on observe la possibilité de créer un contrat selon les modalités expliquées dans les licences associées.

Les données

Dans l’état actuel, le contrat de type INSPIRE donne accès à ces informations via le serveur WMS-C (Web Mapping Service Cached) :

  • Limites administratives (WMSC:ADMINISTRATIVEUNITS.BOUNDARIES)
  • Parcelles cadastrales (WMSC:CADASTRALPARCELS.PARCELS)
  • Réseau ferroviaire (WMSC:TRANSPORTNETWORKS.RAILWAYS)
  • Routes (WMSC:TRANSPORTNETWORKS.ROADS)
  • Aérodromes (WMSC:TRANSPORTNETWORKS.RUNWAYS)
  • Hydrographie (WMSC:HYDROGRAPHY.HYDROGRAPHY)
  • Altitude (WMSC:ELEVATION.SLOPES)
  • Trait de côte (WMSC:ELEVATION.LEVEL0)
  • Photographies aériennes (WMSC:ORTHOIMAGERY.ORTHOPHOTOS)
  • Ortho photographies du littoral (2000) (WMSC:ORTHOIMAGERY.ORTHOPHOTOS.COAST2000)
  • Bâtiments (WMSC:BUILDINGS.BUILDINGS)
  • Services publics (WMSC:UTILITYANDGOVERNMENTALSERVICES.ALL)

Et les services WMS, standard OGC, correspondants par zones de couverture :

  • FXX : France Métropolitaine
  • GLP : Guadeloupe
  • GUF : Guyane Française
  • MTQ : Martinique
  • REU : La Réunion
  • MYT : Mayotte

Détails complet dans ce fichier Excel : http://www.boonaert.net/documents/BingMaps/IGN%20-%20Inspire.xlsx

 

Présentation de la méthode d’accès et obtention d’un jeton client

Les services de l’IGN sont soumis à l’obtention d’un jeton basé sur une clé unique et généré pour une période paramétrable, de base configurée pour ne durer que 10 minutes.

Voici un vue globale du fonctionnement de ce système de jeton :

Architecture des services d'authentification WMS de l'IGN Geoportail ou INSPIRE - système de jeton du géoportail avec utilisation de jQuery

Dès lors, ces services peuvent être appelés depuis du code client et nous pouvons tout à fait composer ces requêtes en JavaScript.

Voici un exemple de code utilisant jQuery, permettant de récupérer ce jeton qui servira à identifier chaque nouvelle requête effectuée, cette méthode n’est appelée qu’une fois au chargement de la carte :

// IGN Specific
function getTokenIgn(key, callback) {

    // manage default callback
    if (callback == null) callback = onGetTokenIgn;

    //getToken?key=CLEF&output=json

    var requestParams = new Object();
    requestParams.key = ignConstants.ignKey;
    requestParams.output = 'json'

    // Call the service
    $.ajax({
        type: 'GET',
        url: ignConstants.ignTokenSrvUrl + 'getToken',
        cache: false,
        data: requestParams,
        dataType: 'jsonp',
        success: callback,
        error: onGlobalError
    });
}

Dans le callback, il suffit ensuite de conserver le jeton renvoyé :

function onGetTokenIgn(result) {
    ignGlobals.token = result.gppkey;
}

Il suffit alors de conserver ce jeton et de le communiquer en paramètre des requêtes suivantes.

 

Accès aux données sous formes de tuiles

Les données sont exposées sous formes de différents services comme présentés précédemment : 

  • OGC Open Geospatial Consortium - LogoWMS : Web Mapping Service – standard OGC
  • WMS-C : Web Mapping Server Cached – non standard
  • WFS : Web Feature Service – standard OGC

Afin de réaliser l’intégration au sein du contrôle Bing Maps AJAX v7, nous choisissons d’utiliser les données sous formes de tuiles et comme pour la majorité des plateformes de Web Mapping grand public, les données doivent respecter le système de projection Mercator EPSG:4326 (ou mieux Web Mercator).

Mercator projection carrée compatible avec Bing Maps et Google Maps entre autres

Ce système de projection est uniquement disponible à travers le service WMS pour l’obtention de tuile utilisable au sein du contrôle AJAX de la plateforme Bing Maps. Ces tuiles sont des fichiers d’images

Voici un exemple d’url permettant d’accéder à du contenu :

http://wxs.ign.fr/inspire/wms?&TRANSPARENT=true&LAYERS=FXX.BUILDINGS.BUILDINGS
&EXCEPTIONS=text/xml&FORMAT=image/png&SERVICE=WMS
&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG:4326
&BBOX=2.3455810546875,48.850258199721495,
2.35107421875,48.853872731656544
&WIDTH=256&HEIGHT=256&TILED=true
&gppkey=JETON

 

L’image associée :

IGN sample buildings tile - tuile WMS d'affichage des données du bati de l'IGN pour integration sur WEB API 

L’ensemble des paramètres d’appels est décrit dans le document PDF fourni en documentation sur le site de l’IGN disponible à travers ce lien.

Il est alors aisé de changer le type de données à afficher en tant que tuile en modifiant le paramètre LAYERS de la requête.

L’adresse de la même tuile présentant cette fois-ci les informations de réseaux routiers :

http://wxs.ign.fr/inspire/wms?&TRANSPARENT=true&LAYERS=FXX.TRANSPORTNETWORKS.ROADS
&EXCEPTIONS=text/xml&FORMAT=image/png&SERVICE=WMS
&VERSION=1.1.1&REQUEST=GetMap&STYLES=&SRS=EPSG:4326
&BBOX=2.3455810546875,48.850258199721495
,2.35107421875,48.853872731656544
&WIDTH=256&HEIGHT=256&TILED=true&gppkey=JETON

Et ici les images associées avec le type de données ROADS (LAYERS : FXX.TRANSPORTNETWORKS.ROADS) :

IGN sample buildings tile - tuile WMS d'affichage des données routieres pour affichage sur Web API  

Utilisation et intégration au sein de la plateforme Bing Maps for Enterprise

Les données de l’IGN peuvent alors être techniquement intégrées sur les plateformes Grand public de Web Mapping que sont Google Maps API ou Bing Maps for Enterprise.

bingmaps_header

Dans le cas de Bing, l’intégration peut être réalisée assez simplement puisqu’il s’agit de couche WMS exposées sous formes de carte générées dans la taille souhaitée et donc pour l’implémentation Bing, cela se résume à intégrer une couche de tuile supplémentaire, générée pour l’occasion par le service WMS de l’IGN.

Dans le cas présent, je choisis de créer une méthode simple pour éviter d’avoir à modifier mon code à chaque changement de calque de données à afficher, la méthode est la suivante :

function addLayer(layerName) {
    if (ignGlobals.token != null) {
        ignGlobals.ignLayerName = layerName;

        // Create the tile source
        var dataTileSource = new Microsoft.Maps.TileSource({ uriConstructor: getIgnTilePath });

        // Construct the layer using the tile source
        var dataTileLayer = new Microsoft.Maps.TileLayer({ mercator: dataTileSource, opacity: 1, zIndex: 10 });
        bmGlobals.map.entities.push(dataTileLayer);
    }
}

On remarque principalement l’utilisation d’un constructeur d’URL personnalisé qui pointe sur une méthode qui construit dynamiquement l’url à partir de la tuile courante, voici le code de cette méthode de construction dynamique d’url :

function getIgnTilePath(tile) {
    var tileUrl = null;
    if (ignGlobals.token != null) {

        var locBottomLeft = tileToTopLeftCornerLocation(tile.x, tile.y + 1, tile.levelOfDetail);
        var locTopRight = tileToTopLeftCornerLocation(tile.x + 1, tile.y, tile.levelOfDetail);

        // Compose the url
        tileUrl = ignConstants.ignWmsSrvUrl;
        tileUrl += 'wms';
        tileUrl += '?&TRANSPARENT=true';
        tileUrl += '&LAYERS=' + ignGlobals.ignLayerName;
        tileUrl += '&EXCEPTIONS=text/xml';
        tileUrl += '&FORMAT=image/png';
        tileUrl += '&SERVICE=WMS';
        tileUrl += '&VERSION=1.1.1';
        tileUrl += '&REQUEST=GetMap';
        tileUrl += '&STYLES=';
        tileUrl += '&SRS=EPSG:4326';
        tileUrl += '&BBOX=' + [locBottomLeft.longitude,
                               locBottomLeft.latitude,
                               locTopRight.longitude, 
                               locTopRight.latitude].join(',');
        tileUrl += '&WIDTH=256';
        tileUrl += '&HEIGHT=256';
        tileUrl += '&TILED=true';
        tileUrl += '&gppkey=' + ignGlobals.token;
    }

    return tileUrl;
}

On utilise une méthode pour convertir ces valeurs X et Y identifiant la tuile dans son système de quadtree (c’est en réalité une autre représentation des quadkeys) :

function tileToTopLeftCornerLocation(x, y, zoomLevel) {
    // Convert tileXY into pixel coordinates for top left corners 
    var pixelX = x * 256;
    var pixelY = y * 256;

    // Convert to latitude and longitude coordinates 
    var longitude = pixelX * 360 / (256 * Math.pow(2, zoomLevel)) - 180;
    var latitude = Math.asin((Math.exp((0.5 - pixelY / 256 / Math.pow(2, zoomLevel)) * 4 * Math.PI) - 1)
                / (Math.exp((0.5 - pixelY / 256 / Math.pow(2, zoomLevel)) * 4 * Math.PI) + 1)) * 180 / Math.PI;

    return new Microsoft.Maps.Location(latitude, longitude);
}

Voici le résultat en exécution :

Details du bati de l'IGN au sein d'une carte de type Bing Maps / Google Maps

 

Quelles perspectives ?

Nous pouvons que nous réjouir de l’ouverture des données de ces organisations qui possèdent réellement des quantités d’informations qui, combinées à celles des organismes voisins, peuvent réellement laisser place à des usages encore insoupçonnés jusqu’alors.

Cette obligation va également nous permettre de mieux se représenter ce qui est disponible de manière payante pour un usage commercial ce qui est un réel avantage surtout dans des scénarii d’intégration multi-plateforme.

Geo business intelligence market in Europe - Geo BI marche en France Le marché Européen représenté par l’utilisation et la mise à disposition de ces données mises à disposition au grand public est estimé à 27 milliards d’euros (voir : Article - La révolution “open data”) mais comme dans la plupart des cas, cela ne se fait pas sans quelque souci de mise en place ou de compréhension.

Le récent cas du service CheckMy!Metro qui s’est heurté à une équipe juridique de la RATP un peu trop rigide mais qui s’est depuis raisonné et qui laisse place au dialogue. Ce n’est pour moi, qu’un cas parmi bien d’autres mais il a eu le mérite d’attirer l’attention de la presse spécialisée et amènera le gouvernement Français à prendre position et défendre l’Open Data en France ce type de mouvement qui se lie de près à cette directive.

A ce titre, je tiens à souligner que ce type d’initiative de création d’application originale doit être soutenue et que ce n’est pas dans l’immobilisme de certaines grosses organisations que l’on va trouver solution à nos problèmes économiques actuels.

INSPIRE ouverture des données spatiales en France et en EuropeCette directive INSPIRE s’inscrit dans cet objectif et nous encourage à créer de la richesse et de la vie à partir de données bien trop souvent cantonnées à un usage classique avec en réalité un potentiel bien plus important lorsqu’elles sont croisées les unes aux autres.

 

Conclusions

Microsoft à travers Bing Maps for Enterprise, propose une plateforme sur laquelle il est possible de venir greffer des données comme celles proposées par ces organismes qui vont continuer d’ouvrir des bases toujours plus riches lorsqu’elles seront utilisées conjointement.

Cet article nous a donc montrer comment exploiter des sources de données provenant de l’IGN et plus généralement depuis un service WMS.

Il est important de se renseigner avant d’utiliser ces données dans vos différents projets, leurs utilisations est soumises à conditions mais l’implémentation technique est possible et vous avez ici la preuve et les bases pour réaliser une telle intégration.

Comme toujours, toute question sur l’implémentation technique est la bienvenue, n’hésitez pas à me contacter si vous souhaitez intégrer les données de l’IGN au sein de Bing Maps for Enterprise ou même sur d’autres plateformes.

Nous verrons dans les prochaines semaines l’utilisation d’autres données et comment maximiser l’intégration de tels services tiers pour toujours venir enrichir l’expérience utilisateur implémentant la plateforme Bing Maps for Enterprise.

Un rapide billet pour annoncer mon renouvellement en tant que MVP pour l’année 2011/2012 après une année riche en événements et en changements.

Bing Maps MVP Windows Live MVP - expert technique Bing Maps et cartographie

En ce vendredi 1er juillet, j’ai eu l’agréable surprise d’être renouvelé Microsoft Most Valuable Professional, il s’agit, pour les personnes qui ne connaissent pas ce titre, d’une nomination qui récompense un travail communautaire et qui m’identifie comme expert, sur la plateforme Bing Maps for Enterprise dans mon cas.

MVP Bing Maps for Enterprise - Spécialiste Bing Maps Microsoft

Mais afin de partager mon expérience de cette première année, je souhaite vraiment remercier mes proches, qui m’entourent et qui m’encouragent à investir énormément sur ces domaines techniques qui sont avant tout une réelle passion qui va bien au delà de l’implémentation technique.

J’en profite également pour remercier Wygwam, société à travers laquelle j’évolue depuis plus de 3 ans et demi et où j’ai aujourd’hui la chance de m’occuper de l’équipe dédié à la cartographie, accompagné dans mon expertise par des personnes compréhensives et passionnées. Wygwam Renouvelle MVP Bing Maps Nicolas boonaert

Résumé des principaux événements de l’année depuis juillet

Participation aux événements :

  • Participation à l’événement Navteq à Francfort

Dans le cadre de certains projets, j’ai eu à travailler pour Navteq et suite à cette collaboration, j’ai été invité à participer à l’événement Directions 2010 organisé à Francfort au courant du mois d’Octobre 2010. Logo Navteq pour l'événement Direction 2010

Un événement très intéressant pour suivre la tendance du marché autour de la donnée cartographique et rencontrer les vrais acteurs de ce milieu.

Navteq Directions 2010 à Francfort

Plus de détails à travers les billets dédiés disponibles ici.

 

  • Participation aux Bing Maps Days à ParisBing Maps Days à Issy les Moulineaux - Microsoft Center

A l’occasion d’événement décideurs et techniques organisés en novembre 2010, Microsoft a souhaité mettre en avant sa plateforme cartographique avec notamment l’annonce de la nouvelle version de son API en version 7.

Un événement très intéressant mêlant retours d’expérience, cas clients et découverte technique de la plateforme en compagnie de Johannes Kebeck.  Bing Maps Days Session décideur et technique

Plus de détails sur l’événement via ces liens :

- http://blogs.developpeur.org/nicoboo/archive/2010/11/24/bing-maps-days-resume-de-l-evenement-et-des-conf-rences.aspx

- http://blogs.developpeur.org/nicoboo/archive/2010/12/10/bing-maps-for-enterprise-evolution-de-la-plateforme-et-precisions.aspx

 

  • Participation aux Techdays 2011 à Paris

L’événement technique majeur de Microsoft, organisé en Février 2011, a regroupé, comme chaque année, plus de 15 000 personnes sur les 3 jours.

Techdays 2011 Ask the expert

L’occasion pour moi de rencontrer de nombreux utilisateurs professionnels ou curieux des technologies intéressés par l’utilisation de la cartographie au sein de leurs projets.

Pleniere Techdays 2011

Bien entendu, c’est aussi l’occasion de croiser plein de monde et de revoir de vieilles connaissances tout en profitant pour se tenir informer des dernières technologies.

Cela a également été le moment où, lors de la session de Johannes, nous avons annoncé, avec Microsoft, la mise en place du programme V-TSP (voir plus bas) entre Wygwam et Microsoft.

 

  • Participation au MVP Summit à Seattle

Chaque année, Microsoft prends soin de regrouper la communauté de professionnels qui ont reçu le titre de MVP dans les locaux de Seattle, chef lieu des équipes techniques principales de Microsoft.

MVP Summit 2011 John's Map   MVP Summit 2011  MVP Summit 2011 - Steve Balmer SteveB on stage

Cela a été pour moi l’occasion, au delà de découvrir les Etats-Unis, de rencontrer en personne des experts avec qui j’échangeais depuis plusieurs années (oula que le temps passe :p) et passer des moments juste géniaux à découvrir les prochaines versions tout en profitant du cadre très différent de ce qu’on connait ici en France.

 Bing Maps MVP at Boeing Factory - very long tunnel and Planes!    MVP Bing Maps After technical sessions - Repas MVP Richard Brundritt, Alastair Aitchinson, John O'Brien, Brian Norman, Nicolas Boonaert Jonathan Ng, Dereck Chan, Chris Pietchsmann    MVP Bing Maps John O'Brien, Nicolas Boonaert, Alastair Aitchinson - at Safeco Field - 'How many Space Needles is that?'

Certainement mon événement préféré même si la distance n’est pas toujours la meilleure alliée :)

Le voyage, les rencontres au delà du cadre technique, les rencontres avec les équipes internes de Microsoft, c’est vraiment une chance de pouvoir participer à cet événement, j’espère vraiment pouvoir y participer en Février 2012 !

Ronny Kwon, Guillaume Belmas, Sebastien Warin, Nicolas Boonaert - I am contagious at Microsoft Visitor Center    Guillaume Belmas, Nicolas Boonaert, Sebastien Warin at Safeco Field MVP Summit    Cyril Durand, Sebastien Warin, Nicolas Boonaert - Seattle 2011

 

  • Participation au Wygday 2010 et au Wygday 2011Wygday Bing Maps session de présentation

Dans le cadre des Microsoft Days en région, et comme à son habitude Wygwam organise le Wygday, événement technique et décideur où j’ai depuis 3 ans maintenant, la chance d’animer une session.

Des présentations et des contenus basés sur des retours d’expérience concrets, l’occasion de discuter avec les experts techniques de Wygwam et Microsoft, présents pour partager leurs connaissances à travers une journée dédiée.

mashup_11B796D2[1]

Plus de détails sur les sessions ou l’événement via les liens suivants :

- Session 2010 : Intégrez de la cartographie à vos applications

- Session 2011 : La cartographie donne de la vie à vos données

 

Projets et annonces :

  • Mise en place d’une équipe dédiée à la cartographie au sein de Wygwam

Depuis le début de l’année nous participons activement au support de Microsoft et nous réalisons de nombreux projets en cartographie avec des scénarios avancés d’implémentation et d’intégration divers.

Plus d’information sur les compétences, n’hésitez pas à me contacter ou à consulter la section du site dédiée.

  • Mise en place du partenariat V-TSP Bing Maps : Virtual Technical Support Partner pour la France, Suisse et Belgique

Afin d’assister Microsoft et plus particulièrement l’équipe Bing Maps en France et dans les pays frontaliers, nous avons mis en place le programme V-TSP.

C’est ainsi que nous assurons une aide précieuse aux équipes France en fournissant notamment un support technique dédié et en Français, nous permettant ainsi de partager notre expérience de la plateforme et notre expertise sur les technologies Microsoft avec le plus grand nombre.

 

A suivre

Le temps de reprendre quelques forces pendant cette période estivale et j’entamerai une nouvelle année, passionné et communautaire au maximum !

Alors, toujours plus d’articles, toujours plus de projets en cartographie et toujours plus de plaisir à réaliser des projets variés et innovants.

Bref, une année avec encore plus de défis sur le plan professionnel comme sur le plan personnel !

Nicolas Boonaert à Seattle Space Needle Nicolas à Venise Pont des soupirs Nicolas Boonaert à Oslo Norvege 2011 Nicolas Boonaert - Norvege 2011 à Tromso avec mon amour 

Nicolas.

Les richesses de la plateforme Bing Maps for Enterprise ne résident pas uniquement dans ses contrôles de présentation mais également dans les services qui complètent parfaitement l’offre.

Bing Maps batch geocoding ou géocodage en batch (automatique et en masse) - presentation technique

Rappel sur la plateforme Bing Maps et les services

La plateforme Bing Maps for Enterprise est principalement composée des contrôles disponibles sous formes d’APIs JavaScript, des contrôles Silverlight pour les navigateurs Web ou pour les Windows Phone 7 – 7.0 et supérieurs (Mango) - et enfin à travers une multitude de service qui viennent peu à peu remplacer ceux de MapPoint, produit historique et phare de Microsoft dans le domaine de la cartographie.

D’une manière générale, voici la vue d’ensemble que je me plais à composer et réaliser afin d’expliquer la plateforme technique disponible :

Bing Maps for Enterprise Architecture globale (global architecture) technique 

On remarquera sur ce schéma la présence des constituants de la plateforme et ainsi des éléments suivants :

  • Des contrôles cartographiques
    • AJAX API en version 6.3 et en version 7
    • Contrôle Silverlight
    • Contrôle Windows Phone – Silverlight
  • Des services
    • REST Web Services : géocodage, géocodage inverse, itinéraire, imagerie, recherche de proximité et thématique
    • SOAP Web Services : géocodage, géocodage inverse, itinéraire, imagerie, recherche de proximité et thématique
    • Spatial Data Services : géocodage en masse, hébergement et filtre spatial sur les données
  • Des produits externes – non présentés ici
    • PhotoSynth
    • MapPoint Web Services – déprécié
    • Multimap Web Services - déprécié

 

Géocodage en batch, kezako ?

Le géocodage en batch proposé dans l’offre du Spatial Data Service intégré dans la plateforme Bing Maps propose de réaliser la qualification des entrées saisies en complétant les informations manquantes dans un fichier de retour.

En d’autres termes, il est possible de réaliser les deux opérations suivantes :

  • Géocodage :
    Résolution de la position géographique et adresse complète qualifiée à partir d’une entrée d’adresse
  • Géocodage inverse :
    Résolution de l’adresse à partir de la coordonnées géographiques

La chose la plus intéressante dans le cas client, c’est que chaque batch (ou job) de géocodage ne compte que pour une seule transaction ce qui est un réel avantage puisque l’on peut géocoder ou qualifier au maximum 200 000 éléments par fichier avec une limite de 300 Mo par fichier uploadé pour le batch géocodage.

C’est à ce jour un élément différenciateur des autres solutions du marché puisque c’est à ce jour le seul service public disponible pour effectuer ce type d’opération de manière supportée et rapide.

Concernant la qualité des résultats ou des données utilisées, celles-ci proviennent de Navteq, fournisseur de données cartographiques de la plateforme Bing Maps depuis plusieurs années et cette plateforme intègre de multiples sources de données afin d’apporter la meilleure précision.

 

Scénarii d’utilisation

Dans la plupart des cas, l’utilisation de ce type de service fait sens pour un grand nombre d’utilisateurs.

Géocodage en masse avec Bing Maps - principe généraux

Les principaux scénarii associés sont :

  • Géocodage des adresses qualifiées déjà contenues dans une base
  • Géocodage des adresses approximatives contenues dans une base
  • Géocodage inverse de points capturés

Dès lors que l’on observe le besoin d’obtenir un référentiel adresse de qualité et géo référencé, on peut utiliser ce service pour enrichir nos propres set de données.

 

Description de la procédure pratique

Pour cela, il faut comprendre le processus qui est respecté pour l’utilisation de ce service : Geocodage en batch - fonctionnement et processus d'utilisation des possibilités de géocodage d'un grand nombre d'adresse provenant d'un fichier XML ou CSV (ou Excel) en coordonnées géographiques latitude et longitude - transformation d'une adresse en latitude longitude d'un point géographique

D’une manière générale, on observe le processus suivant :

  1. Intégration et consolidation des données d’entrée
  2. Export simple au format utilisé par le service Bing Maps
    • CSV : séparateur VIRGULE, séparateur PIPE
    • XML : schéma disponible via ce lien
  3. Création du job de géocodage en utilisant le fichier exporté
  4. Inspection de l’état de la tâche
  5. Traitement de la réponse et intégration éventuelle des résultats

 

En concret

Après avoir couvert les aspects généraux, intéressons nous à un exemple concret d’utilisation de ce service.

Voici un exemple de géocodage qui respecte les étapes suivantes :

  • Etape 1 : Intégration et consolidation des données

Bing Maps batching geocodage - Géocodage en masse intégration et consolidations des données

Depuis la base de données, on récupère les colonnes qui correspondent aux informations utiles pour le géocodage. Typiquement, il faut de manière simple réussir à extraire les informations suivantes :

  • Identifiant : permet notamment de fusionner les résultats une fois l’opération réalisée
  • Adresse formatée
  • Ville
  • Code postal

Il est important de qualifier la donnée avant géocodage en assurant la qualité de la saisie des adresses, le bon formatage de celles-ci qui devra respecter, pour obtenir le meilleure résultat en France, le format suivant que je recommande :

*Numero* *Rue*,*CodePostal*, *Ville*, France

Ce qui donne des adresses telles que :

12 rue de la corniche, 59890, Quesnoy sur Deûle, France
58 rue Delphin Chavatte, 62840, Laventie, France

 

  • Etape 2 : Export du fichier à géocoder

Bing Maps géocodage en masse etape 2 Export du fichier à géocoder (CSV, XML ou depuis Excel)

Il vous faut exporter vos données dans un format supporté, la liste des formats supportés ainsi que les fichiers d’exemples sont disponibles à travers ces liens :

Dans notre cas présent, nous pouvons utiliser le fichier d’exemple que voici, au format CSV utilisant le PIPE comme séparateur :

168|fr-FR||||France|||Guéreins|||||||||||||||||||||||
169|fr-FR||||France|||Hautecourt Romanèche|||||||||||||||||||||||
170|fr-FR||||France|||Hauteville-Lompnes|||||||||||||||||||||||
171|fr-FR||||France|||Hostias|||||||||||||||||||||||
172|fr-FR||||France|||Hotonnes|||||||||||||||||||||||
173|fr-FR||||France|||Illiat|||||||||||||||||||||||
174|fr-FR||||France|||Injoux Génissiat|||||||||||||||||||||||
175|fr-FR||||France|||Innimond|||||||||||||||||||||||

 

  • Etape 3 : Création du job

Bing Maps géocodage en masse etape 3 - Création du job (Dataflow Job API)

Pour ce faire, plusieurs options, vous pouvez tout à fait utiliser vos propres applications et intégrer de ce fait les éléments selon vos besoins en vous appuyant éventuellement sur cet exemple de code : http://msdn.microsoft.com/en-us/library/ff701729.aspx.

Vous pouvez également utiliser différentes solutions applicatives comme par exemple celle de Johannes Kebeck dont les sources et l’application sont disponibles ici, ou encore le loader étendu de Inknowledge disponible ici.

Pour créer ce job, il vous sera nécessaire d’obtenir une clé si vous n’en avez pas déjà, celle-ci peut être générée en se connectant sur le portail business de Bing Maps avec un compte associé à un Live ID : http://www.bingmapsportal.com/

 

  • Etape 4 : Inspection de l’état de la tâche

Bing Maps géocodage en batch et en masse etape 4 - Inspection de l'état de la tâche via le service geocode data flow api géocodage

Il est possible de contrôler l’état d’une tâche de géocodage en batch et de récupérer les résultats pour une durée de 15 jours après réalisation de cette opération.

Pour obtenir l’état d’un job de géocodage, la format de l’adresse à utiliser est la suivante :

http://spatial.virtualearth.net/REST/v1/Dataflows/Geocode/jobID?output=output&key=BingMapsKey

Dès lors, il est possible de spécifier le format de la réponse en paramètre en spécifiant la valeur du paramètre output qui peut prendre les valeurs suivantes :

  • xml : format de sortie sous forme de fichier au format XML
  • json (défaut) : format de sortie de fichier au format JSON

Dans cette URL les paramètres sont donc :

  • jobID : identifiant unique du job
  • output (alias ‘o’) : format de la réponse (voir ci-dessus)
  • key : Clé Bing Maps utilisée

Voici un exemple d’URL :

http://spatial.virtualearth.net/REST/v1/Dataflows/Geocode/e14b1d9bd65c4b9d99d267bbb8102ccf?key=SAMPLEKEY&o=xml

Ici la documentation complète sur le type de réponse retournée : http://msdn.microsoft.com/en-us/library/ff701730.aspx

 

  • Etape 5 : Traitement de la réponse

Bing Maps géocodage en masse etape 5 - traitement de la réponse recue du service de géocodage en masse

Une fois l’opération réalisée, le résultat obtenu peut être téléchargé en utilisant une adresse au format suivant ou en utilisant le lien disponible dans la réponse de demande de statut lorsque l’opération est déclarée comme ‘success’ :

https://spatial.virtualearth.net/REST/v1/dataflows/Geocode/jobID/output/succeeded?key=MyDataflowJobKey

Les paramètres sont les suivants :

  • jobId : identifiant du job de géocodage disponible
  • ouput : format de sortie
  • key : clé Bing Maps ayant servie lors de la création du job de géocodage

Plus d’informations via ce lien : http://msdn.microsoft.com/en-us/library/ff701735.aspx

On obtient alors une réponse au format choisi et il suffit d’enregistrer cette réponse et de manipuler le document résultant, avec par exemple le composant SSIS et l’outil d’import intégré à SQL Server.

Il est recommandé, selon les usages, d’utiliser les types géographiques en intégrant les valeurs issues du géocodage en construisant dynamiquement la valeur dans la colonne.

Utilisation du type géographique suite au géocodage en masse depuis Bing Maps et inséré dans SQL Server 2008

 

Conseils et contraintes d’utilisation

Afin d’utiliser au mieux et surtout obtenir les meilleurs résultats, voici quelques conseils :

  • Automatiser au maximum vos exports de données formatées pour Bing Maps, cela vous assurera que cela fonctionne à chaque fois et simplifiera les traitements ultérieurs
  • Faire des tests avec un nombre restreints de point ou adresses en entrée et surtout des résultats dont vous pouvez vérifier la précision ou la véracité, puis continuer sur le reste des données
  • Privilégier l’utilisation du format CSV avec pour séparateur le PIPE, bien plus pratique avec le format d’adresse en France
  • Spécifier la locale et la culture à travers vos fichiers (en France, il s’agit de fr-FR, voir l’extrait de fichier d’exemple plus haut)

Les contraintes d’utilisation sont liées à celles imposées par le service en tant que tel. Celles-ci sont les suivantes :

  • Le fichier à envoyer doit respecter un format parmi ceux supportés :
    • CSV, XML
  • Le fichier doit :
    • Etre de taille inférieure à 300 Mo
    • Contenir des informations encodées en UTF-8
    • Etre limité à 200 000 entités à traiter
  • Respecter les limites d’utilisation :
    • Maximum de 10 jobs simultanés par compte Bing Maps
    • Maximum de 50 jobs par période de 24h
    • Maximum de jobs selon la clé d’utilisation (nombre de requêtes associées au type de clé Bing Maps)

 

Pour aller plus loin

Les résultats fournis par ce service ne se limitent pas à une simple position géographique, ou adresse formatée. On observe en effet d’autres informations qui peuvent être utiles pour analyser et filtrer les résultats.

Ces informations sont étroitement liées au moteur de géocodage utilisé en interne par Microsoft. On retrouve les informations suivantes :

  • Confidence : information indiquant la confiance ou le degré de précision associé à l’opération de géocodage (ou géocodage inverse) opérée
    Ex : High, Medium, Low
  • EntityType : information indiquant le type d’objet associé au géocodage
    Ex : Address, PostalCode1, RoadBlock

Ces informations peuvent s’avérer plus qu’utiles puisqu’elles peuvent être utilisées pour fusionner les sources de données et garantir la qualité globale de l’information.

Il est également à noter qu’il est possible de récupérer la liste des éléments n’ayant pas réussi à être résolus à travers un fichier spécifique, celle-ci peut alors faire l’objet d’une qualification plus précise ou d’un traitement spécifique.

 

Conclusions

Ce service est un réel avantage proposé à travers la plateforme Bing Maps for Enterprise et c’est un élément réellement différenciateur de la concurrence à l’heure actuelle. C’est également la seule méthode officielle et supportée de faire ce genre d’opération sur les plateformes de Web API géographique.

Nul doute que l’utilisation d’un tel service peut vous aider à apporter de la cartographie et la localisation de vos données car ici, il faut rappeler que l’on estime que les données géolocalisables ou tout du moins utilisables dans un contexte géographique, en entreprise représenteraient 80% des données déjà acquises par celle-ci, autant de possibilités supplémentaires d’enrichir l’expérience utilisateur et de tirer le meilleur de vos données.

Si vous avez des questions sur ce type d’opération, n’hésitez pas à me contacter via les commentaires ou par mail.

En ce jeudi 9 juin, Wygwam a organisé l’événement Wygday à Lille pour la 5e édition en partenariat avec Microsoft dans le cadre des Microsofts Days en regroupant un grand nombre de participants et d’intervenants pour échanger sur les aspects technologiques.

Bing Maps Presentation - session avec slides et demonstrations - Wygday 2011 à Lille - Nicolas Boonaert, Marie Chenut et Thomas Driancourt présentend la cartographie en utilisant la plateforme Bing Maps for Enterprise

A l’occasion de cet événement, j’ai eu la chance de pouvoir animer une session dédiée à la cartographie et plus particulièrement à la plateforme Bing Maps for Enterprise et les implémentations que l'on peut réaliser.

Pour cette session j’ai convié Marie Chénut et mon collègue Thomas Driancourt, permettant de couvrir tantôt une présentation générale et concentrée client tantôt une présentation technique avec des retours d’expériences et cas concrets utilisant l’API v7 de Bing Maps, la plateforme Azure, les technologies SQL Server et bien entendu HTML5 pour apporter une expérience encore plus impressionnante.

Bing Maps session et presentation

 

Voici la présentation :

 

Ici disponible au format PowerPoint :

http://www.boonaert.net/BingMaps/WYGDAY11%20-%20Bing%20Maps%20for%20Enterprise.pptx

 

Les démonstrations feront l’objet d’articles sur ce blog prochainement, nous étudions également la possibilité d’en réaliser un Webcast.

A l’occasion de l’émission Pékin Express, nous avons réalisé au sein de Wygwam une application intégrant la solution de cartographie Bing Maps intégrée dans le site de M6.

Une mise en œuvre direct de ce type de solution avec la mise en application de nos processus d’industrialisation autour de la cartographie, lié à notre expertise sur les technologies liées.

Bing Maps for Enterprise - Utilisation de la cartographie interactive dans un contexte de communication et marketing

Information officielle

Retrouvez la publication officielle sur le site de Wygwam à travers ce lien.

Pour sa septième édition de Pékin Express, M6 Web a choisi d’utiliser la cartographie interactive Microsoft® Bing Maps sur le site de l’émission, et ce dans une démarche d’enrichissement éditorial et fonctionnel de ses sites.

Pour « La route des grands fauves », M6 Web a voulu donner pour la première fois la possibilité aux internautes de suivre de façon interactive, étape par étape, le périple des candidats pendant toute la durée de la course.

M6 Web s’est donc associée à Wygwam, support technique externe exclusif de Microsoft® pour la plateforme Bing Maps for Enterprise en France, afin de donner accès à son public à du contenu additionnel géolocalisé grâce à une collaboration avec des experts technologiques reconnus.

Les candidats de Pékin Express ont, cette saison, traversé l'Afrique au cours de 12 étapes, partant du Caire en Egypte pour rejoindre le cap de Bonne-Espérance en Afrique du Sud en passant par le Kenya, la Tanzanie et le Lesotho. Dans ce contexte, les outils de géolocalisation et de cartographie interactive constituent une réelle opportunité, un support technologique en parfaite adéquation avec le programme.

Dès lors, en partenariat avec Microsoft®, Wygwam a développé, en un temps très court, une application de cartographie interactive. Nicolas Boonaert, un des experts MVPs (Microsoft® Most Valuable Professional) de Wygwam, également auteur du livre « Bing Maps, guide complet de la cartographie interactive », a réalisé l’application intégrée au site de l’émission.

Cette dernière utilise la plateforme Bing Maps for Enterprise et la solution d’hébergement Windows Azure afin de garantir les performances et la haute disponibilité de l’application. Une interface d’administration permet également aux équipes de contribution de M6 Web de saisir et éditer les points d’intérêts.

 

Retrouvez le site de l’émission à travers ce lien : http://pekin-express.m6.fr/

Pekin Express - La route des grands fauves 

Informations techniques

L’application a été réalisé en un temps minime grâce à l’utilisation de bloc développé à travers d’autres projets d’implémentation et de templates de code.

La vraie problématique dans le cadre de tels projets réside dans la charge et la volumétrie utilisateur à laquelle sera soumise l’application. Cette charge peut varier fortement en fonction de la diffusion de l’émission, l’épisode et les actions pendant ce dernier et enfin les communications qui sont opérées autour du programme.

Voici une idée d’estimation de la répartition du trafic :  Charge variable de l'application Windows Azure - données factices estimées pour les développements

Dès lors, afin de répondre aux contraintes de déploiement client, pour garantir les performances et la haute disponibilité de l’application, l’utilisation de la solution d’hébergement Windows Azure s’est imposé.

Voici une vue synthétique de l’implémentation technique réalisée :

Architecture technique Bing Maps for Enterprise et Windows Azure pour le site de l'émission Pékin Express de M6

Conclusions

Il est à noter que cette solution est le résultat de l’analyse des besoins comme celle des contraintes imposées par l’environnement du client. Il existe bien des solutions pour réaliser ce type d’application.

Si vous avez des projets similaires, il faut précisément analyser l’ensemble des éléments pour implémenter la solution la plus adaptée, n’hésitez pas à me contacter au besoin pour échanger sur ces points ou pour vous accompagner dans la réalisation.

Aussi, je tiens à remercier les équipes de Microsoft qui ont réussi à se rendre disponibles pour répondre aux différents points techniques et légaux.

Comme à l’habitude, Wygwam organise une nouvelle édition de son événement technique annuel à savoir : le Wygday.

Cet événement est organisé dans le cadre des Microsoft Days où professionnels de l’informatique, experts technologiques et passionnés de ces domaines sont conviés tout au long de la journée, le Jeudi 9 juin 2011.

Wygday 2011 - Evenement gratuit technique et decideur à Lille le Jeudi 9 juin 2011 - Session Cartographie

A propos de la session cartographie

Description :

Cette année encore, j’ai l’opportunité d’animer une session concernant ma spécialité à savoir la cartographie interactive et plus particulièrement, sur les cas d’utilisations impliquant les APIs disponibles en ligne comme l’API Bing Maps for Enterprise.

Bing Maps session de presentation technique developpeur et decideur

Wygwam, pour cette année 2011, est en effet support technique (V-TSP) de Microsoft pour la plateforme Bing Maps en France en Suisse et en Belgique et c’est ainsi que nous répondons aux questions des clients implémentant ces solutions et participons aux phases d’avant-vente et étude sur certaines opportunités.

Cette session se déroulera entre 10h15 et 11h15 et se voudra résolument technique, à destination des développeurs et des décideurs techniques.

 

Speakers :

Cette session sera animée par l’équipe Wygwam accompagnée de Marie Chenut, responsable Bing Maps France, qui introduira la présentation par un rapide tour d’horizon de la plateforme et les dernières nouvelles associées.

Thomas Driancourt et moi-même prendrons ensuite la main pour présenter nos retours d’expériences, les bonnes pratiques et exposer quelques réalisations techniques.

 

Thèmes abordés et contenu

A travers différents retours d’expérience, nous aborderons les sujets concernant l’implémentation de la plateforme Bing Maps for Enterprise dans des cas d’entreprises.

Dans un premier temps nous nous intéresserons à la présentation rapide des briques applicatives et fonctionnelles qui sont à notre disposition avec en vue, un état de l’art concernant l’ensemble de ce qui est disponible sur le marché.

Ensuite nous nous intéresserons par la pratique à la description d’architectures types vous permettant de répondre à vos besoins avec des implémentations intégrant l’utilisation de Windows Azure, SQL Azure et SQL Server avec l’utilisation des types géographiques.

Windows Azure pour application de cartographie Bing Maps    SQL Azure et Bing Maps     SQL Server 2008 type geography Bing Maps

Nous aborderont également les problématiques d’industrialisation autour de vos développements cartographiques.

HTML5 canvas et Bing Maps AJAX v7 Enfin, et à travers ce post, je vous invite à me communiquer vos attentes dans les commentaires, pour information je prévois actuellement de faire des démonstrations impliquant l’utilisation de l’API Bing Maps AJAX V7 en combinaison avec les possibilités d’HTML5 à travers des cas concrets d’utilisation pour étendre les contrôles existant.

Bing Maps AJAX v7 Heatmap

 

Public cible

Cette session s’adresse principalement aux décideurs techniques, développeurs ainsi qu’aux spécialistes SIG.

 

Informations utiles à propos de l’événement

Le Wygday, c’est l’événement public dédié pour rencontrer les experts technologiques et membres de Wygwam et pour échanger sur les sujets qui nous passionnent.

 

Inscription

Pour plus d’informations sur l’événement et pour vous inscrire, n’hésitez pas à vous rendre sur le site de l’événement : http://wygday.wygwam.com/

Wygday 2011 - Inscription

Informations pratiques

Cet événement se déroule le Mardi 8 Juin 2010 toute la journée et ça se passe à Euratechnologies à Lille :

image

Euratechnologies
165, avenue de Bretagne
59000 Lille

 

Le programme

Pour cette nouvelle édition, un programme riche et une organisation nouvelle vont composer cette journée :

Programme du Wygday 2011 - sessions 

Le détails concernant les speakers et le contenu pour chaque session devrait s’étoffer et se préciser à l’approche de l’événement.

 

N’hésitez pas à vous inscrire et à venir nombreux !

A travers ce troisième article, nous allons nous intéresser à la création d’élément géographique en nous concentrant particulièrement sur leur représentation textuelle connue (Well-Known Text – WKT) afin de comprendre comment déclarer ces éléments géographiques.

SQL Server 2008 type geographique geography cartographique et bing maps for enterprise et definition des elements geographiques (point, polygone et linestring) avec SQL Server 2008 et 2011

 

Liens vers les articles liés

Cet article s’inscrit dans la série dédiée aux types géographiques et géométriques :

 

Introduction au Well-Known Text

La représentation textuelle permet de définir des entités géographiques ou géométriques de manière humainement lisible.

Open Geospatial consortium logo Ces entités géographiques et représentation textuelle associée sont étroitement liés aux standards établis par l’OGC (Open Geospatial Consortium).

De cette manière, un élément défini pourra être représenté textuellement de la même façon, quelque soit le système sous-jacent.

Cette représentation en Well-Known Text (WKT) est la représentation textuelle lisible de sa version binaire Well-Known Binary (WKB) qu’il est également possible d’utiliser sur le système SQL Server 2008 et versions supérieures parmi bien d’autres systèmes.

Il existe d’autres représentations des données avec notamment des formats tel que le Geographical Markup Language (GML).

 

Types d’éléments

Evidemment, il existe plusieurs types d’éléments géométriques correspondant respectivement à des représentations de différentes données.

Ces types sont utilisables tant dans un contexte géométrique que géographique comme ici présenté.

Parmi ces types, on retrouve :

  • Les points : POINT
    • ex: Point d’intérêt, bornes, utilisateur…
  • Les lignes ou polylignes : LINESTRING
    • ex: Route, frontières…
  • Les polygones : POLYGON
    • ex: Parcelles, zones vertes…

Et les ensembles associés :

  • Les ensembles de points dits “multipoints” : MULTIPOINT
  • Les ensembles de lignes dits “multilignes” : MULTILINESTRING
  • Les ensembles de polygones dits “multipolygones” : MULTIPOLYGON 
  • Les ensembles d’éléments : COLLECTION

Geometry dans SQL Server - source: http://blogs.msdn.com/blogfiles/davidlean/WindowsLiveWriter/SQL2008SpatialSamplesPartn6ofnBackground_11F89/GeometryTypes_2.png

L’ensemble de ces éléments peut être matérialisé sous la représentation suivante en termes d’architecture :

Architecture des types géographiques (geography) et géométriques (geometry) en WKT

Ces types sont définis dans le document fourni par l’OGC qui s’intitule “OpenGIS Simple Features Specification for SQL” disponible à travers ce lien : http://portal.opengeospatial.org/files/?artifact_id=829

La prochaine version de SQL Server, pour le moment connu sous le nom de SQL Server “Denali” ajoute, en plus d’améliorer les opérations sur le type géographique, le support des types d’éléments suivants par les types d’élément dits “simples” :

L’ensemble des nouveautés concernant le domaine spatial dans la prochaine version SQL Server “Denali” est présenté ici : http://download.microsoft.com/download/d/9/4/d948f981-926e-40fa-a026-5bfcf076d9b9/Spatial_Denali_CTP1.docx

Je reviendrai sur ces nouveautés dans un article dédié qui, je pense, fera sens à la suite de cette série.

 

Construction des coordonnées

SQL Server 2008 et 2011 Denali - type geography Les coordonnées sont les éléments de base définissant les informations géographiques associées à un point dans l’espace.

Ces coordonnées inclut les informations suivantes :

  • Latitude
  • Longitude
  • Optionnels et avec un support limité
    • Altitude
    • Mesure – référence linéaire

Dans la construction des autres éléments, ces coordonnées sont utilisées dans chacune des définitions comme présenté ci-dessous.

 

Construction d’un point

La représentation textuelle d’un point correspond à l’écriture suivante :

POINT(COORDINATES)   ou   POINT(LONGITUDE LATITUDE)

Avec un exemple comme :

POINT(2.75 47.5)

Et en implémentation SQL Server :

DECLARE @center as geography
SET @center = geography::STPointFromText('POINT(2.75 47.5)', 4326)

Ce qu’il est important de noter à travers cette représentation, c’est l’utilisation du mot clé standard ‘POINT’ et la construction qui suit le schéma définissant la longitude dans un premier temps, puis la latitude dans un second temps. Le dernier paramètre de cette représentation correspond au SRID associé à cet élément géographique.

Pour plus de détails concernant le SRID, il faut se référer à la partie 2 de cette série d’article et à travers ce lien.

 

Construction d’une polyligne géographique

Sur le même principe que le point, la définition d’une polyligne utilise le mot clé ‘LINESTRING’ et sa représentation correspond à l’écriture suivante :

LINESTRING(COORDINATES1,COORDINATES2,COORDINATES3)

Avec un exemple, comme :

LINESTRING(2.75 47.5,3 47.5,3 50)

Et ici, en implémentation SQL Server 2008 :

DECLARE @line as geography
SET @line = geography::STLineFromText('LINESTRING(2.75 47.5,3 47.5,3 50)',4326)

Le point particulier avec ce type d’élément que l’on pourrait, par abus de langage, qualifier de géométrie géoréférencée réside dans la construction de point de coordonnées et l’ordre associé qui établit l’élément en tant que tel.

Voici la géométrie obtenue (en projection Mercator) :

LINESTRING geography type - définition WKT SQL Server

 

Construction d’un polygone géographique

Enfin, le polygone respecte le même principe d’écriture en utilisant le mot clé ‘POLYGON’ et présente quelques contraintes d’écriture et définition que l’on aborde juste sous cet ordre SQL :

POLYGON((COORDINATE1,COORDINATE2,COORDINATE3, COORDINATE1))

image Attention : les parenthèses sont doublées dans l’écriture de ce type d’éléments géographiques et la fermeture du polygone en utilisant la même coordonnées géographiques pour le premier et le dernier point.

Avec un exemple comme suit :

POLYGON((2.75 47.5,3.5 47.5,3.5 50, 2.75 47.5))

Et ici l’implémentation SQL Server 2008 :

DECLARE @polygon as geography
SET @polygon = geography::STGeomFromText('POLYGON((2.75 47.5,3.5 47.5,3.5 50, 2.75 47.5))',4326)

image A noter : l'utilisation possible de la méthode STPolyFromText() pour la composition du polygone, comme indiqué ici :
http://msdn.microsoft.com/fr-fr/library/bb933971.aspx

Ici le polygone en résultat :

POLYGON geography type SQL Server 2008 et 11.0 Denali

Comme pour la polyligne, l’ordre des coordonnées importe.

Pour un polygone l’ordre est encore plus important car il est nécessaire de déclarer ces points selon un ordre spécifique dans le sens anti-horaire afin de valider l’orientation du polygone pour permettre l’utilisation au sein de SQL Server 2008.

La prochaine version de SQL Server sera plus souple concernant ces déclarations, mais je reviendrai dans le détails sur les améliorations apportées par la version 11.0 de SQL Server

SQL Server 2008 nécessite que ces géométries géoréférencées soient orientées sans quoi l’erreur suivante peut s’afficher :

Erreur orientation du polygone SQL Server 2008

Cela provient d’un souci de définition qui ne respecte pas les limitations et les contraintes de définition des éléments.

Ici le message d’erreur indique qu’il s’agit d’une définition de polygone erronée car celle-ci excède un simple hémisphère alors que l’on souhaitait définir la géométrie inverse en termes de définition.

Le message d’erreur constaté est le suivant :

A .NET Framework error occurred during execution of user-defined routine or aggregate "geography":
Microsoft.SqlServer.Types.GLArgumentException: 24205: The specified input does not represent a valid geography instance because it exceeds a single hemisphere. Each geography instance must fit inside a single hemisphere. A common reason for this error is that a polygon has the wrong ring orientation.

Les polygones doivent en effet être décrit dans le sens anti-horaire pour définir un polygone valide d’un point de vue SQL.

Polygon ring orientation (hemisphere limite) - regle de definition d'un polygone pour SQL Server en utilisant le type géographique 

Le problème se répète et se complique lorsqu’on souhaite désigner un polygone avec plusieurs cercles, aussi appelés polygones complexes, déterminer l’orientation peut alors se révéler plus délicate.

 Polygon complex (with holes) ring orientation (hemisphere limit) - regle de definition d'un polygone pour SQL Server en utilisant le type géographique

Dans le prochain article, on traitera des géométries complexes et composites, avec quelques règles et astuces qui pourront vous aider dans les implémentations que vous en ferez dans vos applications.

 

Conclusions

Le modèle de déclaration des éléments reste la base de l’utilisation des types géographiques au sein de SQL Server 2008 et supérieur.Sql Azure type geographique

Enfin, il est à noter, que ces types géographiques et géométriques sont disponibles dans l’offre de Windows Azure dans SQL Azure depuis juin 2010.

L’utilisation des types géographiques se résume principalement à ces éléments et l’exploitation qui peut en être fait avec les méthodes standards (standard OGC) et étendues propres à SQL Server 2008 que l’on abordera dans la suite de cette série dédiée aux types géographiques.

Microsoft a mis à jour Jeudi, son API Bing Maps AJAX en version 7 sans annonce de nouvelle version pour autant, mais avec son lot de nouveautés et quelques changements techniques intéressants et présentés ici.

Bing Maps for Enterprise version 7 mise a jour

Présentation des nouveautés du portail Bing Maps

Comme pour chacune des mises à jour le portail Bing Maps est un des premiers endroits où l’on peut constater les changements et la mise en avant des nouveautés.

La mise en place et l’implémentation se manifeste en premier lieu par la modification du comportement du contrôle qui propose désormais une inertie caractéristique de l’API Google Maps et d’autres mais aussi des interfaces cartographiques sur périphériques mobiles.

Mais surtout, une des principales nouveautés réside dans l’utilisation du Streetside modifié en ce que Microsoft appelle “Blockview” déjà présenté à travers un article précédent et permettant de visualiser les façades des rues plutôt que d’obtenir un affichage plus commun sous forme de bulles panoramiques telles que le proposait l’ancien portail ou la concurrence.

Bing Maps Streetside streetslide and blockview - version 7

Je vous conseille de tester dans une des villes couvertes afin d’observer l’expérience autour de cette nouvelle présentation, je suis persuadé de l’usage de cette nouvelle vue pour les annuaires géolocalisés.

Je reviendrai très prochainement sur cette fonctionnalité en détail et sur son utilisation dans vos développements.

 

Nouvelles ressources

Afin d’appréhender de manière plus pratique le développement avec l’API Bing Maps v7, Microsoft a mis à disposition quelques éléments nouveau pour accompagner les développeurs.

Ainsi on retrouve l’habituel Interactive SDK (iSDK) pour l’API AJAX v7 maintenant disponible à travers ce lien : http://www.bingmapsportal.com/ISDK/AjaxV7

Bing Maps Interactive SDK v7

 

Présentation des nouveautés techniques

Au niveau des nouveautés techniques, on retrouve des changements radicaux dans la méthode de chargement des scripts qui peuvent éventuellement modifier le comportement de certains de vos développements qui n’auraient pas forcément respecté les recommandations de Microsoft proposées à travers la documentation MSDN.

En regardant de manière plus précise, on peut lister les changements comme suit :

MSDN Bing Maps Best practicesLa liste des modifications techniques est en partie disponible à travers ce lien sur la MSDN : http://msdn.microsoft.com/en-us/library/gg675211.aspx .

Je reviendrai sur la plupart de ces modifications dans des articles techniques dédiés en les mettant en évidence de manière détaillée.

 

Changements à l’issu de cette mise à jour

Comme indiqué, une des fonctionnalités mises à jour concerne le chargement des scripts et cette modification implique un chargement différé qui a été modifié par rapport à la version précédente.

Dès lors, il est possible que sous quelques navigateurs (Firefox 4.0.x et Chrome principalement, erreur du genre Microsoft.Maps.Location is not a constructor…), vous observiez un souci au chargement si vous utilisiez une méthode non préconisé par Microsoft mais qui marchait jusqu’alors et qui résidait à utiliser le code dans un contexte jQuery et plus spécialement lorsqu’on initialise le contrôle ou tout autre composant appartenant au contrôle Bing Maps AJAX v7 à travers un bloc ready() comme suit :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" charset="UTF-8" 
            src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0">
    </script>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.2.min.js" 
            type="text/javascript"></script>
    <script type="text/javascript">

        $(function () {
            // Initialize the map
            map = new Microsoft.Maps.Map($('#map').get(0), {
                credentials: "Your Bing Maps Key",
                center: new Microsoft.Maps.Location(47.5, 2.75),
                zoom: 4,
                mapTypeId: Microsoft.Maps.MapTypeId.road
            });

        });
    </script>
</head>
<body>
    <div id="map" style="position: relative; width: 800px; height: 600px;">
    </div>
    <div id="opacitySlider" style="position: relative; width: 400px;">
    </div>
</body>
</html>

MSDN Bing Maps Best practicesLa méthode recommandée à ce jour est décrite à travers la page MSDN dédiée disponible via ce lien, n’hésitez pas à m’indiquer si vous observer un quelconque souci en utilisant les commentaires sur ce billet.

On peut au choix, utiliser l’événement onload sur le body (1) ou utiliser un paramètre d’URL qui sera déclenché après le chargement de l’ensemble des scripts et dépendances du contrôle spécifié comme jsonp (2) :

  • 1 : utilisation de l’événement onload
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" charset="UTF-8" 
            src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0">
    </script>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.2.min.js" 
            type="text/javascript"></script>
    <script type="text/javascript">
        function getMap() {
            // Initialize the map
            map = new Microsoft.Maps.Map($('#map').get(0), {
                credentials: "Your Bing Maps Key",
                center: new Microsoft.Maps.Location(47.5, 2.75),
                zoom: 4,
                mapTypeId: Microsoft.Maps.MapTypeId.road
            });
        }
    </script>
</head>
<body onload="getMap()">
    <div id="map" style="position: relative; width: 800px; height: 600px;">
    </div>
    <div id="opacitySlider" style="position: relative; width: 400px;">
    </div>
</body>
</html>

  • 2 : utilisation du paramètre d’URL onscriptload (méthode jsonp)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title></title>
    <script type="text/javascript" charset="UTF-8" 
src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=7.0&onscriptload=getMap">
    </script>
    <script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.5.2.min.js" 
            type="text/javascript"></script>
    <script type="text/javascript">

        function getMap() {
            // Initialize the map
            map = new Microsoft.Maps.Map($('#map').get(0), {
                credentials: "Your Bing Maps Key",
                center: new Microsoft.Maps.Location(47.5, 2.75),
                zoom: 4,
                mapTypeId: Microsoft.Maps.MapTypeId.road
            });
        }

    </script>
</head>
<body>
    <div id="map" style="position: relative; width: 800px; height: 600px;">
    </div>
    <div id="opacitySlider" style="position: relative; width: 400px;">
    </div>
</body>
</html>

Bing Maps onscriptload parameter

On remarque ici, parfaitement, l’utilisation du paramètre onscriptload, pour obtenir plus d’information concernant ce paramètre, il faut se référer à la documentation comme indiqué dans la v6.3 :

http://msdn.microsoft.com/en-us/library/cc980837.aspx

 

Mon avis

Bing Maps for Enterprise and HTML5 logoLa mise à jour de l’API AJAX de la plateforme Bing Maps montre l’intérêt de la part de Microsoft pour ce composant JavaScript + HTML (et même HTML5) ce qui est un réel plus quand on voit l’étendue de ses possibilités une nouvelle fois renforcée.

Cependant, et c’est très rarement arrivé depuis des années, la mise à jour ne s’est pas vraiment présenté de manière transparente.

Annoncée tardivement par les équipes de Microsoft mais constatés sur chacun des sites mis en production, ces changements ont causé des soucis pour les sites qui ne respectaient pas forcément les méthodes préconisées par Microsoft.

D’une manière générale, c’est une communication mal opérée des équipes techniques de Microsoft et une mise à jour “under-the-hood” (ou en mode ‘ninja’) qui a en réalité des impacts et qui souligne un manque de rigueur qui pour le coup, est difficile à ne pas remarquer pour certains.

On se souvient les mises à jour mineure opérée sur la version 6.1 et plus récemment sur la version 6.3 qui s’en indiquer quoi que ce soit, a modifié le comportement du script ce qui pouvait avoir des impacts avec les anciens navigateurs, mais sur ce type de service, il faut savoir que c’est une pratique qui parfois intervient et on remarque ce genre de soucis bien plus régulièrement sur les changements de l’API Google Maps JavaScript.

Nous avons pu échanger avec les équipes produits et techniques et il est clair que ce genre de scénario va être gage de prudence pour les prochaines mises à jour imagepour ne pas donner une mauvaise impression quant à la plateforme et à sa pérennité.

Il faut reconnaître, et c’est très facilement remarquable sur le forum officiel et à travers les échanges mail, que Microsoft se rend particulièrement disponible, il suffit de se rendre sur le forum officiel pour remarquer l’implication des équipes techniques.

 

Conclusions

Cette mise à jour du script ajoute quelques fonctionnalités bien utiles et des possibilités nouvelles avec le contrôle AJAX v7 qui ne manque pas d’être le support des ambitions de l’équipe Bing Maps pour apporter de l’innovation.

Il faut rappeler que cette mise à jour ne doit pas être ressenti sur vos sites, alors si vous rencontrez des soucis d’implémentation ou tout simplement si vous constatez un bug technique à la suite de cette mise à jour mineure, n’hésitez pas à me contacter via les commentaires de ce billet.

Wygwam et moi-même sommes à ce titre nominés V-TSP de manière exclusive pour la France, la Suisse et la Belgique pour accompagner Microsoft et ses partenaires, dans ces pays pour toutes questions techniques ou problématique de réalisation de projet.

Après avoir brièvement présenté l’origine de l’implémentation de ce type de données au sein de SQL Server, cet article va s’intéresser au type géographique qui se révèle être très complet et plus qu’intéressant.

SQL Server Spatial geography geometry Bing Maps explication des types géographiques et technique de projection

Avant de commencer à entrer dans le vif du sujet à propos de ce type, il peut être important pour tous de saisir les éléments liés à la géographie et à la cartographie qui ne se résument pas à la simple implémentation technique qui est réalisé dans le produit SQL Server ou dans différentes produits et APIs.

Je ferai donc dans un premier temps une présentation sommaire de l’origine de la cartographie afin de nous préparer à l’utilisation de ce type au sein du produit SQL Server.

 

Historique de la géodésie

La géodésie est un sujet passionnant. C’est en effet une science qui à l’origine existait pour aider la cartographie (au sens construction de carte) mais qui, au vue de certains paramètres, s’est réellement diversifiée pour intégrer notamment l’analyse de la forme et les dimensions de la planète Terre.Géodésie et cartographie interactive - illustration de la théorie de la Terre Plate

Cette science a connu plusieurs périodes où chacun imposait sa vérité scientifique ou non, qui était de plus, très étroitement lié à l’aspect politique et religieux du contexte.

C’est sans nul surprise que vous apprendrez que la Terre est un astre sphérique aujourd’hui mais vous savez comme moi que tout le monde ne pensait pas comme ça de tous temps.

Il faut savoir que certaines hypothèses de ce concept de planète sphérique existaient déjà en Grèce antique mais elles étaient refusées pour des raisons d’influences et de politique, mais probablement aussi par manque de preuves scientifiques.

Géographie et géodésie Terre plate

Cette hypothèse ou cette théorie selon laquelle la Terre n’était pas plate a mis plusieurs centaines d’années pour être entendue et acceptée comme un fait.

 

La géodésie et ce que l’on sait

Plusieurs milliers ou centaines d’années après Aristote, Thalès ou bien d’autres, les révélations sur notre planète ont suivi et nombre de mathématiciens, géographes ou d’autres spécialistes de leurs domaines respectifs nous ont confirmé cette théorie tout en la complétant.

De nombreuses opérations de mesures et calculs ont été requises pour établir le fait que cette bonne vieille planète Terre qui nous abrite n’était pas plate, puis pas uniquement sphérique mais en réalité écrasée au niveau des pôles.

La Terre, dans un modèle simplifiée correspond à une forme de révolution ellipsoïdale autrement dit, une ellipse tournée autour d’un axe passant à travers les 2 pôles.

Ellipsoïde de révolution pour la représentation géographique 

Des études plus avancées ont également prouvé que la forme de la Terre n’était pas si simple et qu’elle ressemblait en réalité à un patatoïde bosselé et c’est réellement cela qu’il faut retenir. Elle présente à sa surface des différences de niveau et des variations du champs de pesanteur présentant une amplitude de différences correspondant à des maximums culminant à 200m.

schema demontrant la forme de la geoide de la terre

Autrement dit, en dehors du niveau du sol variant évidemment de manière importante, on observe surtout une variation du niveau de pesanteur qui traduit une forme modifiée à considérer qui agit à des niveaux qui peuvent réellement être insoupçonnés tels que la durée de révolution de la Terre.

Compte tenu de la taille de la Terre, on se doute que cette différence de mesure n’est pas forcément très relevante dans la majorité des cas d’utilisation avec des outils de cartographie interactive qui présentent une précision largement suffisante et commune à ce type d’usage.

Il est parfois important de considérer ces points avec précision pour des domaines comme la géophysique ou même l’analyse maritime et océanique.

 

Les systèmes géodésiques et coordonnées

Un point bien souvent oublié ou mal présenté concerne le système géodésique dans ces types de données. Ce système correspond au référentiel qui détermine les caractéristiques telles que les rayons associés de l’ellipsoïde utilisée pour la représentation de la Terre, l’origine et les orientations des axes de définition.

Le système géodésique le plus couramment rencontré dans le monde est le système géodésique mondial : le WGS84 (Worldwide Geodetic System –1984) qui nous permets de définir les informations suivantes :

  • Les rayons de la Terre : définit par l’ellipsoïde retenue par le système géodésique GRS 80, corrigée depuis en imposant les valeurs suivantes :
    • Rayon semi-majeur : 6378137 m
    • Rayon semi-mineur : 6356752,314140 m corrigé en 6356752,314245 m
  • Les référentiels de coordonnées :
    • Base des latitudes : équateur (parallèle d’origine)
    • Base des longitudes : méridien IERS (méridien d’origine)

Il existe une panoplie d’autres systèmes géodésiques avec notamment le RGF93 (Référentiel Géodésique Français – 1993) utilisé en France principalement dans les constructions ou les données d’urbanisme plus généralement et qui peut être assimilé au WGS84 dans ses constantes de calcul de coordonnées.

imageLe méridien de Greenwich n’est pas le méridien de référence du système WGS84. Ce dernier, l’IERS méridien de référence est en effet situé un peu plus à l’Est (un peu plus de 100m).
- Source :
http://www.nmm.ac.uk/explore/astronomy-and-time/astronomy-facts/history/the-longitude-of-greenwich

Les coordonnées géographiques correspondent techniquement à une position précise et unique dans le référentiel choisi. Ils permettent de définir un point précis que l’on pourra retrouver ou convertir dans un autre système en se basant sur les constantes.

Latitude et longitude schema explicatif

 

Les systèmes de projection

La représentation du monde réel sur un format à plat (papier ou numérique) implique un choix dans la restitution des informations géographiques.

Il existe de nombreux systèmes de projection qui sont utilisés selon les besoins parmi lesquels on retrouve le plus répandu (en tout cas pour les utilisateurs lambdas) qui est le système de projection Mercator.Projection Mercator 1569

Ce système de projection, introduit en 1569 par Gerardus Mercator, est basé sur une projection cylindrique du monde.

Technique de projection cylindrique

Cette projection est très régulièrement rencontrée et c’est bien souvent celle que l’on est habitué à retrouver depuis les manuels scolaires comme à travers les différents supports.

Elle présente toutefois certaines limites et ses inconvénients lorsque notamment on souhaite afficher des informations dans des latitudes élevées (à proximité des pôles).

En effet, un des principaux problèmes réside dans la déformation qui est appliquée pour représenter le monde et qui peut être mise en évidence en utilisant des indicateurs visuels appelés indicatrices de déformation de Tissot et se présentent comme suit :

Projection Mercator avec indicatrices de deformation de Tissot

Il existe d’autres systèmes de projection permettant d’adapter la vue en fonction de l’information à diffuser. Ainsi, pour une information au voisinage des pôles, on comprends directement que le système Mercator n’est pas optimal et dans ce cas précis on choisira un autre système tel qu’une projection conique de Lambert,un système utilisant une projection azimutale plus adaptée.

Voici les schémas décrivant d’autres techniques de projection avec dans l’ordre, la projection conique, la projection cylindrique et la projection azimutale :

Technique de projection géographique

Il en existe une multitude résultant de systèmes de projection tous différents, comme par exemple :

Projection de Fuller animation d'explication

  • Projection d’Albers – projection conique notamment utilisée par l’Angleterre et les Etats-Unis :

Projection d'Albers

  • Projection de Werner – projection pseudo-conique conforme (pour les gens comme moi, amoureux de la cartographie) :

Projection de Werner explication

 

Combinaison avec les outils et produits grand public

A travers les API grands publics (dont Bing Maps for Enterprise fait partie), on retrouve évidemment la possibilité d’utiliser les principaux systèmes.

Dans SQL Server 2008, on observe la possibilité de définir un identifiant déterminant le système géodésique, le système de projection, les unités utilisées et qui sont indiquées à travers un SRID (Spatial Reference ID).

Cet SRID correspond à un identifiant déterminé par le European Petroleum Survey Group (EPSG) permettant de définir les références comme le système géodésique utilisé et est précisé au moment de la création des éléments géographiques, la liste des SRID supportés dans SQL Server 2008 peut être trouvée à travers ce lien ou en utilisant la commande suivante :

SELECT * FROM sys.spatial_reference_systems

 

Ces mêmes APIs utilisent un système de projection qui peut être assimilé au système WebMercator ou SPHERICAL_MERCATOR avec un SRID ayant pour valeur 3785. Ce dernier peut, la plupart du temps, être assimilé à un SRID 4326 définissant un Mercator classique (basé que l’ellipsoïde plutôt que sur une sphère).

Cette différence peut être constaté et est le résultat de simplification de développement mais également un choix technique. En réalité, une étude plus précise nous révèle qu’ils ne respecte pas tout à fait ce système de projection et que tous imposent une déformation de manière à pouvoir composer le contrôle cartographique sous forme de tuile et composer le monde sur un modèle de QuadTree.

Alastair Aitchison (MVP Bing Maps) a analysé ce point dans le détail et son excellent article présente très justement cette différence et l’approche la plus précise pour cette problématique de projection pour des utilisations plus précise.

Pour la plupart des besoins, l’utilisation du standard (SRID 4326 ou SRID 3785) se révèle très largement suffisant permettant de combiner l’information avec ces contrôles cartographiques des API que l’on connait.

 

Conclusions

Il est important d’être sensibilisé à ce type d’information tout simplement parce qu’elle permet de dialoguer avec les personnes dont c’est le métier et qui manipulent ces notions chaque jour.

C’est aussi important car c’est ce qui aide à intégrer leurs informations, des informations externes ainsi que les références pour enfin les exploiter à travers la plateforme ou l’outil retenu.

Ces grandes notions sur la géodésie et la cartographie abordées, nous allons pouvoir nous intéresser à la suite en mettant en œuvre l’utilisation du type géographique dans le produit SQL Server 2008.

Après avoir été présent tout au long de l’événement Microsoft Techdays 2011 accompagnée de ses partenaires techniques, l’équipe Bing Maps organise un événement à destination des profils développeurs et décideurs techniques avec une journée de conférence technique en anglais, animée par le spécialiste Johannes Kebeck.

Bing Maps Workshop technique - Session BI SQL Azure et bing Maps donnée par Johannes Kebeck

Pour déjà avoir participé à des sessions techniques de ce genre, je ne peux que vous recommander de vous y rendre surtout si vous avez des besoins d’utilisation de la plateforme Bing Maps for Enterprise.

 

Informations

Cet événement a lieu le Jeudi 3 mars 2011 à partir de 9h30 au Microsoft Campus Bing Maps WorkshopMicrosoft Campus dont voici l’adresse pour rappel :

Microsoft Campus
39 Quai du Président Roosevelt
92130 Issy-les-Molineaux

 

Microsoft Campus bing maps session technique

 

Objectifs

Les objectifs de cette journée est de transférer le maximum de connaissances pour répondre à des scénarios tels que :

  • Ajouter de la valeur aux sites web et applications mobiles de vos clients
  • Faire venir les clients vers un point de vente
  • Créer une solution de géomarketing
  • Rendre parlantes les données métiers de vos clients
  • Gérer des forces commerciales ou des flottes de véhicules

 

Programme et speaker

Johannes Kebeck session technique Au programme, Johannes Kebeck EMEA Technical Specialist, va aborder en anglais les  sujets suivants :

  • Why spatial databases?
  • Why SharePoint?
  • Introduction to Spatial data types, indexes and functions
  • Loading the Database
  • Preparing the Database Tables (for AJAX)
  • Creating the Stored Procedures (for AJAX)
  • Using the Bing Maps AJAX Control with Vector Data
  • Extending the Database Tables (for Silverlight)
  • Creating the Stored Procedure (for Silverlight)
  • Using the Bing Maps Silverlight Control with Vector Data
  • Creating Static Tile Layers
  • Using the Bing Maps AJAX Control with Raster Data
  • Using the Bing Maps Silverlight Control with Raster Data
  • Creating Dynamic Tile Layers
  • Adding Charts (AJAX)
  • Adding Charts (Silverlight)
  • Spatial data analysis techniques
  • Presenting spatial analysis in your SharePoint Application

En couvrant les domaines et problématiques telles que :

  • Les bonnes pratiques, techniques et optimisations pour présenter de la donnée cartographique en maximisant les performances et la lisibilité
  • L’intégration de l’API Bing Maps et de SharePoint
  • Les nouvelles idées et approches pour présenter et requêter la donnée géographique
  • L’exploitation des données géographiques au sein de SQL Server 2008 et SQL Azure

 

Produits concernés

L’API Bing Maps for Enterprise, Microsoft Office SharePoint Server, Microsoft Silverlight, Microsoft SQL Server et autres solutions technologiques.

 

Inscriptions

Les inscriptions s’effectuent à travers le site dédié : Bing Maps session technique inscription

https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032475042&Culture=fr-FR

 

Quant à moi, je n’y serai pas car je serai dans le même temps au MVP Summit à Seattle avec les autres MVP Bing Maps. J’essaierai toutefois de transférer le maximum d’information concernant cette journée.

A travers cette série d’articles, nous allons aborder l’utilisation des types géographiques (geography) et géométriques (geometry).

SQL Server Spatial geography geometry Bing Maps

 

Apparition des types géographiques et géométriques

La version 2005 de SQL Server avait apporté la possibilité d’utiliser des types définis par l’utilisateur basé sur la CLR .Net.

On parle alors de la technologie SQLCLR (SQL Common Language Runtime) et on retrouve alors la possibilité d’établir un type avancée avec des propriétés et des fonctions spécifiques.

SQLCLR .Net into SQL user defined typeDepuis la version 2008 de SQL Server, Microsoft intègre plusieurs types de données de façon native parmi lesquels on retrouve le type géographique (geography), géométrique (geometry) ainsi que le type hiérarchique (hierarchyid).

 

Usage des types

Ces types représentent des données qui correspondent à un usage précis avec comme indiqué des spécificités d’utilisation ou de fonctionnalités.

Ainsi les types géographiques représentent une donnée sur la surface du globe terrestre basée sur une ellipsoïde choisie.

image

Les types géométriques sont utilisées pour représenter un point dans un système cartésien de coordonnées, soit dans un plan défini par deux axes.

image

Le type hiérarchiques, que je ne traiterai pas dans cette série, présentent un intérêt pour toutes les données qui ont une relation hiérarchique en permettant d’établir un identifiant pour situer la donnée dans un arbre hiérarchique.

 

Intérêts des types géographiques et géométriques

Comme indiqué précédemment, ces types sont fournis de manière native permettent de simplifier l’intégration de ce genre de données en proposant tout un panel de méthode et propriété particulièrement utile pour les procédures SQL.image

C’est ainsi que l’on retrouve, par exemple, des fonctions de détection d’intersections, de support de standard de définition d’éléments (points, multi-ligne, polygones…) ou bien encore d’algorithme utile pour les simplifications ou les calculs de distance.

 

Nous reviendrons en détails dans ces détails dans la suite de cette série et au moment de la description de ces types dans le détails et de manière concrète.

 

Un peu de fun

Et pour rester dans l’esprit de noël, en vous souhaitant un joyeux réveillon :

 image

Pour avoir un petit sapin (dans l’esprit de que proposait mon camarade Alastair Aitchison), retrouvez cette petite requête pour introduire les notions SQL Spatial à travers ce fichier SQL.

 

La suite de la série va nous permettre de nous intéresser au type qui nous intéresse le plus dans le cadre de l’utilisation au sein de la cartographie, à savoir le type géographique.

L’équipe Bing et précédemment le Microsoft Live Labs, ont toujours eu une énorme capacité à innover en termes de technologies Web ou mobile.

Bing Maps et Bing innovation et nouveautés Streetslide vue de façades et integration photosynth

Aussi devant les évolutions de la concurrence, Microsoft et l’équipe Bing Maps n’hésitent pas à toujours repousser les limites technologiques et innover par l’usage.

 

Intégration de réalité augmentée

On se souvient tous de la vidéo de Blaise Aguera y Arcas présentant les nouveautés ajoutées au portail Bing Maps et enchainant enfin sur les futures utilisations qui pourraient intervenir dans les années à venir.

Pour ceux qui voudraient revoir cette vidéo, c’est par ici :

 

Présentation de StreetSlide

Les données de vue de façades acquises par une voiture co-brandée par NAVTEQ et Bing, dont j’abordais une présentation plus complète à travers ce billet, seront donc très bien exploitées chez Microsoft.

En juillet Microsoft Research nous présentait justement une utilisation différente des classiques panorama bien plus courants :

 

Acquisition des données, panorama, StreetSide et recherche visuelle

Dans une nouvelle présentation Blaise présente l’évolution du moteur Bing avec notamment la construction de panoramas avancés (nouveauté qui sera très prochainement intégré au sein du service PhotoSynth qui rappelons-le, fais partie de l’équipe Bing Maps for Enterprise).

Panorama composition PhotoSynth    Panorama composition PhotoSynth  Panorama composition PhotoSynth

Viens ensuite l’exploitation du StreetSlide (ou slidable StreetSide) et StreetSide au sein du mobile (ici iPhone, mais d’autres plateformes sont annoncées en fin de vidéo). Ce mode de visualisation va se révéler très pratique pour se donner une idée de la rue, afficher des informations de position des enseignes.

StreetSide Experience with street (avec rue) StreetSlide StreetSide Experience with street (avec rue)  StreetSlide StreetSide Experience with street (avec rue)

Enfin, et un peu à la manière du projet Goggles de Google, on retrouve une recherche visuelle basé sur la reconnaissance de forme et ici spécialement, de texte pour une utilisation encore plus simple du contexte comme moyen de recherche. La recherche peut être réalisée sur base d’image ou de texte.

Bing Visual search for mobile avec sélection de texte et image    Bing Visual search for mobile avec sélection de texte et image

Bing Visual search for mobile avec sélection de texte et image Bing Visual search for mobile avec sélection de texte et image

Pour voir toutes les nouveautés annoncées en vidéo, cela se passe par ici :

 

Conclusions

L’équipe Bing Maps, et plus généralement Bing, innove toujours plus et cela se voit.

Notons que cette nouveauté devrait être très prochainement disponible sur le MarketPlace d’Apple et également sur d’autres plateformes mobiles, d’ailleurs on retrouve déjà le StreetSide via l’application ici :

http://itunes.apple.com/app/bing/id345323231?mt=8

image

Autant d’usage que l’on devrait également retrouver en partie sur le client Web qui de toute manière s’équilibrera dans l’utilisation, avec la plateforme mobile qui observe une progression incroyable ces dernières années.

Plus de Messages Page suivante »


Les 10 derniers blogs postés

- Compte rendu : SharePoint / O365 : des pratiques pour une meilleure productivité par The Mit's Blog le 12-12-2014, 18:11

- [TFS] Suppression des feature SQL Entreprise en masse par Blog de Jérémy Jeanson le 12-06-2014, 09:18

- [Clean Code] règles de nommage par Fathi Bellahcene le 12-04-2014, 22:59

- Windows To Go 10 et Upgrades impossibles par Blog de Jérémy Jeanson le 12-04-2014, 21:38

- SharePoint OnPremise: Statistiques d’utilisation pour traquer les sites fantomes par Blog Technique de Romelard Fabrice le 12-03-2014, 10:28

- SharePoint 2007: Script PowerShell permettant le backup de toutes les collections de sites d’une application Web par Blog Technique de Romelard Fabrice le 12-02-2014, 10:00

- Xamarin : un choix précieux par .net is good... C# is better ;) le 12-01-2014, 15:10

- Office 365: Comparaison des composants pour préparer votre migration de SharePoint 2007 vers Office 365 par Blog Technique de Romelard Fabrice le 11-28-2014, 16:20

- Créer un périphérique Windows To Go 10 ! par Blog de Jérémy Jeanson le 11-21-2014, 04:54

- RDV à Genève le 12 décembre pour l’évènement “SharePoint–Office 365 : des pratiques pour une meilleure productivité !” par Le blog de Patrick [MVP Office 365] le 11-19-2014, 10:40