
Introduction
« GEOS (Geometry Engine – Open Source) is a C++ port of the Java Topology Suite (JTS). This includes all the OpenGIS Simple Features for SQL spatial predicate functions and spatial operators. GeoPHP transparently integrates GEOS. If geoPHP detects that GEOS is installed it will automatically start using it – you don’t need to do anything. When GEOS is installed, a bunch of additional geometry methods become available« .
En résumé, GEOS est un portage en C++ de la Suite de topologie Java JTS. Une fois installé, le module Drupal geoPHP le détectera et l’utilisera. Vous aurez un gain sensible en rapidité et des fonctions supplémentaires sur la gestion des cartes, géolocalisation, etc.
Comment installer GEOS en Ubuntu 11.10 ?
Ce n’est pas aussi simple que ça… mais on fini quand même par y arriver !
GEOS depuis les dépôts Ubuntu ?
Je considère que vous avez déjà un site Drupal fonctionnel avec le module Drupal geoPHP.
Normalement GEOS est inclus dans Ubuntu, mais cela pose un problème en Ubuntu 11.10.
Si j’installe uniquement « libgeos-3.2.2″, ce n’est pas détecté ensuite par le site Drupal. J’ai toujours un message :

D’après certaines documentations, il faudrait installer en Ubuntu 11.10 « libgdal1-1.7.0 libgdal1-dev libgeos-3.2.2 libgeos-c1 libgeos-dev », mais j’ai un problème de dépendances et de conflit :
# aptitude install libgdal1-1.7.0 libgdal1-dev libgeos-3.2.2 libgeos-c1 libgeos-dev
The following NEW packages will be installed:
comerr-dev{a} krb5-multidev{a} libaudio2{a} libcurl3-nss{a} libcurl4-gnutls-dev{ab} libcurl4-nss-dev{ab} libdap-dev{a} libdap10{a}
libepsilon0{a} libgcrypt11-dev{a} libgdal1-1.7.0 libgdal1-dev libgeos-3.2.2 libgeos-c1 libgeos-dev libgfortran3{a} libgif-dev{a}
libgl1-mesa-dri{a} libgl1-mesa-glx{a} libglapi-mesa{a} libglu1-mesa{a} libgnutls-dev{a} libgnutlsxx26{a} libgpg-error-dev{a}
libgssrpc4{a} libhdf4-0-alt{a} libhdf4-alt-dev{a} libhdf5-serial-1.8.4{a} libhdf5-serial-dev{a} libice6{a} libidn11-dev{a}
libjasper-dev{a} libjpeg62-dev{a} libkadm5clnt-mit8{a} libkadm5srv-mit8{a} libkdb5-5{a} libkrb5-dev{a} libldap2-dev{a} libllvm2.9{a}
libmng1{a} libmysqlclient-dev{a} libnetcdf-dev{a} libnetcdf6{a} libnspr4{a} libnspr4-dev{a} libnss3{a} libnss3-dev{a}
libodbcinstq1c2{a} libogdi3.2{a} libpng12-dev{a} libpq-dev{a} libpq5{a} libproj0{a} libqt3-mt{a} libsm6{a} libspatialite-dev{a}
libspatialite2{a} libsqlite3-dev{a} libtasn1-3-dev{a} libxcursor1{a} libxdamage1{a} libxerces-c2-dev{a} libxerces-c28{a} libxfixes3{a}
libxi6{a} libxinerama1{a} libxml2-dev{a} libxmu6{a} libxrandr2{a} libxt6{a} libxxf86vm1{a} odbcinst{a} odbcinst1debian2{a}
pkg-config{a} proj-bin{a} proj-data{a} unixodbc{a} unixodbc-dev{a}
0 packages upgraded, 78 newly installed, 0 to remove and 0 not upgraded.
Need to get 51.0 MB of archives. After unpacking 186 MB will be used.
The following packages have unmet dependencies:
libcurl4-nss-dev: Conflicts: libcurl-dev which is a virtual package.
libcurl4-gnutls-dev: Conflicts: libcurl-dev which is a virtual package.
The following actions will resolve these dependencies:
Keep the following packages at their current version:
1) libcurl4-nss-dev [Not Installed]
Accept this solution? [Y/n/q/?] q
Abandoning all efforts to resolve these dependencies.
Abort.
Il y a probablement une solution, mais de toute façon, en Ubuntu 11.10, c’est GEOS version 3.2.2.
Je préfère donc ne pas installer GEOS depuis les dépôts Ubuntu 11.10.
En compilant moi-même GEOS, j'aurai la version 3.3.0.

