Newsgroup: it.comp.www.php
Titolo: distantanze tra cittá

Salve a tutti
forse un po' OT, perché il problema non risiede nel PHP ma piú che altro
nella mia testa.
Non riesco a capire la logica per fare una seguente operazione, sicuramente
avete visto su tanti siti, il metodo di ricerca che cerca nelle zone
limitrofe a quella richiesta
es. tutte le cittá nel raggio di 10Km, 20 km, etc.
Ho qualche mezza idea,(se i paesi fossero pochi) farei una tabella mysql
nominando
le colonne per nome di citta, e nelle rispettive righe il nome dell'altra
cittÁ con la distanza.
ma trattandosi di un 100naio di cittá, dovrei creare una tabella con 100
colonne,
e sinceramente mi sembra una cosa un po' assurda e poco elegante.
Sicuramente esiste una soluzione meno indolore, purtroppo non mi viene
in mente nessun altro metodo, non sono riuscito a trovare nulla in rete
forse voi....
ciao
Giuseppe


Io semplicemente farei una tabella con nome-coordX-coordY e poi ti gestisci 
con php o chi per lui i dati... 

fai una tabella sola:
id idcittauno idcittadue distanzakm
100^2
credo :)

 con php o chi per lui i dati...
Io semplicemente... non ho capito :-)
Possibile che non c' è nessun esempio in rete, eppure é qualcosa di molto
comune....


l' avevo pensato anch' io, mi sono bloccato proprio
davanti al      100^2
cmq grazie lo stesso

 fatto non succede nulla

Io semplicemente... non ho capito :-)
l'unico modo ragionevole e' quello di memorizzare latitudine e
longitudine di ogni citta'.
In tal modo, data una citta', puoi calcolare tutte le citta' che
stanno in un suo intorno.

 es. tutte le cittá nel raggio di 10Km, 20 km, etc.
Per effettuare operazioni di questo tipo ("geoprocessing" in gergo) si
utilizzano applicazioni GIS (Geographic Information System) o nel tuo caso
GIS web. Sono applicazioni che permetteno di associare una cartografia
vettoriale ad un database ed eseguire su questo insieme di dati delle
interrogazioni alfanumeriche o spaziali.
Non so esattamente cosa devi fare tu ma credo che la soluzione suggeritati
da L'Ignorante (tabella con coordinata x e coordinata y) sia un'ottimo
compromesso.
ciao
Roberto

e perché mica sono tanti per un db mysql
e' un metodo, comunque, errato di affrontare il problema, dato che
l'occupazione del database cresce polinomialmente.

 Io semplicemente... non ho capito :-)
In effetti è piuttosto semplice e aggiungerei molto efficace.
Se ad ogni città hai associate le coordinate geografiche EST e NORD (anche
in un sistema di riferimento relativo) puoi tranquillamente calcolare la
distanza tra due città qualsiasi:
distanza = radice_quadrata((EST1-EST2)^2+(NORD1-NORD2)^2)
A questo punto basta fare una query sulla tua tabella impostando come
condizione che la distanza così calcolata sia minore del valore che vuoi.
Spero di essere stato chiaro.
ciao

 e perché mica sono tanti per un db mysql
