Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Recensione Samsung Galaxy Z Fold7: un grande salto generazionale
Abbiamo provato per molti giorni il nuovo Z Fold7 di Samsung, un prodotto davvero interessante e costruito nei minimi dettagli. Rispetto al predecessore, cambiano parecchie cose, facendo un salto generazionale importante. Sarà lui il pieghevole di riferimento? Ecco la nostra recensione completa.
The Edge of Fate è Destiny 2.5. E questo è un problema
The Edge of Fate è Destiny 2.5. E questo è un problema
Bungie riesce a costruire una delle campagne più coinvolgenti della serie e introduce cambiamenti profondi al sistema di gioco, tra nuove stat e tier dell’equipaggiamento. Ma con risorse limitate e scelte discutibili, il vero salto evolutivo resta solo un’occasione mancata
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello
AMD ha aggiornato l'offerta di CPU HEDT con i Ryzen Threadripper 9000 basati su architettura Zen 5. In questo articolo vediamo come si comportano i modelli con 64 e 32 core 9980X e 9970X. Venduti allo stesso prezzo dei predecessori e compatibili con il medesimo socket, le nuove proposte si candidano a essere ottimi compagni per chi è in cerca di potenza dei calcolo e tante linee PCI Express per workstation grafiche e destinate all'AI.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 29-04-2010, 17:26   #1
e-commerce84
Senior Member
 
Iscritto dal: Feb 2009
Messaggi: 700
[MySql] Aiuto ad implementare la funzione haversine in una query:distanza tra 2 punti

Ciao ragazzi,
allora ho un bel problema dal quale non riesco proprio a venire a capo.

Quello che devo fare fà in parte riferimento a queste slide: http://www.scribd.com/doc/2569355/Ge...rch-with-MySQL

Io ho una tabella poi che contiene una lista di punti di interesse, la cui struttura è la seguente:

Codice:
mysql> describe poi;
+-----------+--------------+------+-----+---------+-------+
| Field     | Type         | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------+-------+
| nome      | varchar(50)  | NO   | PRI |         |       | 
| lon       | float        | NO   | PRI | 0       |       | 
| lat       | float        | NO   | PRI | 0       |       | 
| alt       | float        | NO   | PRI | 0       |       | 
| tipologia | tinyint(4)   | YES  |     | NULL    |       | 
| wikiLynk  | varchar(100) | YES  |     | NULL    |       | 
+-----------+--------------+------+-----+---------+-------+
e che contiene dei record del tipo:
Codice:
mysql> mysql> select * from poi;
+-------------+---------+---------+-----+-----------+-----------------------------------------------------------------+
| nome        | lon     | lat     | alt | tipologia | wikiLynk                                                        |
+-------------+---------+---------+-----+-----------+-----------------------------------------------------------------+
| Colosseo    | 41.8913 | 12.4911 | 0.5 |         0 | http://it.wikipedia.org/wiki/Colosseo                           | 
| Foro Romano | 41.9552 | 12.6768 |   0 |         0 | http://it.wikipedia.org/wiki/Foro_Romano                        | 
| San Pietro  | 41.9457 | 12.6755 |   0 |         0 | http://it.wikipedia.org/wiki/Basilica_di_San_Pietro_in_Vaticano | 
| Pantheon    | 41.9554 | 12.5876 |   0 |         0 | http://it.wikipedia.org/wiki/Pantheon_%28Roma%29                | 
+-------------+---------+---------+-----+-----------+-----------------------------------------------------------------+
Praticamente devo implementare una query che usando la funzione haversine mi restituisce tutti i POI (i punti di interesse) presenti entro un certo raggio dalla posizione dell'utente (espressa sotto forma di longitudine e latitudine)

Stavo vedendo queste slide: http://www.scribd.com/doc/2569355/Ge...rch-with-MySQL ma mi sono bloccato

Praticamente...alla slide 6 dà questa formula (Haversine Formula) che da quello che ho capito serve a calcolare la DISTANZA TRA 2 PUNTI IDENTIFICATI DALLE LORO COORDINATE GPS DI LATITUDINE E DI LONGITUDINE (almeno questo è quello che ho capito...me lo confermate?)

