[HS] distance entre deux points...

Le
phig
bonjour.

je suis en train de tester google maps, et je cherche à afficher des
points présent dans ma base de donnée dans un rayon de x km
autour d'un autre point ( pour simplifier, les bureaux de poste les plus
près de chez moi, sachant que j'ai une bdd avec les bureaux géocodés)



mes géo-connaissances étant très limitées, une ame charitable
pourrait-elle m''aiguiller ? ( calcul de distance, algorithme de
recherche )
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Roumégou Eric
Le #19907921
phig a exprimé avec précision :
bonjour.

je suis en train de tester google maps, et je cherche à afficher des points
présent dans ma base de donnée dans un rayon de x km
autour d'un autre point ( pour simplifier, les bureaux de poste les plus près
de chez moi, sachant que j'ai une bdd avec les bureaux géocodés)



mes géo-connaissances étant très limitées, une ame charitable pourrait-elle
m''aiguiller ? ( calcul de distance, algorithme de recherche ...)



wclausein,chOrder est chaîne
wch=Rtv_CoordXY(CDP,"")
PPL_POSX=ExtraitChaîne(wch,1)
PPL_POSY=ExtraitChaîne(wch,2)
ville=ExtraitChaîne(wch,3)
SI B1_NB=0 ALORS
Erreur("Ce nombre doit être égal ou supérieur à 1")
RepriseSaisie(B1_NB)
FIN

SI PPL_POSX=0 ALORS
Erreur("Les coordonnées de positionnement ne sont pas
disponibles"+RC+"Opération impossible")
RETOUR
FIN
wclausein=Remplace(LePlusProche(LVL_ID,PPL_POSX,PPL_POSY,B1_NB),TAB,",")
chOrder="SQRT(POWER("+PPL_POSX+"- PEOPLE.PPL_POSX,2)+POWER("+PPL_POSY+"
- PEOPLE.PPL_POSY,2))"
Ouvre(PEOPLE_TAB,"PEOPLE.LVL_ID="+LVL_ID+" AND PEOPLE.PPL_ID
IN("+wclausein+")",LVL_DESC+" plus proches de "+CDP+"
"+ville,Vrai,"",chOrder)
Ferme

PROCEDURE LePlusProche(pLvl_id,pX,pY,pNb=1,pFiltre="")

// renvoie le PPL_ID des pNb individus d'une population pLvl_id les
plus proches en fn des coordonnées X et Y
// si pNb<>1 alors les PPL_ID sont séparés par des TAB
lCurReq est un entier
commande est chaîne
chretour est chaîne

commande="SELECT PPL_ID FROM PEOPLE "+...
" WHERE LVL_ID="+pLvl_id+" AND SQRT(POWER("+pX+"-
PPL_POSX,2)+POWER("+pY+" - PPL_POSY,2)) IS NOT NULL "
SI pFiltre<>"" ALORS commande+=" AND "+pFiltre
commande+=" ORDER BY SQRT(POWER("+pX+"- PPL_POSX,2)+POWER("+pY+" -
PPL_POSY,2))"
commande+=" LIMIT 0,"+pNb
chretour=""

lCurReq=2
SI fSQL:mySQLExec(commande,lCurReq)
fSQL:mySQLPremier(lCurReq)
TANTQUE PAS fSQL:mySQLEnDehors
chretour+=fSQL:mySQLCol(lCurReq,1)+TAB
fSQL:mysqlsuivant(lCurReq)
FIN
SINON
fSQL:mySQLMsgBox(commande)
FIN
fSQL:mySQLFerme(lCurReq)
RENVOYER TronqueDernierCaractere(chretour)




c'est du pythagore.
tu prends les occurrences dont la racine carré((posx1-posx2)²+
posy1-posy2)²) est la plus faible.

dans mon exemple, je pars d'un point précis et je passe mon filtre (c
du mysql) avec ma variable ppl_posx et ma variable ppl_posy que je
connais (c'est celle de mon point de référence) et les posx,posy de la
base.
Ensuite un LIMIT n, et j'ai les n plus proches de mon point.

--
Eric Roumégou
Webmaster des wtablettes
http://cerbermail.com/?qE7t4Qvilo
(cliquez sur le lien ci-dessus pour me contacter en privé)
MiF
Le #19908871
Bonjour,

Vous trouverez un exemple dans ce projet sur l'orthodromie :
http://forum.pcsoft.fr/thread.awp?postid1429

Michel Fages


On 10 août, 08:58, phig
bonjour.

je suis en train de tester google maps, et je cherche à afficher des
points présent dans ma base de donnée dans un rayon de x km
autour d'un autre point ( pour simplifier, les bureaux de poste les plus
près de chez moi, sachant que j'ai une bdd avec les bureaux géocodé s)

mes géo-connaissances étant très limitées, une ame charitable
pourrait-elle m''aiguiller ? ( calcul de distance, algorithme de
recherche ...)


phig
Le #19912511
MiF a écrit :
Bonjour,

Vous trouverez un exemple dans ce projet sur l'orthodromie :
http://forum.pcsoft.fr/thread.awp?postid1429

Michel Fages


On 10 août, 08:58, phig
bonjour.

je suis en train de tester google maps, et je cherche à afficher des
points présent dans ma base de donnée dans un rayon de x km
autour d'un autre point ( pour simplifier, les bureaux de poste les plus
près de chez moi, sachant que j'ai une bdd avec les bureaux géocodés)

mes géo-connaissances étant très limitées, une ame charitable
pourrait-elle m''aiguiller ? ( calcul de distance, algorithme de
recherche ...)


u




merci a tous les deux, j'ai fini par adapter une requete sql trouvée sur
sqlfr:

[code]
local
sReqdist est une chaine
centre_xy est une source de données


sReqdist="select
6366*acos(cos(WL.conversion(%1,'degree','radian'))*cos(WL.conversion(centre.lat,'degree','radian'))*cos(WL.conversion(centre.long,'degree','radian')-WL.conversion(%2,'degree','radian'))+sin(WL.conversion(%1,'degree','radian'))*sin(WL.conversion(centre.lat,'degree','radian')))
as distance,nom,adresse1,adresse2,ville,cp,tel,codecentre,long,lat from
centre where distance<%3"

TableauSupprimeTout(gtabCentre)



SI
HExécuteRequêteSQL(centre_xy,hRequêteDéfaut+hModifieFichier,ChaîneConstruit(sReqdist,rlata,rlonga,25))
ALORS
pour tout centre_xy
//snip
fin
[code]

ou rlata et rlonga sont les latitude/longitude du centre, les distances
étant exprimée en km. 6366 étant la moyenne du rayon de la terre en km.
on doit pouvoir faire plus précis, je regarderai le projet othodromie
quand j'aurai un peu de temps ...
Publicité
Poster une réponse
Anonyme