{{tag>PostGIS plpython WebServcies elevation sh}}====== Connaitre l'altitude d'un point grâce à ses coordonnées ====== **Merci à tous de partager les améliorations que vous apporteriez sur cette fonction** * Service utilisé : http://www.earthtools.org/webservices.htm#height * Données utilisées : http://www.earthtools.org/aboutdata.htm * Conditions d'utilisation : http://www.earthtools.org/webservices.htm#usage ==== Création de la fonction dans le schéma "outils" ==== CREATE OR REPLACE FUNCTION outils.elevation("long" double precision, lat double precision) RETURNS double precision AS $BODY$ import urllib; page=urllib.urlopen('http://www.earthtools.org/height/'+str(lat)+'/'+str(long)); result_xml = page.read() rv = plpy.execute("SELECT ((xpath('//height/meters/text()', '"+result_xml+"'::xml))[1])::text::float AS elevation") foo = rv[0]['elevation'] return foo $BODY$ LANGUAGE plpythonu; ==== Création d'un script de mise à jour d'une table d'observation ==== #!/bin/sh for a in `seq 1 20000`; do psql -c "UPDATE saisie.saisie_observation SET elevation = outils.elevation(st_x(st_transform(geometrie, 4326)), st_y(st_transform(geometrie, 4326))) WHERE id_entite IN (SELECT id_entite FROM saisie.saisie_observation WHERE elevation IS NULL AND GeometryType(geometrie) = 'POINT' ORDER BY id_entite LIMIT 1)" -h 192.168.1.230 -U nom_utilisateur nom_base_de_donnee # respect des conditions d'utilisation du service # interdisant plus d'une requête par seconde sleep 1; # echo "Élévation mise à jour" done