login  Naam:   Wachtwoord: 
Registreer je!
 Forum

afstandsberekening lon/lat max aantal km (Opgelost)

Offline prienstra - 02/07/2009 09:44 (laatste wijziging 02/07/2009 14:32)
Avatar van prienstraMySQL interesse Beste mensen, ik heb onderstaande code om afstand te berekenen tussen 2 punten.
Ik kan nu wel instellen de maximaal aantal resultaten ($num) maar nu wil ik ook kunnen instellen op bijvoorbeeld alle punten binnen een straal van 10 kilometer.
Dit is de code:
  1. <?php
  2.  
  3. function getNearLonLat($lon, $lat, $exclude = null, $num = 5)
  4. {
  5. $where = ($exclude == null?'':"WHERE `B`.`hotel_id`!=$exclude ");
  6. $query=
  7. "SELECT `B`.*,".
  8. "DEGREES(acos(cos(RADIANS(90-`lat`))".
  9. "*cos(RADIANS(90-$lat))+sin(RADIANS(90-`lat`))".
  10. "*sin(RADIANS(90-$lat))".
  11. "*cos(RADIANS(`lon`-$lon))))".
  12. "/360*40074 as `distance` ".
  13. "FROM `hotel` as `B` ".
  14. "$where".
  15. "ORDER by `distance` ASC limit $num";
  16.  
  17. ?>


Kan iemand mij een beetje op weg helpen, want ik kom er niet uit.

4 antwoorden

Gesponsorde links
Offline Rik - 02/07/2009 09:50
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Je kunt een extra WHERE conditie toevoegen met distance <= $distance als je de functie een extra parameter mee laat geven.
Offline prienstra - 02/07/2009 10:12 (laatste wijziging 02/07/2009 10:52)
Avatar van prienstra MySQL interesse Ik heb nu:
  1. $where = ($exclude == null?'':"WHERE `B`.`hotel_id`!=$exclude AND 'distance' <= 40 ");

op regel 5, maar dat werkt niet. Krijg nog steeds alle afstanden te zien als resultaat.
Offline Rik - 02/07/2009 13:32
Avatar van Rik Gouden medailleGouden medaille

Crew algemeen
Je hebt single quotes rond distance staan, waardoor mysql het als string behandelt. Als je die weg haalt of backticks (` knopje van de tilde op je toetsenbord) gebruikt wordt wel vergeleken met de waarde die je berekent.

En ik had het verkeerd, je moet HAVING gebruiken in plaats van WHERE om te kunnen selecteren op velden die je zelf hebt toegevoegd. Daarmee bedoel ik: hotel_id staat al in de tabel en kun je wel gebruiken in de WHERE, maar distance bereken je zelf en daarvoor moet je HAVING gebruiken.

Je code zou dan worden:
  1. $where = ($exclude == null ? '' : "WHERE `B`.`hotel_id`!=$exclude") . " HAVING `distance` <= 40");
Offline prienstra - 02/07/2009 14:32
Avatar van prienstra MySQL interesse bedankt voor je duidelijke uitleg.
Leer zo weer wat bij over de single quotes.
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.213s