Trie sur CODE POSTAL [Résolu]

Signaler
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
16 juin 2020
-
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
-
Bonjour,

Voila je dois sélectionner des code Postaux sur une distance environ de 10 km à vol d'oiseau par rapport
A une saisie de l'utilisateur, la table ce compose de:
Code Postal
Ville
Latitude reconverti en Integer
Longitude reconverti en Integer

Pour l'instant je filtre sur un Carré avec :
//------------------------------------------------------------------------------
CP.Open;
CP.Filter := '';
CP.Locate('NFICHE', ORE1.Text, []); // NFiche=Code Postal, ORE1.Text=Saisie
X := CP.FieldByName('POSX').AsFloat; // Latitude
Y := CP.FieldByName('POSY').AsFloat; // Longitude
//------------------------------------------------------------------------------
CP.Filter :=
'(POSX>=''' + FloatToStr(X - 2000) + ''')' // Filtrer Latitude
+ ' And (POSX<=''' + FloatToStr(X + 2000) + ''')' // Filtrer Latitude
+ ' AND (POSY>=''' + FloatToStr(Y - 3000) + ''')' // Filtrer Longitude
+ ' And (POSY<=''' + FloatToStr(Y + 3000) + ''')'; // Filtrer Longitude
//------------------------------------------------------------------------------

Voila mon blême, le résultat est donc un Carré, et je n'arrive pas à faire une sélection en cercle ce qui logiquement devrait réduire considérablement le résultat d'enregistrement.

Si un passant a une idée fraiche...

Beau Temp, Belle Mer.
Georges

3 réponses

Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
distances entre deux points :

D² = (Ax - Bx)² + (Ay - By)²;

soit :

D = sqrt( sqr(Ax - Bx) + sqr(Ay - By));

merci à Pythagore.
Messages postés
133
Date d'inscription
mardi 24 décembre 2002
Statut
Membre
Dernière intervention
16 juin 2020

Bonjour,
Merci Foxi, je vais regarder ca

Beau Temps, Belle Mer
Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
par contre, faire une selection carré en premier et faire le test sur les points restant, il ne faudrait pas trop appeler SQRT et SQR trop souvent non plus.