Articles

recuperer les z d'un batiment sur un ascii grid dans postgis

Image
première étape charger un mns dans postgis:   ./raster2pgsql -I -C -r -t 50x50 -d -s 21781 /home/xao/postgis/MNS_zone_test.asc mns >/tmp/mns.sql puis on insère dans notre base de données: psql -U postgres -f /tmp/mns.sql gis01 enfin on peut créer une table temporaire avec une séquence CREATE SEQUENCE seq_bati_isolines_id MINVALUE 1 START WITH 1 INCREMENT BY 1 CACHE 10 CREATE TABLE bati_isolines as (SELECT nextval('seq_bati_isolines_id') as id, no_eca, (gv).geom, (gv).val as z FROM (SELECT b.no_eca , ST_Intersection(geom,rast) gv FROM bati_pol b, mns WHERE no_eca like '11330' AND st_intersects(geom,rast)) as t ) une fois ce petit détail reglé on peut allez voir nos isolignes dans QGIS avec le plugin "DBManager" avec la requête SELECT id,geom,z FROM bati_isolines

Calcul des distances entre chaque points d'un polygone (CTE)

Cette fois on veut la liste des distances entre tous les points composants un polygone par exemple pour vérifier qu'il n'y a aucun point qui s'approche d'un autre à moins d'une certaine distance WITH line as (SELECT st_geometryn(st_boundary(geom),1) as g FROM bati_pol WHERE no_eca like '11330'), series as (SELECT generate_series(1,ST_NumPoints (g) ) as n FROM line), points1 as (SELECT st_pointn(g,n) as p1, n as n1 FROM line,series), points2 as (SELECT st_pointn(g,n) as p2,n as n2 FROM line,series) SELECT n1,n2,st_distance(p1,p2) FROM points1,points2 WHERE n1 != n2 ORDER BY 3 ASC

calcul distances entre point successif méthode avec CTE

variante même requête en utilisant les Command Table Expression WITH line as (SELECT st_geometryn(st_boundary(geom),1) as g FROM bati_pol WHERE no_eca like '11330'), series as (SELECT generate_series(1,ST_NumPoints (g) ) as n FROM line) SELECT 'point '|| n,st_astext(st_pointn(g,n)), 'point '|| n+1,st_astext(st_pointn(g,n+1)), st_distance(st_pointn(g,n),st_pointn(g,n+1)) FROM line,series

calculer distance entre points successfs d'un polygone

Comment calculer la distance entre les points successifs d'un polygone SELECT ST_AsText(ST_PointN((st_geometryn(st_boundary(geom),1)), generate_series(1,ST_NumPoints (st_geometryn(st_boundary(geom),1))-1) )), ST_AsText(ST_PointN((st_geometryn(st_boundary(geom),1)), generate_series(1,ST_NumPoints (st_geometryn(st_boundary(geom),1))-1)+1 )), ST_Distance( ST_PointN((st_geometryn(st_boundary(geom),1)),s.i ) , ST_PointN((st_geometryn(st_boundary(geom),1)), generate_series(1,ST_NumPoints (st_geometryn(st_boundary(geom),1))-1)+1 ) ) FROM bati_pol , (SELECT generate_series(1,ST_NumPoints (st_geometryn(st_boundary(bati_pol.geom),1))-1) FROM bati_pol WHERE no_eca like '11330') as s(i) WHERE no_eca like '11330'

Postgis comment créer des géomètries en une ligne

Pour remplacer toutes les fonctions de créations géométries avantageusement par une seule syntaxe générique on utilise un string WKT avec un cast: 'SRID=21781;POINT(538460 152947)'::geometry par exemple dans le contexte d'une requête : SELECT * FROM l3d_grid1m_elevation g WHERE st_intersects(g.the_geom,(SELECT st_buffer('SRID=21781;POINT(538460 152947)'::geometry,1))) AND g.the_geom && (SELECT st_buffer('SRID=21781;POINT(538460 152947)'::geometry,1)) Ainsi on a quasiment un remplacement unique pour toutes les fonctions du §8.3 Geometry constructors du manuel postgis

Importation rapide d'un fichier las dans une table de Postgis et analyse de densité.

Image
Je viens d'être confronté à un besoin d'estimation rapide de la densité de points par m2 d'un fihier "las" provenant d'un vol Lidar . Il fallait pouvoir répondre à la question combien de zones de 1m2 contiennnent des densités de points inférieur à un certain seuil. Wikipedia l'explique bien mieux mais en résumé pour les pressés : La télédétection par laser ou LIDAR «  li ght d etection a nd r anging  » est une technique qui permet en substance de "mesurer" depuis un avion ou un hélicoptère la position d'objets aux sol et d'obtenir un nuage de points x,y,z  qui donne un modèle numérique de surface ou MNS. En fonction du plan vol, de la météo des conditions topologiques en présence (grand bâtiments) on peut avoir des "zones d'ombres" ou on a peu ou pas de  données, il faut néanmoins pouvoir quantifier et visualiser ces zones. Pour les curieux je recommande l'excellente présentation de M. Marc Riedo responsable du SITN s...

Comment ajouter des sauts (retour) à la ligne dans un énorme xml d'une seule ligne !

J'avais un grand fichier récupéré via un curl : curl -#v -o /tmp/output.xml "http://www.myserver.ch/extraction_file.php?mode=complex&typef=xml" le problème c'est que ce fichier "output.xml" était un gros xml valide d'une seule  ligne... un "wc -l /tmp/output.xml"  me retourne bien 1 ! Or la plupart des éditeurs n'aiment pas trop ouvrir ce genre de fichier d'une seule "énorme" ligne, voire même ils plantent lamentablement. La solution est d'utiliser un bon vieux oneliner en perl pour rajouter un saut de ligne après un tag fermant : perl -i -pe 's/<\/Adr>/<\/Adr>\n/g' /tmp/output.xml Et voilà , maintenant le fichier contient autant de ligne qu'il y a de tags fermants . Et du coup il est beaucoup plus facile à utiliser dans votre éditeur favori !

Génération automatique d'une liste de requêtes sql pour toutes les tables de Postgresql

Image
Il arrive assez régulièrement que l'on doive appliquer une modification à toute les tables d'une base de données postgresql . Par exemple s'il faut rajouter un droit de consultation pour un user particulier sur toutes les tables. On peut bien entendu se palucher à la main tous les : GRANT SELECT ON TABLE altitude TO userdbreadonly; pour autant de tables qu'il y a dans la base... Mais comme un bon informaticien déteste toutes les tâches répétitives,  il préférera trouver comment  écrire une requête dont le résultat correspondra à la liste des ordres sql qu'il veut exécuter, soit dans ce cas : SELECT 'GRANT SELECT ON TABLE ' || tablename || ' TO cgdbreadonly;' FROM pg_tables WHERE schemaname like 'public'  ORDER BY 1; qui lui retournera la liste de tous les GRANT SELECT pour toutes les tables liste qu'il n'aura plus qu'à exécuter...

GPG error sur template Openvz debian6 lors du apt-get update

Je venais de créer une nouvelle machine virtuelle openvz sur proxmox basée sur le template debian 6 amd64bit :debian-6.0-standard_6.0-2_amd64.tar.gz Une fois connecté dessus en ssh je lance un: apt-get update et j'obtiens un message d'erreur : W: GPG error: http://security.debian.org squeeze/updates Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041FA W: GPG error: http://ftp.debian.org squeeze Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY AED4B06F473041F La solution consiste par la mise a niveau du keyring debian avec un simple : apt-get install debian-archive-keyring j'ai pu ensuite relancer le apt-get update qui c'est déroulé sans accroc.

Comment copier une machine virtuelle kvm en raw sur un Volume Group LVM2 se trouvant sur un disque en DRBD

Image
Il se trouve que je devais migrer quelques machines virtuelle se trouvant sur un cluster proxmox sur le site de Lausanne, sur un autre cluster proxmox se trouvant à Lutry. Jusque-la rien de bien sorcier me direz-vous, si ce n'est qu'avec un lien réseau de faible débit entre les deux sites j'ai fait une copie initiale de mes images de bécannes virtuelles en fichier raw sur un disque externe. Sur le site de Lutry j'ai une config avec deux serveurs en cluster proxmox  lutrycalc01:~# pveca -l CID----IPADDRESS----ROLE-STATE--------UPTIME---LOAD----MEM---DISK  1 : 192.168.50.100  M     A     1 day 05:49   2.23     8%     1%  2 : 192.168.50.110  N     A     1 day 05:49   0.00     1%     1% chaque serveur à 3 disques logiques (de taillse identique) s'appuyant sur une config physique en RA...

Compter le nombre d'entités de type différentes dans un dessin dxf

Image
Quand on reçoit des données graphiques sous forme d'un simple fichier DXF, il se peut que l'on soit confronter au fait de vérifier le type d'entités différentes se trouvant dans ce fichier. l'utilitaire ogrinfo de la suite d'outil gdal  est bien pratique et il permet de résoudre ce petit problème en une seule ligne de commande sous n'importe quel shell tel que bash avec votre distribution Gnu/Linux favorite. Ceci permet de filtrer tout de suite un fichier d'un lot qui contiendrait des types d'entités que l'on ne veut pas traiter. ogrinfo -geom=SUMMARY -al  085_VOL2008.dxf |grep AcDbEntity|sort |uniq -c        332   SubClasses (String) = AcDbEntity:AcDb3dPolyline     580   SubClasses (String) = AcDbEntity:AcDbBlockReference     405   SubClasses (String) = AcDbEntity:AcDbCircle      64   SubClasses (String) = AcDbEntity:AcDbCircle:AcDbArc      50   SubClasses (String) = ...

Richard M. Stallman en tournée en Suisse Romande "It's Now & It's Free like in Freedom" !

Image
Richard M. Stallman, alias RMS  est un programmeur à l'origine du projet GNU   , auteur d'outils indispensables tels que l’éditeur de texte  GNU Emacs , le  compilateur C de GNU , le  débogueur GNU  mais aussi, en collaboration avec  Roland McGrath , le  moteur de production   GNU Make .   Il s'agit d'un vrai  "Personnage" figure emblématique, charismatique et incontournable du Monde du Libre Il a déclaré à plusieurs reprises « Je puis expliquer la base philosophique du logiciel libre en trois mots :  liberté, égalité, fraternité .  Liberté , parce que les utilisateurs sont libres. Égalité , parce qu'ils disposent tous des mêmes libertés.  Fraternité , parce que nous encourageons chacun à coopérer dans la communauté ». Il est actuellement en tournée de conférence dans la région suisse romande, le 8 et le 10 novembre à Lausanne, le 9 et le 11 à Genève. Ne ratez pas cette occasion unique de le rencont...

Ubuntu 10.10 est disponible !

Image
La 13ème version de la distribution Linux Ubuntu "The Maverick Meerkat" est disponible ! Plus d'informations en français sur le site du zéro Vous pouvez vous rendre aussi directement sur le site principal Ubuntu pour aller rechercher votre copie   Entre autres caractéristiques on a le passage au noyau Linux  2.6.35, et la nouvelle version de  Gnome 2.32. 

SuperTux is alive : Numéro 2 dans le top500 avec du Linux du Nvidia TESLA

Image
Dans un précédent post en mars dernier j'évoquais le fait qu'il y avait de forte chance que les futurs supercalculateurs dans le Top500 utilisent la puissance de calcul des processeurs graphiques actuels pour atteindre à un moindre coût d'acquisition et de consommation les sommets du top500...    Et bien ça y est c'est chose faite la Chine a rejoint  le classement de juin 2010 des supercalculateurs les plus puissants  de la planète, (le fameux Top500  ) avec trois supercalculateurs ! Et attention pas n'importe ou, elle place directement ces nouveaux   clusters dans le top20 (19ème,7ème et 2ème place) dont une deuxième place d'entrée de jeu. C'est très impressionnant, et surtout ce n'est probablement qu'un début, je suis près à parier qu'avant la fin de l'année la Chine risque de se placer encore plus haut.  En attendant la deuxième place est occupée par un supercalculateur du  National Supercomputing Centre in Shenzhen (NSCS) ...

Choisir parmi plusieurs versions de java sous Ubuntu

Image
Sous Linux Gentoo il existe une commande java-config qui permet de configurer la version de java runtime que l'on désire utiliser par défaut. Avec Ubuntu il faut utiliser la commande update-alternatives Pour différente raison j'ai besoin d'utiliser la dernière version de java provenant de chez SUN et les paquets se trouvant dans aptitude ne correspondent  pas forcément à la toute dernière version. Ainsi après avoir installé le jdk de Sun dans /opt et fait un lien symbolique sur la version courante avec (ln -s jdk1.6.0_19 jdk) je vais dire que c'est cette version que je veux utiliser avec ces deux commandes : sudo update-alternatives --install /usr/bin/java java /opt/jdk/jre/bin/java 1 sudo update-alternatives --config java lors de cette dernière commande je me verais présenter une liste des java disponibles sur le système et je n'aurais qu'à choisir parmi une d'entre elles avec le numéro se trouvant à gauche. Plus d'informations sont disponibles ...

Comment renommer 350 fichiers d'un coup d'un seul sous Linux-bash

Je me suis retrouvé dans la situation ou dans un répertoire j'avais 350 fichiers du style dtmgrid122413_1m.asc.gz qu'il fallai que je renomme en MNT_1224-13_1m.asc.gz grâce aux pipe et à sed c'est possible en une seule commande: for i in dtm*; do (mv $i `echo $i|sed 's/dtmgrid\([1-9]\{4\}\)/MNT_\1-/'`); done on retrouve une boucle for qui parcoure chaque fichier dans le répertoire courant et le stocke dans la variable i. Puis pour chaque fichier trouver on va faire un mv pour renommer l'ancien nom de fichier se trouvant en $i en quelquechose qui se trouve etre le résultat de l'expression: `echo $i|sed 's/dtmgrid\([1-9]\{4\}\)/MNT_\1-/'` notez bien que l'expression est entre backquotes c'est grâce à cela que l'on reçoit la valeur finale de l'éxécution de cette suite de commande et non pas une simple chaine de caractères équivalent à notre commande... en gros c'est grâce à une substitution sed " s/avant/apres/ " qui ...

SuperTux is back : 4.6 TeraFlops avec ATI Radeon™ HD 5970 & OpenCL let's go ride

Image
Et si en 2010 vous vous offriez  votre supercalculateur Linux personnalisé  : Viva  SuperTux ! Si on se rend sur la  fiche technique de la nouvelle ATI Radeon HD 5970   on découvre que cette nouvelle carte graphique possède une puissance de calcul assez impressionnante de 4.6  TeraFLOPS  par GPU : Processing power (single precision): 4.64 TeraFLOPS Processing power (double precision): 928 GigaFLOPS Polygon throughput: 1.45 billion polygons/sec Si on décide d'utiliser toute cette puissance pour  qqchose de plus constructif que des FPS et autre jeux stériles et bien on arrive vite à la conclusion que l'on peut avoir un supercalculateur pour pas cher. Nvidia avait déjà lancé CUDA mais personnellement, je pense comme dans l'article de Douglas Eadline, Ph.D.   ( GP-GPUs: OpenCL Is Ready For The Heavy Lifting sur Linux Magazine ) que   OpenCL a pas mal de chances d'avoir plus de succès...

Download du snapshoot de chromium

Image
Si vous êtes comme moi, vous aimez avoir   chromium sur votre distribution Linux favorite. Pers Personnellement rien que pour la syncro automatique des favoris et pour pouvoir tester webgl, j'avoue que je ne pourrais plus me passer de chromium. Pour avoir toujours la dernière version j'ai écrit ce petit script perl getchromium.pl Maintenant en lançant getchromium.pl sur ma Ubuntu j'obtiens la dernière archive pour Linux x86_64 qui va se décompresser dans le répertoire du nom de cette release et créer un lien symbolique sur ce répertoire. Comme j'ai créé sur mon bureau Gnome un lanceur qui pointe sur ~/tools/chromium/chrome-linux/chrome --enable-webgl je peux donc toujours lancer la dernière snapshoot de chromium x86_64 disponible sur le buildbot chromium.

Clonage d'une machine virtuelle OpenVZ

Image
Je suis un heureux administrateur système Linux qui utilise Proxmox comme plateforme de virtualisation J'utilise passablement les "conteneurs" OpenVZ. Et je venais de me finaliser un clônage comme indiqué sur le wiki , Comme j'étais sur un cluster proxmox, j'ai pris soin de créer au préalable mon nouveau conteneur depuis l'interface de management web du noeud "master" (j'utilise les mêmes valeurs de config que pour l'original), puis j'effectue une migration sur le noeud de destination. Ensuite j'ai effectué un ssh sur le noeud destination et j'ai effectué # vzctl stop 101 # vzctl stop 112 # rsync -avz /var/lib/vz/private/101/ /var/lib/vz/private/112/ # diff /etc/vz/conf/101.conf /etc/vz/conf/112.conf # théoriquement il ne devrait pas y avoir de différence si ce n'est l'adr IP qui doit être différente donc on démarre les deux noeuds # vzctl start 101 # vzctl start 112 Par rapport à la démarche proposée sur le wik...

Utiliser curl pour récupérer des logs sur un serveur Microsoft IIS avec l'authentification ntlm

Image
Quand il s'agit de récupérer des fichiers depuis un serveur Web Microsoft IIS, (sisi ça arrive dans la vie d'un sysadmin linux) il ne faut pas hésiter à utiliser curl (en lieu et place de wget) En effet curl (via libcurl) supporte toute les variantes d'authentification dont certaines spécifiques à Microsoft comme le fameux ntlm. Pour vérifier si vous avez déjà curl vous pouvez exécuter un simple dpkg -l |grep curl Ce qui dans mon cas donne sur une Ubuntu 9.1 : ii curl 7.19.5-1ubuntu2 Get a file from an HTTP, HTTPS or FTP server ii libcurl3 7.19.5-1ubuntu2 Multi-protocol file transfer library (OpenSS ii libcurl3-gnutls 7.19.5-1ubuntu2 Multi-protocol file transfer library (GnuTLS ii libcurl4-gnutls-dev 7.19.5-1ubuntu2 Development files and documentation for libc ii php5-curl 5.2.10.dfsg.1-2ubuntu6.3 CURL module for php5 Vous pouvez le cas échéant installer ces paquets avec un gestionnaire de paq...