ReLucBlog - SIG, MOZILLA & NTIC

Aller au contenu | Aller au menu | Aller à la recherche

mercredi 27 février 2008

Le Web Processing Service approuvé par l'OGC

L'Open Geospatial Consortium vient d'approuver la norme WPS (Web Processing Service).

WPS defines a standardized interface that facilitates the publishing of geospatial processes, and the discovery of and binding to those processes by clients.

  • Processes : include any algorithm, calculation or model that operates on spatially referenced data.
  • Publishing : means making available machine-readable binding information as well as human-readable metadata that allows service discovery and use.

Ce nouveau service défini 3 opérations :

  • GetCapabilities (hérité de l'interface OGCWebService)
  • DescribeProcess
  • Execute

Cette norme est déjà implémenté par différents projets :

Quelques sources :

mercredi 20 février 2008

En vrac géomatique...

  • Spot Image, un des principaux fournisseurs d'images satellites, vient de faire une offre fantastique. Spot Image va faire équipe avec GeoNames afin d'améliorer les données géographiques libres et offre des images satellites hautes résolutions 2.5m pour l'extraction automatique d'objets géographiques. Les objets géographiques que nous pensons pouvoir extraire d'images à 2.5m sont les contours des villes, des aéroports, des rues, des lignes de rivage, des lacs, des rivières et des autres... pour plus d'infos : Feature extraction from Satellite Imagery.
  • TIGER in OpenStreetMap, TIGER est le nom de code des données géogrpahiques publiques des Etats-Unis. OpenStreetMap (OSM) a achevé l'essentiel de l'import des rues principales et autoroutes des Etats-Unis, avec un mois d'avance sur l'estimation initiale du projet. L'énorme quantité de données de la abse de données géographiques du domaine publique en provenance du bureau de recensement des Etats-Unis a nécessité son propre pocessus d'importation fonctionnant jour et nuit depuis août 2007. Les données importées nécessites tout de même une édition et une correction d'erreur humaine.
  • European geodata, l'équivalent européen de TIGER est GISCO même si elle n'est pas aussi détaillé ni à jour, mais elles sont libres d'utilisations sous certaines conditions.

lundi 11 février 2008

En vrac géomatique...

Ce sera rapide :

  • Tout d'abord les logiciels GDAL, GRASS GIS et FDO sont devenus des projets officiels de l'OSGeo (Open Source Geospatial Foundation). Markus rappelle que l'OSGeo a mis en place une démarche d'incubation de projets afin de valider un certain nombre de caractéristiques. Ces trois logiciels ont validé leur incubation.
  • Ensuite une image issues du projet Open Street Map (OSM). C'est comme la terre vue du ciel la nuit, mais où les lumières des villes et des routes sont remplacés par les traces GPS laissés par les contributeurs à OSM.

vendredi 8 février 2008

Nouvelle acquisition de Microsoft pour Virtual Earth

Après l'acquisition en décembre 2007 de l'anglais MultiMap, Microsoft a annoncé mercredi 6 février 2008 l'acquisition de Caligari, l'équipe de Caligari rejoignant l'équipe de Virtual Earth].

Caligari est spécialisé dans la modélisation et l'animation 3D. Cette acquisition a probablement pour but de concurencer ScketchUp de Google et de concurencer encore plus Google dans le domaine de la cartographie.

Je ne dois pas aller à la bonne adresse, mais elle est où la carto ?

jeudi 7 février 2008

OpenLayers côté serveur avec Jaxer

OpenLayers est une bibliothèque de fonction JavaScript OpenSource permettant d'ajouter facilement des cartes dynamiques à une page Web.
Jaxer est le premier serveur AJAX publié par Aptana. C'est en fait un module du serveur Apache2 basé sur les technologies Mozilla.

Voici un exemple de l'utilisation d'OpenLayers côté serveur avec Jaxer :

<html>
<head>
  <title>OpenLayers Jaxer Example</title>
  <style type="text/css">
    #map {
      width: 1024px;
      height: 512px;
      border: 1px solid black;
    }
  </style>
  <script src="OpenLayersJaxer.js" runat="server"></script>
  <script runat="server">
    function getMexicoURL(){
      return "file:///home/reluc/GIS/data/mexico.sqlite";
    }
   
    function getMexicoLayer(layerName) {
      var OpenLayers = getOpenLayers();
      var url = getMexicoURL();

      var provider = new OpenLayers.Provider.SQLite(layerName,url,{table:layerName});
      var features = provider.features;

      var geojson = new OpenLayers.Format.GeoJSON();
      var layer = {};
      layer.name = layerName;
      layer.features = geojson.write(features);
      return layer;
    }
    getMexicoLayer.proxy = true;

    function load(){
      var layers = [
      {
        type : 'WMS',
        args : {
          name : "OpenLayers WMS",
          url : "http://labs.metacarta.com:80/wms/vmap0?",
          params : {layers: "basic"},
          options : {wrapDateLine: true}
        }
      }
      ];
      Jaxer.clientData.layers = layers;
    }
  </script>
  <script src="http://openlayers.org/dev/lib/OpenLayers.js" runat="client"></script>
  <script>
    var map;
    function init() {
      var options = {
        theme: "http://openlayers.org/dev/theme/default/",
        NumZoomLevels: 24
      }; 
      map = new OpenLayers.Map("map",options);
      var layers = Jaxer.clientData.layers;
      for (var l=0; l<layers.length; l++) {
        var layer = layers[
                          l];
        var argStr = "";
        for (var a in layer.args) {
          if (argStr != "") argStr += ",";
          argStr += "layer.args['"+
                            a+"' ]";
        }
        layer = eval("new OpenLayers.Layer[
                                     layer.type]("+argStr+");");
        map.addLayer(layer);
      }
      map.zoomToMaxExtent();
      getMexicoLayerAsync(addLayer,'states');
    }

    function addLayer(jLayer) {
      alert(jLayer);
      var geojson = new OpenLayers.Format.GeoJSON();
      var features = geojson.read(jLayer.features);
      var layer = new OpenLayers.Layer.Vector(jLayer.name,{style:jLayer.style});
      layer.addFeatures(features);
      map.addLayer(layer);
    }
  </script>
