{{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