IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Recherche dans un périmètre selon un autre périmètre


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 25
    Par défaut Recherche dans un périmètre selon un autre périmètre
    Bonjour à tous

    Récemment j'ai eu besoin de chercher tous les points (des lieux) proche de ma position, position qui en plus était nuancée par un périmètre. Par exemple tous les lieux dans les 5km autours de moi.

    Pour ceci aucun problème, après quelques recherches et diverses modifs j'ai eu ma fonction.

    Voici ma fonction actuelle qui marche à merveille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    $lat = $latMe; // Ma latitude
    $lon = $lonMe; // Ma longitude
    $rad = $distanceEvent; // La distance que je veux pour mon périmètre, par exemple 10km
     
    $R = 6371; // En rapport avec la Terre, pas tout compris mais ça marche
     
    $maxLat = $lat + rad2deg($rad/$R);
    $minLat = $lat - rad2deg($rad/$R);
    $maxlon = $lon + rad2deg(asin($rad/$R) / cos(deg2rad($lat)));
    $minlon = $lon - rad2deg(asin($rad/$R) / cos(deg2rad($lat)));
     
    $sql = "SELECT *, acos(sin(:lat)*sin(radians(lati)) + cos(:lat)*cos(radians(lati))*cos(radians(longi)-:lon)) * :R As D
    		FROM ( SELECT * FROM event WHERE lati Between :minLat And :maxLat And longi Between :minlon And :maxlon ) As FirstCut
    		WHERE acos(sin(:lat)*sin(radians(lati)) + cos(:lat)*cos(radians(lati))*cos(radians(longi)-:lon)) * :R < :rad ORDER by date";
     
    $params = [
    	'lat'    => deg2rad($lat),
    	'lon'    => deg2rad($lon),
    	'minLat' => $minLat,
    	'minlon' => $minlon,
    	'maxLat' => $maxLat,
    	'maxlon' => $maxlon,
    	'rad'    => $rad,
    	'R'      => $R,
    ];

    Aujourd'hui j'ai besoin de plus complexe et je ne trouve pas...

    J'ai besoin de trouver autours de moi, dans un périmètre donné, les personnes qui elle même ont stipulé un périmètre de "disponibilité".

    Par exemple moi je dis que je peux me déplacer de ma position et dans les 10km autours et les gens disent la même chose, donc j'ai besoin de cherche autours de moi à 10km les points disponibles eux même dans un rayon de 10km.... Oui un peu compliqué à expliquer à l'écrit.

    En gros schématiquement on aura mon cercle à moi et plein de cercles (les gens) et il faut que je trouve les gens dont le cercle passe dans le miens. (oui c'est l'explication maternelle)

    Merci par avance !

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    L'explication "maternelle" a l'avantage d'être claire et efficace.

    Bon par contre, ça va pas être de la tarte pour faire ce que tu veux. De ce que je comprends, ta requête calcule la distance entre ta position et la position du point P et filtre sur les points pour lesquels cette distance est inférieure à la distance max.

    Ce dont tu as besoin, c'est de trouver un point P à moins de 10 km de toi qui doit également à moins de N km de la position de l'autre personne.
    La version bourrin consisterait à calculer tous les points qui appartiennent au périmètre de quelqu'un et ensuite d'appliquer la requête que tu as actuellement sur ces points

    Sinon pour préciser : $R = 6371; // En rapport avec la Terre, pas tout compris mais ça marche, c'est le rayon de la Terre en kilomètres. Il faut se rappeler que la Terre n'étant pas plate, les distances sont calculées en arc à la surface d'une sphère de rayon $R. Pour une distance de quelques mètres, c'est négligeable, mais si tu commences à compter en kilomètres, ça peut avoir un impact.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 25
    Par défaut
    Salut,

    Pffiouh ton raisonnement "bourrin" est juste mais mon dieu voilà la requête T___T J'espérais que quelqu'un gérant bien les geolocations et maths appliquées saurait m'aider à trouver cette requête, je suis sûr qu'il doit y avoir moyen de faire aussi "simple" (on se comprend) que ma première requête (qui est excellente !).

    Bon moi je veux du PHP mais il y a des apps qui font ça, par exemple je précise que je suis dispo à tel point LAT/LONG avec un rayon de 10km et je cherche les gens aussi dispo, sachant qu'eux aussi mettent un rayon de disponibilité, du coup ça se fait, maintenant faut trouver en PHP et pas trop lourd... :-(

    J'allume un cierge, si quelqu'un a une idée, merci infiniment !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ...Voici ma fonction actuelle...
    "ma" ? J'ai comme un doute...


    1- une requête aussi "simple" consiste à chercher pour un périmètre2 donné (périmètre indiqué par l'autre).

    En effet, ça équivaut à chercher :
    • pour un périmètre valant $distanceEvent = (périmètre1 + périmètre2) : qu'on remplace dans le calcul PHP précédent
    • ET (périmètre 2 <= valeur donnée) : condition qu'on ajoute à la requête

    [EDIT] Erreur d'interprétation (cf message de Loralina plus bas)

    2- On peut envisager plusieurs requêtes, en faisant varier périmètre 2, pour afficher les résultats pour les personnes ayant indiqué comme périmètre : 0, 5km, 10km, 20km...

    3- Par contre, si on veut trouver TOUS les résultats en une seule requête, et pour toutes les valeurs possibles de périmètre2, il va falloir passer TOUS les calculs DANS la requête, avec "périmètre2" en paramètre "variable"...
    Bon courage... (perso, je ne me risque pas à chercher...)
    Dernière modification par Invité ; 18/04/2018 à 09h21.

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je dois avouer que ça dépasse également mes compétences. Si tu veux faire l'essentiel du travail dans la requête, ça vaudrait peut-être le coup de transférer le thread à nos collègues du forum BDD.
    Juste pour savoir, tu utilises quel SGDB ? Sous Oracle, on peut faire des trucs de malade en utilisant les clauses WITH.

    @Jreaux : Bah si "sa" fonction, la fonction qu'il utilise quoi (il n'a pas dit qu'il l'avait écrit tout seul, sans aide et les mains dans le dos non plus il a même dit "recherches" et "modifications")
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 25
    Par défaut
    Merci des réponses ! Je n'ai rien compris sur le "ma" oui j'utilise ce pronom car c'est la fonction actuelle que j'utilise et que j'ai trouvé sur internet :-) Je n'ai pas déposé d'enveloppe Soleau ni de Copyright sur celle-ci ! Le feu part vite ici !

    Alors pour le SGBD avec Oracle et compagnie ça va être délicat je suis assez "newbie", j'ai mon petit code PHP dans un coin et dans l'autre dans le mysql fourni par mon hébergeur avec mon petit phpmyadmin Jusqu'ici je n'ai jamais eu besoin de fonctions complexes ou alors je m'en suis toujours sorti. Mais là c'est vrai que ça devient la cata, j'ai planché dessus toute la journée c'est bien prise de tête.

    J'ai tenté de modifié la requête actuelle en faisant une jonction et diverses tentatives avec des maths trouvées à droite et à gauche mais rien ne marche...

    Je reviendrai tous les jours ici au cas où et sinon je continue mon investigation dans mon coin ! Merci de l'attention. Je retiens le point n°1 @Jreaux comme piste.

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2018, 12h45
  2. Recherche dans une table selon critères
    Par Senkai dans le forum Langage SQL
    Réponses: 2
    Dernier message: 04/05/2015, 04h32
  3. Réponses: 0
    Dernier message: 30/03/2010, 20h07
  4. rechercher dans sous formulaire selon 1 critère
    Par cilcemax dans le forum IHM
    Réponses: 2
    Dernier message: 05/02/2008, 18h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo