Le blog de Jean David TECHER, un Réunionnais à Saint-Priest/Lyon

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


< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 >

mardi 19 décembre 2006

MezoGIS

Description

MezoGIS est un viewer pour PostGIS, mais aussi un excellent software SIG bien utile pour effectuer des requêtes avec PostGIS et les visualiser en live.

Installation

Je décris ici comment j'ai fais pour l'installer sous Dapper.

Pré-requis

Comme stipulé sur le site, il est nécessaire d'installer plein de choses en python

apt-get install python2.4-egenix-mxdatetime python2.4-egenix-mxproxy python2.4-egenix-mxstack \
python2.4-egenix-mxtexttools python2.4-egenix-mxtools python2.4-egenix-mxqueue 

Là j'avoue j'ai eu un souci avec mx à un moment donc j'ai tout pris de ce que j'ai trouvé! Désolé! Passons à la suite poru avoir par exemple PyGTK et

apt-get install  python-gtk2-dev
GeoTypes

J'ai dû téléchargé ce dernier à http://initd.org/svn/psycopg/geotypes/releases/GeoTypes-0.6.0.tar.gz et puis faire

tar xvzf GeoTypes-0.6.0.tar.gz
cd GeoTypes-0.6.0
python setup.py install
Psycopg

Là ça a été un peu plus siou

wget http://initd.org/pub/software/psycopg/psycopg-1.1.21.tar.gz
tar xvzf psycopg-1.1.21.tar.gz
cd psycopg-1.1.21

Un simple ./configure ici à rendu des erreurs avec les fichiers du répertoire include de PostgreSQL, d'abord comme quoi il ne les trouvait pas, et bien d'autres soucis! J'ai aussi eu cette erreur:

configure: error: can't build without PostgreSQL libraries

Donc j'ai dû adapter le configure de ce dernier à ma configuration. Je mets ici le diff que j'ai fais

root@jenna:/home/david/download/toto# diff -Naur psycopg-1.1.21/configure /home/david/download/psycopg-1.1.21/configure
--- psycopg-1.1.21/configure    2005-10-01 02:14:45.000000000 +0200
+++ /home/david/download/psycopg-1.1.21/configure       2006-12-19 16:57:12.000000000 +0100
@@ -2930,17 +2930,17 @@
 # Check whether --with-postgres-libraries or --without-postgres-libraries was given.
 if test "${with_postgres_libraries+set}" = set; then
   withval="$with_postgres_libraries"
-  PGSQLLIBS="-L$withval"
+  PGSQLLIBS="-L/usr/local/pgsql/lib"
 else
-  PGSQLLIBS=""
+  PGSQLLIBS="-L/usr/local/pgsql/lib"
 fi;

 # Check whether --with-postgres-includes or --without-postgres-includes was given.
 if test "${with_postgres_includes+set}" = set; then
   withval="$with_postgres_includes"
-  PGSQLDIR="$withval"
+  PGSQLDIR="/usr/local/pgsql/include"
 else
-  PGSQLDIR=""
+  PGSQLDIR="/usr/local/pgsql/include"
 fi;

 if test -z "$PGSQLDIR" ; then

Avant de lancer la configuration un dernier souci est apparu

checking for mxDateTime.h... configure: error: can't build without mx headers

, l'accès à mxDateTime.h me posait problème! Ce dernier point a été résolu en faisant:

./configure --with-mxdatetime-includes=/usr/include/python2.4/mx

Puis comme pour une compilation/installation classique, j'ai fait

make
make install
MezoGIS

J'ai fait

wget http://www.mezogis.org/files/mezogis-0.1.5.tar.gz
tar xvzf mezogis-0.1.5.tar.gz
cd mezogis-0.1.5
python2.4 setup.py install

Par défaut le prefix d'installation de mezogis est /usr. Donc pour le lancer, il suffit de faire

python2.4 /usr/bin/mezogis.py

On aura par exemple ce genre de screenshot


MezoGIS en action

Course de dernière minutes + Soirée devant France 2

Bon ce lundi matin je me suis réveillé par le boss! Normal je suis un oiseau de nuit ...J'ai bossé un peu cet aprem'. Entre 17h00-19h00, j'ai eu pas mal de truc à faire:

  • passer à la banque pour déposer un chèque;
  • voir pour déposer la voiture cette semaine au garage (à voir pour vendredi);
  • passer à Hyper U du Crès pour changer un presse-agrume qui marchait pas + acheter la bouffe pour le chat!;
  • rentrer et faire la bouffe poru ce soir: au menu un cari lapin vite fait bien fait;

Comme quelqu'un de normal ce soir, j'ai enfin pu regarder le journal de France 2 (faut dire que c'est pas évident que je puisse m'offrir un tel moment!). J'ai mangé et j'en ai profité ensuite pour (re)regarder True Lies ensuite avec le MultiPost de la Freebox (par VLC) + avec tvtime (avec mon Dazzle VC9) sur chacune de mes bécanes:


Tia Carrere toujours aussi bonne As


Tia Carrere toujours aussi bonne As 2


Tia Carrere toujours aussi bonne As 3

J'ai terminé le film, matté un épisode de Ken le survivant et 2 de Cobra sur Manga et ensuite...au travail!

lundi 18 décembre 2006

Générer un fichier kml pour Google Earth à partir de PostGIS, concernant la réunification des tronçons de la RN113 dans le Gard

Objectif

Bon ce soir je me suis lancé le défi de pouvoir enfin afficher la portion de la RN113 qui traverse le Gard (département n° 30) dans GoogleEarth.

1 - Ce qui ne marche pas!

Je dispose pour celà de la table des tronçons! Donc pour connaître la route en question il me suffit de faire

dde30=#  SELECT id_1,id_2,route,geometrytype(the_geom),numgeometries(the_geom) FROM route_dep30 WHERE route='n113' LIMIT 10;
   id_1    | id_2 | route |  geometrytype   | numgeometries
-----------+------+-------+-----------------+---------------
 300005729 |  204 | n113  | MULTILINESTRING |             1
 300005730 |  205 | n113  | MULTILINESTRING |             1
 300005775 |  208 | n113  | MULTILINESTRING |             1
 300005786 |  210 | n113  | MULTILINESTRING |             1
 300005787 |  211 | n113  | MULTILINESTRING |             1
 300005816 |  212 | n113  | MULTILINESTRING |             1
 300005823 |  213 | n113  | MULTILINESTRING |             1
 300005840 |  215 | n113  | MULTILINESTRING |             1
 300005853 |  216 | n113  | MULTILINESTRING |             1
 300005876 |  217 | n113  | MULTILINESTRING |             1
(10 lignes)

Donc fier de moi comme Djay (la semaine dernière) m'avait appris une fonction de PostGIS que je ne connaissais pas linemerge qui simplifie par exemple un MULTLINESTRING contenant uniquement un simple LINESTRING en un simple LINESTRING, je me dis ben c'est gagné!

Ben non ......!

En effet,cette table contient des MULTILINESTRINGS dont le nombre de LINESTRINGS est bien > 1 comme le prouve cette requête

dde30=#  SELECT distinct route,geometrytype(the_geom),numgeometries(the_geom) FROM route_dep30 WHERE route='n113';
 route |  geometrytype   | numgeometries
-------+-----------------+---------------
 n113  | MULTILINESTRING |             1
 n113  | MULTILINESTRING |             2
 n113  | MULTILINESTRING |             4
(3 lignes)

Le nouveau switch -S de shp2pgsql qui permet de convertir un MULTI en simple ojet spatial le confirme aussi:

postgres@jenna-edgy:~$ shp2pgsql -DIdS route_dep30.shp route_dep30|iconv -f LATIN1 -t UTF-8|psql dde30
Shapefile type: Arc
Postgis type: LINESTRING[2]
We have a MultiLineString with 2 parts, can't use -S switch! <-------- ICI !!!
... ...

Au premier abord j'avais cru comprendre que linemerge() transformait un MULTILINESTRING en un LINESTRING. En fait non, erreur de ma part, suite à une explication avec Djay. Cette fonction fait bien plus que celà. Voyons donc quelques exemples:

