Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Vous partez en vacances ?
Vous pouvez suspendre vos abonnements aux forums : vous serez désinscrit à partir de la date que vous indiquerez et réinscrit automatiquement à votre retour.

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.

Et à tous nos membres : bonnes vacances !
L'équipe GeoRezo

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

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

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

 

Pied de page des forums

Powered by FluxBB