Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: ordinamento coordinate

  1. #1

    ordinamento coordinate

    Ciao ragazzi,
    mi servirebbe un aiuto.
    Ho bisogno di fare una query ad un database che mi ordini le due colonne di coodinate dalle coordinate più vicine.
    Un esempio:
    Io ho queste due coordinate 46.65447 e 11.80520 che sono rinchiuse nelle due seguenti variabili:
    $lat
    $lng
    e vorrei ordinare le coordinate del database che si chiamano lat e lng per le coordinate più vicino a $lat $lng.

    $strsql="SELECT * FROM panorama ORDER BY ???????? ";

    Grazie per il vostro aiuto!

  2. #2
    Ciao,
    per ordinare in funzione della distanza devi fare.. o far fare alla tua query... qualche operazione di trigonometria sferica.

    Per prima cosa latitudini e longitudini vanno convertite in radianti, poi sfruttando la legge dei coseni sferici calcoli la distanza (per il tuo scopo è sufficiente l'angolo in radianti):

    codice:
    acos ( sin(radians(lat)) * sin(radians($lat)) + cos(radians(lat)) * cos(radians($lat)) * cos(radians(lng)-radians($lng)) )
    Devi ordinare il risultato di questa espressione in ordine crescente / decrescente... a secondo se vuoi il più vicino o più lontano.

    Alessandro
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  3. #3
    Grazie per la tua risposta Alessandro ma non capisco a cosa corrisponde la parola "acos" nel codice che mi hai mandato. Puoi essere più preciso e mandarmi qulcosa in più del codice e la query che devo scrivere?
    Non sono un grande esperto in PHP

    Grazie
    Mario

  4. #4
    Originariamente inviato da rottonara
    Grazie per la tua risposta Alessandro ma non capisco a cosa corrisponde la parola "acos" nel codice che mi hai mandato. Puoi essere più preciso e mandarmi qulcosa in più del codice e la query che devo scrivere?
    Non sono un grande esperto in PHP

    Grazie
    Mario

    vuol dire arco coseno. devi trovare le corrispondenti per il tuo database. in mysql:

    http://dev.mysql.com/doc/refman/5.1/...functions.html

    in postgres

    http://www.postgresql.org/docs/8.3/s...ions-math.html

    dall'esempio, lat e lng sono i campi nel database, e $lat e $lng sono le variabili che passi alla query col php
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  5. #5
    Scrivendo questo codice:
    $strsql="SELECT * FROM panorama acos ( sin(radians(lat)) * sin(radians($lat)) + cos(radians(lat)) * cos(radians($lat)) * cos(radians(lng) - radians($lng)) ) ";

    mi da questo errore:
    Errore query database: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( sin(radians(lat)) * sin(radians(46.65941)) + cos(radians(lat)) * cos(radians(4' at line 1

    che cosa scrivo di sbagliato?
    Grazie per l'aiuto.

  6. #6
    che cosa scrivo di sbagliato?
    La query.

    codice:
    $strsql="SELECT * FROM panorama  ORDER BY acos( sin(radians(lat)) * sin(radians($lat)) + cos(radians(lat)) * cos(radians($lat)) * cos(radians(lng) - radians($lng)) )  ";
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  7. #7
    Funzione alla perfezione
    Grazie mille!

  8. #8
    Per estrapolare la distanza da una coordinata all'altra cosa di dovrebbe aggiungere?
    Lo so si vorrebbe sempre di più.
    Grazie ancora.

  9. #9
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  10. #10
    Originariamente inviato da rottonara
    Per estrapolare la distanza da una coordinata all'altra cosa di dovrebbe aggiungere?
    Per avere la distanza basta moltiplicare per il raggio della sfera... in questo caso il raggio medio terrestre (medio, perchè la terra non è una sfera)
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.