FORMULA PER CALCOLARE LA DISTANZA TRA 2 PUNTI IMPLEMENTATA IN MySql
Codice:
3956 * 2 * ASIN ( SQRT (POWER(SIN((orig.lat - dest.lat)*pi()/180 / 2), 2) +  COS(orig.lat * pi()/180) * COS(dest.lat * pi()/180) *  POWER(SIN((orig.lon - dest.lon) * pi()/180 / 2), 2)  ) ) as distance
Dove 3956 dovrebbe essere il raggio della terra espresso in Km

Ora...usando questa formula devo implementare una query che mi restituisce tutti i POI in un certo raggio centrato nelle coordinate dell'utente.

Quindi si passa alla slide 7 (dove mi incasino di brutto).

Praticamente fà così:
Codice:
set @orig_lat=122.4058; 
set @orig_lon=37.7907;
set @dist=10;

SELECT *, 3956 * 2 * ASIN(SQRT(
POWER(SIN((@orig_lat - abs(dest.lat)) * pi()/180 / 2),
2) + COS(@orig_lat * pi()/180 ) * COS(abs(dest.lat) *
pi()/180) * POWER(SIN((@orig_lon – dest.lon) *
pi()/180 / 2), 2) )) as distance
FROM hotels dest
having distance < @dist
ORDER BY distance limit 10;
Allora...analizzando un attimo questa query:
nelle prime 3 righe setta 3 variabili nel database contenenti la latitudine e la longitudine dell'utente e la distanza entro cui si vuole effettuare la ricerca (il range di ricerca appunto)

Ok...fin quì ci stò...vabbè la sua tabella si chiama hotels e non poi...vabbè basta sostituire...

Però in questo codice non riesco a capire per lui chi siano: dest.lat e dest.lon, cosa rappresentano? Cioè per ogni poi presente nella mia tabella ci va a mettere la rispettiva latitudine e longitudine per eseguire il test?

Io ho provato a modificare la query così ma non mi funziona:

Codice:
set @orig_lat=41.889758; 
set @orig_lon=12.4989331;
set @dist=10;

SELECT *, 3956 * 2 * ASIN(SQRT(
POWER(SIN((@orig_lat - abs(dest.lat)) * pi()/180 / 2),
2) + COS(@orig_lat * pi()/180 ) * COS(abs(dest.lat) *
pi()/180) * POWER(SIN((@orig_lon – dest.lon) *
pi()/180 / 2), 2) )) as distance
FROM poi dest
having distance < @dist
ORDER BY distance limit 10;
mi da il seguente messaggio di errore:
ERROR 1064 (42000): 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 '– dest.lon) *
pi()/180 / 2), 2) )) as distance
FROM poi dest
having distance <' at line 4


mmm...mi ci sono spaccato la testa ma visto che non ho mai fatto query di questo tipo non sò proprio dove andare a mettere le mani...c'è qualcuno che mi sà aiutare?

Grazie
e-commerce84 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione Samsung Galaxy Z Fold7: un grande salto generazionale Recensione Samsung Galaxy Z Fold7: un grande sal...
The Edge of Fate è Destiny 2.5. E questo è un problema The Edge of Fate è Destiny 2.5. E questo ...
Ryzen Threadripper 9980X e 9970X alla prova: AMD Zen 5 al massimo livello Ryzen Threadripper 9980X e 9970X alla prova: AMD...
Acer TravelMate P4 14: tanta sostanza per l'utente aziendale Acer TravelMate P4 14: tanta sostanza per l'uten...
Hisense M2 Pro: dove lo metti, sta. Mini proiettore laser 4K per il cinema ovunque Hisense M2 Pro: dove lo metti, sta. Mini proiett...
SpaceX Starship: Ship 37 ha eseguito due...
Sharkoon punta sui case a basso costo, m...
La tua rete Wi-Fi fa pena? Questi FRITZ!...
Amazon, un weekend di fuoco per gli scon...
Ancora 3 smartwatch Amazfit in forte sco...
Sharkoon A60 RGB: dissipatore ad aria du...
HONOR 400 Pro a prezzo bomba su Amazon: ...
Offerte da non perdere: robot aspirapolv...
Apple Watch e Galaxy Watch ai minimi sto...
Il rover NASA Perseverance ha ''raccolto...
NASA e ISRO hanno lanciato il satellite ...
Switch 2 ha venduto 5,82 milioni di cons...
Assassin's Creed Black Flag Remake: le m...
Cosa ci fa una Xiaomi SU7 Ultra alle por...
Promo AliExpress Choice Day: prezzi stra...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:29.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v