Newsgroup: it.comp.www.php
Titolo: quesito per una funzione di programmazione.

Gentilissimi delle Newsgroup,
ho un quesito da porvi:
Nel mio dbase MySql sono memorizzati degli utenti con la loro provincia. Ora
vorrei fare in modo che un utente indichi una distanza in chilometri ed una
routine in php mi elencassi tutti gli utenti che si trovano in quella
distanza.
Il problema è di calcolare le distanze chilometriche, come si potrebbe
implementare una procedura/routine che permettesse di fare questo.
Chi ha un idea o una soluzione già pronta?
Grazie.

 implementare una procedura/routine che permettesse di fare questo.
devi mappare l'italia, con tutte le tue città: solo così puoi calcolare la
distanza tra due punti (e quindi co una funzione matematica scoprire quali
sono quelli entro tot Km)
LAMASE
___________!!____________
Oggi è un giorno a caso.

in effetti basta definire un punto X di centro di circonferenza.
Da questo, calcolare le distanza è abbastanza semplice.
Se lavori in coordinate cartesiane, il calcolo è fatto con la funzione di
una conica, in particolare di una circonferenza ovviamente messa in una
disequazione (dato che non ti servono quelli "a questa distanza" ma quelli
"entro questa distanza).
X^2+Y^2 < raggio
(presupponendo che il centro sia X=0, Y=0)
La problematica potrebbe insorgere nel creare lo spazio bidimensionale delle
città.
Un altro sistema, assai semplice, è quello di utilizzare la mappa piramidale
che trovi sugli stradari che mette in relazione una città con un altra in
funzione della distanza chilometrica.
Tale tabella è però disolito fornita solo per i maggiori capoluoghi di
provincia.
A questo punto di basta una tabella con scritto:
OR        DEST        KM
Milano    Firenze    290
Milano    Genova    110
etc etc etc
Quando dovrai cercare una città entro i 200 Km da Milano farai:
select * from tabella where OR='Milano' and KM<200
e lui restituirà la seconda riga, Milano -> Genova -> 110
Ciao ciao
"LAMASE" <a@b.c> ha scritto nel messaggio
news:9u4s5k$fc9$1...@fe2.cs.interbusiness.it...


implementare una procedura/routine che permettesse di fare questo.
Prima di tutto, ti serve un elenco di localita' con le coordinate... se e'
solo per le province, non ci vuole molto per prelevarle automaticamente da
un motore di ricerca cartografico. Con i comuni e' meglio di no perche' si
rischia di fargli un DoS, e si incazzerebbero come lupi siberiani.
Supponendo ora che tu abbia la distanza X e Y in chilometri di ogni citta'
da un ipotetico punto zero situato per es. a Tripoli :-):
	SELECT IDCliente 
	FROM Clienti, Elenco AS Citta1, Elenco AS Citta2
	WHERE
		Citta1.Citta = Clienti.Citta
	AND
		Citta2.Citta = 'CITTAINIZIO'
	AND
		((Citta1.X - Citta2.X)*(Citta1.X - Citta2.X)
		+(Citta1.Y - Citta2.Y)*(Citta1.Y - Citta2.Y))
	< (DIST*DIST);
hai l'elenco dei clienti a meno di DIST chilometri da CITTAINIZIO.
Leonardo
-- 
And where the black and corkscrew towers climb
Lost and athirst the ragged pack abides,
Old as the aeons, trapped in tombs of time,
Sailing the tortuous temporal tides...

 ha scritto nel messaggio
news:didc0u4armos1i97t...@4ax.com...


 rischia di fargli un DoS, e si incazzerebbero come lupi siberiani.
Tutto questo dando per scontato che stai lavorando con una mappa, diciamo
solo italiana: infatti dovendo calcolare la distanza tra due punti sulla
terra dovresti ricorrere ad altro: la distanza tra roma e kiev è ben diversa
da quella calcolata in questo modo, anche se si parla di distanze di altro
tipo! É solo una notazione..
LAMASE
__________!!___________
Un fringuello non compra patatine

terra dovresti ricorrere ad altro
La formula e' solo di poco piu' complessa. Naturalmente, queste formule
non prendono in considerazione la geografia intermedia fra due punti, e
calcolano la via piu' breve da Firenze a Portoferraio passando sotto il
Mar Tirreno :-)
Per piccoli insiemi (le province quante sono, 108?), e' meglio disporre
di una tabella precalcolata di distanze ordinate fra ogni due punti. Su
108 province sono solo 5778 records - trattati bene, 11 Kb di dati. Con
SQL ci si puo' organizzare su due o tre colonne
	Tratta	Km
	FIPO	12
SELECT clienti.* FROM clienti AS c, distanze AS d
	WHERE d.tratta IN ('FI'||c.prov, c.prov||'FI')
	AND 
d.km
 < 100;
trova i clienti a meno di 100 km. da Firenze. Qui, il chilometraggio mi
puo' tenere conto della geografia.
D'altro canto, tabelle di distanze come queste sono piu' complicate, da
procurarsi (alcuni siti, come 
www.splash.it
, le mettono a disposizione,
ma sotto "reasonable use" -- prelevare 5778 records non lo e').