Compiler GEOS depuis les sources
Utilitaires de compilation
La difficulté de l'installation de GEOS est qu'il faut le compiler pour pouvoir l'installer. Ce n'est pas très compliqué, mais c'est assez inhabituel de devoir compiler sur un serveur... Il doit être possible de le compiler sur votre desktop, mais vous devez avoir les mêmes versions d' Ubuntu ou Debian, les mêmes librairies...
Je base ce billet sur les explications de Christian Wygoda.
Je vais cette installation en Ubuntu 11.10 sur mon serveur, et en parallèle sur mon desktop en Ubuntu 12.10 pour me permettre de prendre les documentations que je n'ai pas pris lors de l'installation sur mon serveur...
Vous devez avoir une série de choses pour pouvoir compiler.
- autoconf
- build-essential
- checkinstall
- libtool
- php5-dev
- phpunit
- subversion
Installez tout cela avec aptitude ou apt-get.
# aptitude install autoconf build-essential checkinstall libtool php5-dev phpunit subversion
Les NOUVEAUX paquets suivants vont être installés :
autoconf automake{a} autotools-dev{a} build-essential checkinstall dpkg-dev{a} fakeroot{a} g++{a} g++-4.7{a} javascript-common{a}
libalgorithm-diff-perl{a} libalgorithm-diff-xs-perl{a} libalgorithm-merge-perl{a} libjs-yui{a} libltdl-dev{a} libserf1{a}
libssl-dev{a} libssl-doc{a} libstdc++6-4.7-dev{a} libsvn1{a} libtool m4{a} pear-phpunit-channel{a} pear-symfony-project-channel{a}
php-codecoverage{a} php-file-iterator{a} php-invoker{a} php-pear{a} php-symfony-yaml{a} php-text-template{a} php-timer{a}
php-token-stream{a} php5-dev php5-xdebug{a} phpunit phpunit-mock-object{a} phpunit-story{a} shtool{a} subversion wwwconfig-common{a}
zlib1g-dev{a}
0 paquets mis à jour, 41 nouvellement installés, 0 à enlever et 0 non mis à jour.
Il est nécessaire de télécharger 20,3 Mo d'archives. Après dépaquetage, 68,4 Mo seront utilisés.
Voulez-vous continuer ? [Y/n/?]
Effectivement, c'est beaucoup pour un serveur... mais ok, continuons.
Sources de GEOS depuis SVN
Après l'installation du nécessaire pour pouvoir compiler, utilisons SVN pour aller chercher le code de GEOS :
didier@didier-ubuntu:~/download$ mkdir geos didier@didier-ubuntu:~/download$ cd geos/ didier@didier-ubuntu:~/download/geos$ svn checkout http://svn.osgeo.org/geos/trunk geos-svn A geos-svn/cmake A geos-svn/cmake/modules A geos-svn/cmake/modules/CheckPrototypeExists.cmake A geos-svn/cmake/modules/COPYING-CMAKE-SCRIPTS A geos-svn/cmake/cmake_uninstall.cmake.in A geos-svn/debian A geos-svn/debian/control ... A geos-svn/examples/CustomPointCoordinateSequence.cpp A geos-svn/examples/CustomCoordinateSequenceExample.cpp A geos-svn/examples/Makefile.am A geos-svn/examples/CustomCoordinateSequenceExample.h U geos-svn Révision 3788 extraite.

