8
06 avr 2009

Introduction


GeoExt a pour objectif de fournir une bibliothèque de fonctions couplant OpenLayers pour la partie cartographique et Ext pour la partie IHM (billet blog). Même si nous en sommes encore aux prémices, les fonctionnalités qu'il est possible d'imaginer en consultant les démos d'Ext et les exemples déjà disponibles (Tree, MapPanel et PopUp) laissent à penser que c'est de cette librairie que s'inspireront nos applications cartographiques de demain.

Déclarons les fichiers nécessaires


Commençons tout d'abord par la télécharger (téléchargement par SVN - révision 351 au moment où j'ai réalisé ce script) et télécharger la nouvelle classe GridPanelFeature (ou en version compactée 1,9ko) .

Maintenant appelons les différents scripts nécessaires :






OpenLayers map preview


Ici nous avons appelé notre fichier JavaScript GridPanelFeature.js directement dans la page Html. Nous aurions pu également le déclarer dans la variable jsfiles du fichier GeoExt.js (geoext/geoext/lib) :


var jsfiles = new Array(
"GeoExt/data/FeatureRecord.js",
"GeoExt/data/FeatureReader.js",
"GeoExt/data/FeatureStore.js",
"GeoExt/data/FeatureStoreMediator.js",
"GeoExt/data/LayerRecord.js",
"GeoExt/data/LayerReader.js",
"GeoExt/data/LayerStore.js",
"GeoExt/data/LayerStoreMediator.js",
"GeoExt/data/ProtocolProxy.js",
"GeoExt/widgets/MapPanel.js",
"GeoExt/widgets/Popup.js",
//Personnal JavaScript file
"GeoExt/grid/GridPanelFeature.js"
);

Création de notre objet GridPanelFeature


La création de l'objet GridPanelFeature se fait exactement de la même façon que l'objet GridPanel de Extjs à ceci près qu'il a besoin d'un store particulier, featureStore. Ce dernier n'est pas encore disponible dans la version svn car encore en discussion.

Passons maintenant à notre objet :


Layer = new OpenLayers.Layer.GML('Disaster','./data/YourGMLLayer.gml');
map.addLayer(Layer);

var featureStore = new GeoExt.data.FeatureStore({
fields: [
{name: 'ID', type: 'int'}
,{name: 'NAME', type: 'string'}
,{name: 'REGION', type: 'string'}
,{name:'idFeature', type:'int'}
,{name: 'Y_2004', type: 'int'}
],
layer : Layer
});

var olGrid = new GeoExt.grid.GridPanelFeature({
store: featureStore,
width:300,
columns: [{
header: "Pays",
width:100,
dataIndex: "NAME"
},{
header: "Population touchée",
width:170,
dataIndex: "Y_2004"
}],//EOF columns
});

Comme souligné précédemment, le store inclut dans le GridPanelfeature est un peu particulier, il prend directement en argument le fichier contenant les entités vecteurs que l'on souhaite afficher. La méthode createLayer va ensuite créer la couche comme cela se fait habituellement dans OpenLayers.

Démo


GridPanelFeature.png

A propos de l'auteur: 
Arnaud Vandecasteele

Fervent défenseur de l'Open Source, Arnaud s'est spécialisé dans le développement d'application cartographiques web. OpenLayers, PostGIS ou encore Django sont autant d'outils qu'il manipule au quotidien.
S'il n'est pas en face de son ordinateur, vous le retrouverez un GPS à la main en train de cartographier pour OpenStreetMap, de faire voler son drone ou sur un tatami !

Commentaires

Bonjour,
En testant la même démo sur mon serveur, j'ai un problème remonté par Firebug:

Ext.StatusBar is not a constructor
pour la ligne id: 'basic-statusbar'

Le problème vient de feaData.js
La version de GeoExt est la 0.5 et OpenLayers 2.8

comment puis-je intervenir pour contourner ce problème

Merci
Arno

En supprimant cette ligne dans le constructeur du gridPanelFeature cela devrait fonctionner :

bbar: new Ext.StatusBar({
defaultText: '',
id: 'basic-statusbar'
})

Je m'en servais à un moment mais plus dans cette version de l'application

L'application fonctionne maintenant.

Cependant, en testant un GML avec des caractères spéciaux, les données retournées dans le gridPanelFeature affichent des points d'interrogation.

Mon GML, affiche mes attributs convenablement en UTF-8
Mon HTML est défini en UTF-8
et je défini le charset en UTF-8 pour la ligne de mon featdata.js

Rien ne change mes attributs ne s'affichent pas correctement.

Une astuce?

Hum étant donné que le fichier GML est manipulé par le javascript c'est peut être de là que vient le problème.
Essaye de faire un regex ou alors un tableau de correspondance qui remplacent les caractères spéciaux par leur équivalent en HTML.
Ce type de tableau se trouve facilement sur le net.
Cela devrait arranger les choses.

Il s'agissait bien des caractères stockés au sein du GML.
Une conversion m'a permis d'afficher correctement les données attributs.
Merci encore Arnaud

De rien entre arnaud faut bien s'aider :)

Bonjour,

je cherche à entrer en contact avec vous pour une question relative à du webmapping en vue d'un projet chez nous.

Merci
Roger Burton

Bonsoir,

Auriez-vous une adresse mail à laquelle nous puissions vous contacter?

Cordialement

Arnaud