La fonction linestring()

Exemple 1 avec deux lLINESTRING contigües mise en relation par le POINT(5 5)

testgis=# select astext(linemerge(geometryfromtext('MULTILINESTRING((0 0,5 5),(5 5,6 10))',-1)));
          astext
--------------------------
 LINESTRING(0 0,5 5,6 10)
(1 ligne)

No soucy!

Exemple 2 deux LINESTRING discontigües

testgis=# select astext(linemerge(geometryfromtext('MULTILINESTRING((0 0,5 5),(5 4,6 10))',-1)));
                astext
---------------------------------------
 MULTILINESTRING((0 0,5 5),(5 4,6 10))
(1 ligne)

Donc aucun souci! Après mettre entretenu avec Djay, j'ai finalement compris comme il me le suggérait que si on voulait travailler unqiuement avec la fonction linermerge, il faudrait faire une analyse des données: trouver les MULTILINESTRING qui ne sotn aps convertis en simple LINESTRING, les ouvrir dans le MULTILINESTRING correspondant, scinder etc...Mais mon but ici est de parvenir à faire ça en une seule requête! Donc j'ai laissé tombé pour linemerge! Apparement ce sont avec mes données que je dosi faire!

Première conclusion: linemerge() ----------> tu sors ............!

Deuxième conclusion: shp2pgsql ----------> tu sors ............!

2 - Ce qui marche!

Après une heure de recherche intensive sur la documentation de PostGIS, et sur la mailing-list, j'ai trouvé la solution ze dump() function!

En pré-requis comme gdal 1.3.2 avec ogr2ogr ne permet pas de faire de sortie en fichier kml, il faut commencer par télécharger les sources de gdal 1.4.0 beta 1 à http://www.gdal.org/dl/ puis

wget http://www.gdal.org/dl/gdal140beta1.zip
unzip gdal140beta1.zip
cd gdal-1.4.0beta1
 CC=gcc-3.4 CXX=g++-3.4 ./configure --prefix=/opt/gdal-1.4.0 --with-geos --with-static-proj4=/usr/local/--without-python
make
make install

NB: Ici j'ai tout installé dans le répertoire /opt/gdal-1.4.0

Puis on fait pour générer le fichier RN113.kml

/opt/gdal-1.4.0/bin/ogr2ogr -f KML /root/RN113.kml PG:'host=192.168.0.1 dbname=dde30 user=postgres' -sql \
"SELECT (dump).geom FROM (SELECTt dump(transform(the_geom,4326)) FROM route_dep30 WHERE route='n113') AS foo"

Et on matte tout ça dans Google Earth


PostGIS ---> KML: Portion de la RN113 (réunifié à partir de ses tronçons) traversant le Gard depuis Google Earth

dimanche 17 décembre 2006

Un samedi après-midi à faire les courses

Bon samedi je me suis levé à 11h30...J'ai petit-déjeuné, ensuite j'ai pris une douche! En suite, nous sommes allés faire les courses! Purée! J'ai regardé...On a décollé de la maison vers 13h00, retour vers 18h00 soit 5h00 de courses :

  • Leader Price de Castelnau (bouffe pour le chat, trucs pour la cuisine;
  • un café chez une connaissance de Catherine;
  • courses à HYPER U du Crès: ménage, etc....;
  • course à la pharmacie

J'aurais pas pensé que nous aurions pris autant de temps . Du coup nous avions prévu d'inviter une amie à venir à la maison pour prendre un café. On a reporté ça à dimanche.

En arrivant à la maison j'étais mort ! Je me suis fait un casse-dalle (pain+salade+jambon), je me suis reposé et ensuite (re)mangé puis j'ai traîné sur Internet jusqu'à 4h30 du mat. J'ai tchatté avec un ubunteros de montpellier vers 4h00. Un gars bien sympa, voulant connaître un peu les méandres des bases de données. Aujourd'hui je me lève frais comme un poisson sur un marché de poissons. Comme un dimanche quoi !