GEOS

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 :

GEOS n'est pas installé

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.

 

GEOS

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.

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.

GEOS

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.

GEOS

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 !

GEOS

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 :

Drupal détecte bien geoPHP et GEOS

Cette fois, c'est correct !

Documentation


Be Sociable, Share!
Written on mars 10th, 2013 & filed under CMS - Blogs - Groupware, Drupal, Linux, Serveurs Tags: , , ,
LEAVE A COMMENT
Comment

 
COMMENTS
    bruno commented

    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:25
    Didier Misson commented

    Bonsoir 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:12
    Didier Misson commented

    correction :
    « Créer un fichier /etc/php5/init.d/geos.ini avec votre éditeur habituel »

    geos.ini est dans
    /etc/php5/conf.d !

    22 mai 2013 at 0:03