Compilation
Préparation et configuration du build
didier@ks380111:~/download/geos-svn$ ./autogen.sh * Running /usr/bin/libtoolize (2.4) OPTIONS = --force --copy libtoolize: putting auxiliary files in `.'. libtoolize: copying file `./ltmain.sh' libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `macros'. libtoolize: copying file `macros/libtool.m4' libtoolize: copying file `macros/ltoptions.m4' libtoolize: copying file `macros/ltsugar.m4' libtoolize: copying file `macros/ltversion.m4' libtoolize: copying file `macros/lt~obsolete.m4' * Running /usr/bin/aclocal (1.11.1) * Running /usr/bin/autoheader (2.68) * Running /usr/bin/automake (1.11.1) OPTIONS = --add-missing --copy -Woverride * Running /usr/bin/autoconf (2.68) ====================================== Now you are ready to run './configure' ====================================== didier@ks380111:~/download/geos-svn$
didier@ks380111:~/download/geos-svn$ ./configure --enable-php checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking target system type... x86_64-unknown-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether to enable maintainer-specific portions of Makefiles... no checking for gcc... gcc checking whether the C compiler works... yes ... config.status: creating include/config.h config.status: include/config.h is unchanged config.status: creating include/geos/platform.h config.status: include/geos/platform.h is unchanged config.status: executing depfiles commands config.status: executing libtool commands Swig: false Python bindings: false Ruby bindings: false PHP bindings: true PHP: /usr/bin/php PHPUNIT: /usr/bin/phpunit
Make
Utilisez "sudo" si nécessaire, ou passer en root avec "su -" si vous êtes sur un serveur.
Checkinstall va vous poser une série de questions. Pour la majorité, vous pouvez prendre la valeur par défaut (répondre yes).
Introduire "GEOS 3.3 with PHP bindings." comme description.
Changez le numéro de version, qui est "svn" par défaut, en "3.3-svn-20110530" (ou une autre date).
sudo checkinstall checkinstall 1.6.2, Copyright 2009 Felipe Eduardo Sanchez Diaz Duran This software is released under the GNU GPL. ***************************************** **** Debian package creation selected *** ***************************************** This package will be built according to these values: 0 - Maintainer: [ didier@ks381234.kimsufi.com ] 1 - Summary: [ GEOS 3.3 with PHP bindings ] 2 - Name: [ geos ] 3 - Version: [ 3.3-svn-20110530 ] 4 - Release: [ 1 ] 5 - License: [ GPL ] 6 - Group: [ checkinstall ] 7 - Architecture: [ amd64 ] 8 - Source location: [ geos-svn ] 9 - Alternate source location: [ ] 10 - Requires: [ ] 11 - Provides: [ geos ] 12 - Conflicts: [ ] 13 - Replaces: [ ] Enter a number to change any of them or press ENTER to continue: Installing with make install... ========================= Installation results =========================== sh ./tools/svn_repo_revision.sh #define GEOS_SVN_REVISION 3737 Wrote rev '3737' in file './geos_svn_revision.h' make install-recursive make[1]: Entering directory `/home/didier/download/geos-svn' Making install in include make[2]: Entering directory `/home/didier/download/geos-svn/include' Making install in geos make[3]: Entering directory `/home/didier/download/geos-svn/include/geos' Making install in algorithm make[4]: Entering directory `/home/didier/download/geos-svn/include/geos/algorithm' Making install in locate make[5]: Entering directory `/home/didier/download/geos-svn/include/geos/algorithm/locate' make[6]: Entering directory `/home/didier/download/geos-svn/include/geos/algorithm/locate' make[7]: Entering directory `/home/didier/download/geos-svn/include/geos/algorithm/locate' make[7]: Nothing to be done for `install-exec-am'. test -z "/usr/local/include/geos/algorithm/locate" || /bin/mkdir -p "/usr/local/include/geos/algorithm/locate" /bin/mkdir: cannot create directory `/usr/local/include/geos/algorithm': No such file or directory make[7]: *** [install-geosHEADERS] Error 1 make[7]: Leaving directory `/home/didier/download/geos-svn/include/geos/algorithm/locate' make[6]: *** [install-am] Error 2 make[6]: Leaving directory `/home/didier/download/geos-svn/include/geos/algorithm/locate' make[5]: *** [install-recursive] Error 1 make[5]: Leaving directory `/home/didier/download/geos-svn/include/geos/algorithm/locate' make[4]: *** [install-recursive] Error 1 make[4]: Leaving directory `/home/didier/download/geos-svn/include/geos/algorithm' make[3]: *** [install-recursive] Error 1 make[3]: Leaving directory `/home/didier/download/geos-svn/include/geos' make[2]: *** [install-recursive] Error 1 make[2]: Leaving directory `/home/didier/download/geos-svn/include' make[1]: *** [install-recursive] Error 1 make[1]: Leaving directory `/home/didier/download/geos-svn' make: *** [install] Error 2 **** Installation failed. Aborting package creation. Cleaning up...OK Bye.
Malheureusement, cela se termine par une erreur !
Il semble ne pas pouvoir créer des sous-dossiers...
Pourtant, je suis en "root".
Je crée manuellement le dossier "/usr/local/include/geos/algorithm".
Je relance.
La création de certains sous-dossiers se passe bien, mais il cale sur un autre sous-dossier :
make[4]: Leaving directory `/home/didier/download/geos-svn/include/geos/algorithm' Making install in geom make[4]: Entering directory `/home/didier/download/geos-svn/include/geos/geom' Making install in util make[5]: Entering directory `/home/didier/download/geos-svn/include/geos/geom/util' make[6]: Entering directory `/home/didier/download/geos-svn/include/geos/geom/util' make[6]: Nothing to be done for `install-exec-am'. test -z "/usr/local/include/geos/geom/util" || /bin/mkdir -p "/usr/local/include/geos/geom/util" /bin/mkdir: cannot create directory `/usr/local/include/geos/geom': No such file or directory make[6]: *** [install-geosHEADERS] Error 1
Ok, on dirait que le script essaye de créer le sous dossier "geos/geom/util", sans avoir créé le sous-dossier "geos/geom".
Étrange !
Je crée manuellement le dossier "/usr/local/include/geos/geom".
Je relance, et nouvelle erreur :
cannot create directory `/usr/local/include/geos/geomgraph'
Je crée donc le sous-dossier "geos/geomgraph", et je relance.
Ça continue ...
test -z "/usr/local/include/geos/index/intervalrtree" || /bin/mkdir -p "/usr/local/include/geos/index/intervalrtree" /bin/mkdir: cannot create directory `/usr/local/include/geos/index': No such file or directory
Je crée ce sous-dossier "geos/index" et je relance...
Nouvelle erreur... Je crée manuellement le sous-dossier "geos/noding".
Je relance. Il manque "geos/operation". Je crée ce sous-dossier.
Il manque ce sous-dossier "geos/operation/overlay". Je le crée.
Je crée "geos/planargraph" et je relance.
Il manque "geos/triangulate". Je le crée et je relance.

