Annonce
Une fois la suspension validée, vous recevrez un message de confirmation.
A tout moment, vous pourrez annuler cette suspension, en suivant le lien Annulation figurant dans ce message.
Cela permettra également aux modérateurs de GeoRezo de ne pas avoir à gérer (et supprimer) de nombreux messages d'attente envoyés automatiquement par vos outils de messagerie durant votre absence !
Pour y accéder, allez sur la gestion de vos abonnements dans votre profil.
#1 jeu 03 décembre 2009 12:40
- imenisg
- Membre
- Date d'inscription: 9 oct 2009
- Messages: 10
distance
salut
je veux faire une fonction dans postgresql je veux calcule le distance entre deux points l une est dans le colonne posit et l'autre je lui donner mais ça n'as pas marcher
Code:
DECLARE
req text;
ste RECORD;
ff POINT;
BEGIN
ff=GeometryFromText('POINT(191232 243118)',-1);
req := 'SELECT * FROM deplaceee where Distance(posit,'||ff||')=0';
--||ff||')=0 ';
EXECUTE req INTO ste ;
RETURN ste.hhh ;
END;resultat
invalid input syntax for type point: "010100000000000000005807410000000070AD0D41"
merci d'avance
imen
Dernière modification par imenisg (jeu 03 décembre 2009 12:42)
Hors ligne
#2 jeu 03 décembre 2009 14:21
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 sep 2005
- Messages: 199
- Site web
Re: distance
imenisg a écrit:
salut
je veux faire une fonction dans postgresql je veux calcule le distance entre deux points l une est dans le colonne posit et l'autre je lui donner mais ça n'as pas marcherCode:
DECLARE req text; ste RECORD; ff POINT; BEGIN ff=GeometryFromText('POINT(191232 243118)',-1); req := 'SELECT * FROM deplaceee where Distance(posit,'||ff||')=0'; --||ff||')=0 '; EXECUTE req INTO ste ; RETURN ste.hhh ; END;resultat
invalid input syntax for type point: "010100000000000000005807410000000070AD0D41"
merci d'avance
imen
Bonjour
La fonction distance prend deux geometries, pas du texte.
Il faut soit caster le point (sous forme de texte) en geometry, soit
utiliser une fonction pgis pour convertir un point en geometry:
'POINT (x y)'::geometry
ou
geomfromwkt('POINT (x y)');
Il faudra aussi faire attention au SRID des geometries utilisées dans la requete (setsrid ou ewkt pour construire une geometrie avec SRID different de -1)
(dans le code, vous faites ff='POINT(191232 243118)'; Si vous voulez affecter a la variable ff le point, il faut utiliser :=, pas =
Nicolas
Hors ligne
#3 jeu 03 décembre 2009 14:37
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 sep 2005
- Messages: 199
- Site web
Re: distance
imenisg a écrit:
salut
je veux faire une fonction dans postgresql je veux calcule le distance entre deux points l une est dans le colonne posit et l'autre je lui donner mais ça n'as pas marcherCode:
DECLARE req text; ste RECORD; ff POINT; BEGIN ff=GeometryFromText('POINT(191232 243118)',-1); req := 'SELECT * FROM deplaceee where Distance(posit,'||ff||')=0'; --||ff||')=0 '; EXECUTE req INTO ste ; RETURN ste.hhh ; END;resultat
invalid input syntax for type point: "010100000000000000005807410000000070AD0D41"
merci d'avance
imen
Et egalement, la syntaxe de la requete n'est pas bonne: il ne faut pas concatener ff a la requete, mais l'utiliser directement dans la requete: distance(posit, ff)
Ou mieux utiliser la commande EXECUTE
une bonne introduction a plpgsql se trouve dans l'aide de PG:
http://www.postgresql.org/docs/8.4/static/plpgsql.html
Nico
Hors ligne
#4 jeu 03 décembre 2009 17:06
- vincentp
- Membre
- Lieu: Paris
- Date d'inscription: 18 jui 2006
- Messages: 49
Re: distance
Nicolas Ribot a écrit:
(dans le code, vous faites ff='POINT(191232 243118)'; Si vous voulez affecter a la variable ff le point, il faut utiliser :=, pas =
A noter juste pour que tout soit clair, que le symbole "=" dans pl/pgsql fonctionne pour faire une affectation, mais ce n'est pas documenté, et c'est surtout fortement déconseillé car il entre souvent en conflit avec la fonction de comparaison d'égalité.
Donc Nicolas a bien raison, pour une affectation il faut utiliser ":=".
vincent
Hors ligne
#5 jeu 03 décembre 2009 17:37
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 sep 2005
- Messages: 199
- Site web
Re: distance
vincentp a écrit:
Nicolas Ribot a écrit:
(dans le code, vous faites ff='POINT(191232 243118)'; Si vous voulez affecter a la variable ff le point, il faut utiliser :=, pas =
A noter juste pour que tout soit clair, que le symbole "=" dans pl/pgsql fonctionne pour faire une affectation, mais ce n'est pas documenté, et c'est surtout fortement déconseillé car il entre souvent en conflit avec la fonction de comparaison d'égalité.
Donc Nicolas a bien raison, pour une affectation il faut utiliser ":=".
vincent
Ah, merci pour cette precision, je ne savais pas.
je me souviens juste m'etre arraché les cheveux sur les erreurs plpgsql a cause de ces affectations.
Nico
Hors ligne