Per il db magari no, per il poveraccio che deve inserirli... mi sa di
si` :)
Bye.

 
Forse può esserti utile
Doing Distance Calculation in PHP
http://www.phparch.com/discuss/index.php/f/18/0/
è il forum relativo ad un articolo apparso sulledizione 5/2003 di 
php|architect.
Tra l'altro quel numero è quello che ho potuto scaricare gratuitamente, 
con un pò di fortuna è ancora scaricabile.
-- 
        C                     F
  per fortuna il mio razzismo non mi fa guardare
          C                        F
  quei programmi demenziali con tribune elettorali

 l'occupazione del database cresce polinomialmente.
forse intendevi dire esponenzialmente?

forse intendevi dire esponenzialmente?
no: la dimensione e' del tipo n^2, cioe' polinomiale.
Se fosse stata, per esempio, del tipo 2^n, sarebbe stata esponenziale.

 Se fosse stata, per esempio, del tipo 2^n, sarebbe stata esponenziale.
ho imparato una parola nuova...

e perché mica sono tanti per un db mysql
In realtà sono la metà.
Milano-Torino è uguale a Torino-Milano per cui inutile inserirlo due
volte.
Infatti se avete visto alcune tabelle, come quella che c'è in fondo
agli atlanti stradali del TCI, sono fatte a triangolo.
Ovviamente bisogna aggiustare anche la query perché la prima delle due
città cercate potrebbe non essere nella prima colonna.
SELECT distanza WHERE (citta_a = '$citta_a' AND citta_b = '$citta_b')
OR (citta_a = '$citta_b' AND citta_b = '$citta_a')
Però a questo punto mi viene un dubbio:
meglio la query più complessa e la tabella ridotta della metà, o la
tabella più grande ma la query più semplice?

vuoi per cortesia spiegare il principio che hai esposto?
Grazie


condizione che la distanza così calcolata sia minore del valore che vuoi.
Avevo pensato pure io ad un sistema simile, però mi sono venuti in
mente due problemi.
Il primo è che la Terra non è piatta, per cui, a meno di non riferirsi
ad un'area ristretta per la quale l'errore risulti trascurabile, penso
che si debba tenerne conto.
Il secondo è che così si possono calcolare solo le distanze in linea
d'aria.
Se quelle che servono sono le distanze stradali questo sistema non
funziona.


Se servono le distanze stradali il problema diventa molto più complesso,
in quanto non esiste una sola strada che congiunge due località. A questo
punto penso che si passi agli algoritmi sui grafi.
ciao.
Matteo
-- 
Matteo Moro - mBG su Azzurra IRC Network
Web Personale - 
www.MatteoMoro.net
ICQ#: 91902715, JID: 
emme...@actualize.it

 funziona.
Ah beh...questo è un'altro problema! A questo punto, che io sappia, devi 
fare uso delle tecnologie GIS che ho citato nell'altro post ma la cosa si fa 
piuttosto complicata. Se ti interessa qualche risorsa cerca con Google: 
MapServer. E' un applicativo WebGIS open source ma non è molto intuitivo da 
usare soprattutto se sei a digiuno in materia.
ciao e buon lavoro

 opportune formule calcolare le distanze.
La trigonometria é stato sempre il mio punto debole :-(
Il mio problema é un po' rognoso, perché l' area su cui lavoro é una zona
ristretta ca. 30-40 Km di raggio, e il territorio si espande su dislivelli
di ca. 1000 m, cio' che sembra vicino sulla cartina, in realtá considerando
i vari dislivelli sono distanti parecchi km, naturalmente potrei includere
nel calcolo
anche la differenza per altitudini, da poter svolgere il calcolo (sempre
lineare) su 3 Dimensioni, magari
aggiungendo, dipende dai tragitti, una certa percentuale ai dislivelli.
Credo che opto per questa soluzione, anche se non troppo precisa, in fondo
il
10-20% di errore é accettabile.
Ringrazio tutti per il vostro tempo, e continuate cosí
un saluto e alla prossima....
Jeey

Grazie
intendevo esprimere la relazione tra il numero di elementi (le citta')
e la dimensione del database sottostante.
Utilizzando il primo metodo proposto (quello che porta ad una
dimensione dell'ordine di n^2), ottieni una dimensione del database
che cresce, al variare di n (cioe' al variare del numero delle
citta'), come un polinomio di secondo grado (che, graficamente, e' una
parabola).
Utilizzando, invece, il metodo latitudine/longitudine, ottieni una
crescita del database che e' lineare (crescita rappresentata da una
linea retta). La dimensione e' esattamente n (che e' il numero delle
citta').
Detto in termini spiccioli, all'aumentare del numero di citta', il
metodo di complessita' polinomiale ci porta ad avere un database che
cresce, in dimensioni, molto piu' velocemente del secondo metodo
(lineare).
Le categorie di complessita' sono:
logaritmica:	O(log n) (logaritmo in base k)
lineare:	O(n)
polinomiale:	O(n^k) con k>1
esponenziale:	O(e^n), O(2^n), ecc...
fattoriale:	O(n!) e O(n^n)
Quanto ho preso? :-)

> Quanto ho preso? :-)
30
Grazie, mi č piaciuto molto quello che hai scritto.
ogni tanto ci scappa anche qlc di buono nei ng ;)
Sat_


Non saprei,
io ad esempio per andare al lavoro faccio 25 Km all'andata e 30 al ritorno!
(grazie al cielo ancora per pochi giorni) però secondo me dato che si tratta
di percorsi stradali sarebbe opportuno salvare le due occorrenze,
se ad esempio un'autorstrada dovrebbe essere chiusa nella direzione to->mi,
pregiudicheresti il comportamento anche di mi->to.
ma magari sono un po' troppo para.
Ciao

> se ad esempio un'autorstrada dovrebbe essere chiusa nella direzione
^^^^^^             ^^^^^^^^^^^^^^^^^^^^^
Sì, ho la febbre a 39, abbiate pietà.
non mi finisce più questa influenza :/


scusa, ma in 30/40 km di raggio ci sono circa un centinaio di città? non mi
torna qualcosa

 torna qualcosa
Si , hai ragione le cittá sono solo una 10cina, io debbo
prendere in considerazione anche i paesini.
tanto per interderci , sono in svizzera nella zona di Lucerna
e se scrivo 30-40km di raggio, vuol dire un diametro
di circa 70 km.


Scusa, ma tu che dati hai in mano? Dove reperisci i parametri? Come farai a 
sapere le distanze effettive tra 2 punti? O forse stai anche cercando di 
ottenere questi dati in automatico da un db già esistente? 

 ottenere questi dati in automatico da un db già esistente?
Magari avessi dei dati giá esistenti, a questi ci sta pensando la mia
collaboratrice armata di righello e cartina. Dividendo accuratamente
i luoghi posti in montagna e pianura, un lavoraccio....

 i luoghi posti in montagna e pianura, un lavoraccio....
Se proprio vuoi calcolarti le corrette distanze stradali tra due località
fai prima a usare un servizio come 
www.mappy.it
. Inserisci punto di arrivo,
punto di partenza e ti fornisce il percorso stradale più breve con la
distanza da percorrere. Senz'altro più veloce e più efficace che usare la
cartina.
ciao

 schrieb im Newsbeitrag
news:mGHTd.958382$35.35...@news4.tin.it...

Scusa ma mica ti da anche le coordinate ?

> Scusa ma mica ti da anche le coordinate ?
Non mi ricordo può essere.
Vai a vedere...