Cette fois cela semble ok !
La compilation se déroule pendant de longues minutes...
... make[3]: Leaving directory `/home/didier/download/geos-svn' make[2]: Leaving directory `/home/didier/download/geos-svn' make[1]: Leaving directory `/home/didier/download/geos-svn' ======================== Installation successful ========================== Copying documentation directory... ./ ./ChangeLog ./HOWTO_RELEASE ./NEWS ./AUTHORS ./INSTALL ./doc/ ./doc/example.cpp ./doc/Makefile.in ./doc/Makefile.am ./doc/Doxyfile.in ./doc/.deps/ ./doc/.deps/example.Po ./doc/Makefile ./doc/Doxyfile ./doc/example.tosql ./doc/README ./doc/.svn/ ./doc/.svn/entries ./doc/.svn/dir-prop-base ./doc/.svn/tmp/ ./doc/.svn/tmp/text-base/ ./doc/.svn/tmp/props/ ./doc/.svn/tmp/prop-base/ ./doc/.svn/text-base/ ./doc/.svn/text-base/README.svn-base ./doc/.svn/text-base/example.cpp.svn-base ./doc/.svn/text-base/Makefile.am.svn-base ./doc/.svn/text-base/Doxyfile.in.svn-base ./doc/.svn/text-base/example.tosql.svn-base ./doc/.svn/props/ ./doc/.svn/prop-base/ ./doc/.svn/prop-base/README.svn-base ./doc/.svn/prop-base/example.cpp.svn-base ./doc/.svn/prop-base/Makefile.am.svn-base ./doc/.svn/prop-base/Doxyfile.in.svn-base ./doc/.svn/prop-base/example.tosql.svn-base ./doc/.svn/all-wcprops ./COPYING ./README ./TODO Copying files to the temporary directory...OK Stripping ELF binaries and libraries...OK Compressing man pages...OK Building file list...OK Building Debian package...OK Installing Debian package...OK Erasing temporary files...OK Writing backup package...OK OK Deleting temp dir...OK ********************************************************************** Done. The new package has been installed and saved to /home/didier/download/geos-svn/geos_3.3-svn-20110530-1_amd64.deb You can remove it from your system anytime using: dpkg -r geos **********************************************************************
Un package Debian est créé. Christian Wygada n'en parle pas...
Je ne l'installe PAS !

