2
23 avr 2010

world.pngGeoScript a pour objectif de faciliter les manipulations géographiques dans des environnements de script. L'objectif est le support de 4 langages : Javascript, Python, Scala et Groovy. Cette bibliothèque permet de manipuler facilement des objets géométriques - création et manipulation d'objets ainsi que la création et manipulation de projections.
GeoScript est fondé sur la librairie Java GeoTools.

Pour le moment, seules les versions Javascript et Groovy sont disponibles :

Scala et Groovy - et non, ce n'est pas le nom d'un groupe de punk

Vous connaissez tous Javascript et Python, mais Scala et Groovy, qu'est-ce que c'est encore que ces nouveaux trucs ?
Et bien c'est pas si nouveau que ça : 2003 pour Scala et 2007 pour Groovy.
Scala et Groovy sont deux langages pour la JVM, prévu pour être compilés en bytecode Java et exécutés sur la JVM.

Scala

Quelques liens :

Groovy

Quelques liens :

Travaillons avec Javascript, c'est plus prudent :)

Pour la suite de ce billet, nous utiliserons donc la version Javascript de GeoScript.
Bon, c'est du Javascript côté serveur et non côté navigateur dont nous parlons ici - d'ailleurs en passant, Javascript a été créé d'abord pour une utilisation côté serveur. En effet, GeoScript - en mode Javascript - est édité pour la plateforme Narwhal.
Pourquoi donc utiliser JavaScript côté serveur me direz-vous ? Et bien, depuis que les éditeurs de butineurs s'efforcent à optimiser les moteurs Javascript, ces derniers rivalisent désormais en performance avec les langages typés serveur. De plus, pour des applications Web, avoir le même langage côté client et côté serveur permet de ne pas se disperser [http://www.clochix.net]. Dans ce mode de fonctionnement nommé Server-side JavaScript (SSJS) il est bien évidemment nécessaire de disposer d'un serveur compatible, une grande partie d'entre eux sont listés sur la page de Wikipédia.

Installation de Narwhal

Narwhal est une suite d'outils et de librairies permettant l'exécution d'applications JS côté serveur en suivant les spécifications du CommonJS et permettant ainsi d'utiliser le moteur Javascript de notre choix - Rhino, v8, SpiderMonkey, TraceMonkey, etc.

Tout d'abord il faut télécharger Narwhal via Git (système de contrôle de révision) qu'il faudra préalablement installer aussi - comme d'habitude nous utiliserons Ubuntu pour l'exemple :

~$ sudo apt-get install git-core
~$ git clone git://github.com/280north/narwhal.git

Voilà, nous avons maintenant Narwhal sur notre serveur. Vous pouvez déplacer le répertoire ainsi créé où vous voulez.

Et ajoutons Narwhal dans notre PATH - pour cela éditer le fichier .bashrc et ajouter la ligne suivante :

export PATH=$PATH:~/narwhal/bin

Ou sinon tapez simplement cette commande dans un terminal, et le PATH ne sera modifié que pour la durée de la session. La modification du fichier .bashrc permet de ne pas avoir à saisir cette commande à chaque redémarrage.
Par défaut Narwhal est livré avec le moteur Rhino. Celui-ci est codé en Java, il faut donc avoir la JRE installée :

~$ sudo apt-get install sun-java6-jre

Testons maintenant l'installation de Narwhal :

~$ js narwhal/examples/hello

Nous devrions avoir comme réponse :

Hello, World!

Note : nous pouvons utiliser la commande 'js' ou 'narwhal', c'est identique :

~$ narwhal narwhal/examples/hello

GeoScript ... enfin !

Maintenant que nous avons installé tout ce qu'il fallait pour être opérationnel, nous pouvons tester enfin GeoScript.
Pour cela, télécharger le .zip de la version JavaScript ou utiliser encore une fois Git :

~$ sudo git clone git://github.com/tschaub/geoscript-js.git

Nous avons donc un répertoire 'geoscript-js' à l'endroit où vous avez lancé la commande git.
Il faut maintenant activer notre environnement de façon à ce que Narwhal puisse charger les modules présents dans GeoScript :

~$ ~geoscript-js/bin/sea

Jouons un peu maintenant

Nous pouvons dorénavant lancer une console Javascript (commande js ou narwhal) et utiliser la bibliothèque :

~$ js
js> var geom = require('geoscript/geom')
js> var p1 = new geom.Point([0, 0])
js> var p2 = new geom.Point([10, 20])
js> p1.distance(p2)
22.360679774997898
js> var poly = p2.buffer(23)
js> poly.contains(p1)
true
js> quit()

Ici, nous avons créé 2 points, calculé la distance entre eux, créé un polygone grâce à la fonction buffer et demandé si le premier point était contenu dans le polygone.
Voilà, nous pouvons maintenant lire l'API afin d'exploiter tous les modules :

Il faut garder à l'esprit qu'il s'agit ici de la version 0.8 et donc que l'API est susceptible d'être modifiée.

Pour la suite

Dans un prochain billet, nous verrons comment lier GeoScript et Narwhal avec un serveur Web grâce à Jack.

A propos de l'auteur: 
GeoTribu

Toute l'actualité de la géomatique Open Source ! Mais aussi des tutoriels, des billets de blog, des tests et surtout une bonne humeur géographique !

Commentaires

Bonjour et merci pour cet article.

Une petite précision concernant le support de Python : j'ai l'impression de GeoScript ne supporte que l'implémentation Java de ce langage (Jython en d'autres termes).

Benjamin Chartier

En effet, GeoScript Python est une implémentation Jython.
Merci pour la précision.