</head>
<body onserverload="load()" onload="init()">
  <div id="map"/>
</body>
</html>

Petite explication de texte :

  • Tout d'abord vous pouvez lire sur les éléments script la présence ou non d'un attribut runat. Cet attribut permet de spécifier si le code doit être éxécuter sur le server ou sur le client (dans le navigateur). Si cet attribut n'est pas présent le code ne sera pas éxécuter sur le serveur.
  • Ensuite la propriété proxy de la méthode getMexicoLayer est mis à "true", ce qui signifie que cette méthode sera accéssible au client de façon synchrone ou asynchrone. Afin de ne pas bloquer l'interface j'appelle getMexicoLayerAsync dans la méthode init éxécuter par le client une fois que la page est chargé. la méthode getMexicoLayerAsync est générée par Jaxer une fois que l'ensemble de la page a été traité côté serveur.
  • Un nouvel évènement est utilisable avec Jaxer, ServerLoad, via l'attribut onserverload, qui permet d'éxécuter une méthode côté serveru une fois que l'ensemble de la page ait été chargé par Jaxer. Dans mon cas j'utilise la méthode load afin de modifier l'objet Jaxer.clientData qui permet de passer des données du serveur au client, comme ici afin de passer une liste de baselayer à afficher.
  • Pour OpenLayers côté serveur j'ai été obligé de modifier le fichier OpenLayers.js en OpenLayersJaxer.js. Jaxer ne sauvegarde que des méthodes, j'ai donc dût créer une méthode getOpenLayers permettant de récupérer l'Objet OpenLayers.
  • Enfin afin de simplifier la création de features vectorielles, j'ai créé un nouveau type d'objet OpenLayers : OpenLayers.Provider. C'est un équivalent d'OpenLayers.Layer.Vector mais sans aucune notion de rendu ou de carte.

L'utilisation d'OpenLayers côté serveur permet :

  • de déporter sur le serveur les traitements des sources de données vectoriels (XML et autre). Du côté client seul les Formats JSON et GeoJSON sont nécessaires ;
  • de ne manipuler que du HTML et du JavaScript côté client ;
  • d'avoir les mêmes objets côté serveur et côté client. On est ainsi sûr de ne pas avoir d'erreurs d'interprétation des données.

Voici une bonne démonstration de l'intérêt de l'utilisation de Jaxer pour le développement d'une solution RIA accessible aux différenst navigateur du marché et ceux-ci à moindre coût.