Chargement de GEOS par PHP
Il faut maintenant indiquer à PHP qu'il doit charger cette librairie.
Créer un fichier /etc/php5/init.d/geos.ini avec votre éditeur habituel (vi par exemple) :
; GEOS extension extension=geos.so
Redémarrer votre serveur Web pour être certain de la prise en charge de cette librairie :
# service apache2 restart * Restarting web server apache2 ... waiting [ OK ]
Je vérifie en Drupal dans le tableau de bord, si GEOS est pris en compte :

Cette fois, c'est correct !
Documentation
- GEOS (GitHup)
- Testing GEOS 3.3 PHP bindings par Christian Wygoda.
- module Drupal geoPHP
- GEOS not found (Drupal.org)
- GEOS (trac)
- Building on Unix with Autotools (trac)
- Installed GEOS libs on Ubuntu 12.04














bonjour,
j’ai un site sur drupal qui utilise les cartes openlayers. je devrais installer GEOS aussi, mais le souci c’est que j’y connais rien du tout à Ubuntu et les lignes de commandes. Je suis chez OVH sur un hébergement mutalisé, pensez vous qu’ils puissent le faire ?
merci
16 mars 2013 at 23:25Bonsoir Bruno,
Ce n’est pas simple, déjà sur un serveur dédié…
Mais sur un hébergement mutualisé, il y a plein de choses que tu ne peux pas faire.
Tu ne pourras pas compilé de module sur cet hébergement.
Il y a certainement d’autres méthodes, soit faire la compilation sur un autre PC (avec les MÊMES versions de softs), ou alors avoir un Linux plus récent, dans la distribution contient déjà un package GEOS…
Mais voilà, tu ne pourras probablement pas installer un module sur un Apache et PHP d’un mutualisé.
Le mieux c’est de demander au support OVH, ou sur la mailing list OVH… mais je pense que ce ne sera pas possible.
Le support OVH ne va certainement pas modifié son hébergement mutualisé pour y inclure un module que tu es le seul à demander…
Autre limitation des hébergements dédiés, surtout en Drupal, c’est le plafond de mémoire pour PHP, et plus tu rajouter de modules, plus tu as besoin de mémoire.
Donc, je dirais : probablement pas possible d’avoir GEOS sur un mutualisé…
mais éventuellement, pose la question au support OVH ou sur la mailing list.
Bon dimanche
17 mars 2013 at 0:12correction :
« Créer un fichier /etc/php5/init.d/geos.ini avec votre éditeur habituel »
geos.ini est dans
22 mai 2013 at 0:03/etc/php5/conf.d !