Visualizzazione risultati 1 fino 13 di 13

Discussione: funzione che calcola distanza km tra le città

  1. #1
    Guest

    Predefinito funzione che calcola distanza km tra le città

    emm non ho sbagliato sezione


    sto facendo uno paginetta php che generi un pdf con un documento
    qui come viene
    http://swedenfox.altervista.org/pdf_sample/ns1.php

    la mia curiosità è sapere come potrei sviluppare una funzione del genere

    function ($partitoa,$disputataa,$distanzatralecittàinkm)

    che mi "returna" la distanza in km tra le due città


    $partitoda e $disputataa mi carica un array di città

    mi potete aiutare ? come potrei studiare la cosa ?
    è naturale che la distanza viene calcolata in base ad ogni città di partenza


    thnx

  2. #2
    Guest

    Predefinito

    Cerca un servizio che ti permetta di farlo... altrimenti mappe, grafi e tanto sbattimento...

  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da ivano85 Visualizza messaggio
    Cerca un servizio che ti permetta di farlo... altrimenti mappe, grafi e tanto sbattimento...

    che servizio ? .... non voglio mica googlemap ...non mi interessa avere ne le mappe ne le distanze aeree ma ho la necessità di avere distanze impostate da me

    voglio solo una funzione che data per esempio:
    Partito da : Messina
    Disputata: Milazzo
    $km = 80;

    Partito da: Milazzo
    Disputata: Taormina
    prende un valore che puo' essere di un array ()
    $km = 180;

  4. #4
    L'avatar di seneca
    seneca non è connesso Super Moderatore
    Data registrazione
    18-12-2004
    Residenza
    la Città Eterna
    Messaggi
    8,376

    Predefinito

    Non ho capito una cosa: le distanze in base a cosa si calcolano?
    Sono già tutte disponibili o vanno desunte da "incroci" con altre città? Oppure come?


    -- Aut Roma Aut Nihil!

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da Swedenfox Visualizza messaggio
    che servizio ? .... non voglio mica googlemap ...non mi interessa avere ne le mappe ne le distanze aeree ma ho la necessità di avere distanze impostate da me

    voglio solo una funzione che data per esempio:
    Partito da : Messina
    Disputata: Milazzo
    $km = 80;

    Partito da: Milazzo
    Disputata: Taormina
    prende un valore che puo' essere di un array ()
    $km = 180;
    Allora... se ti interessa farlo tra un numero molto ristretto di città e con la distanza in linea d'aria, puoi usare dei vettori per indicare la posizione delle città e quindi calcolare la loro distanza (in linea d'aria). Altrimenti, o trovi un servizio che date due città ti dia la distanza, o il lavoro è piuttosto improponibile.

  6. #6
    Guest

    Predefinito

    Citazione Originalmente inviato da ivano85 Visualizza messaggio
    Allora... se ti interessa farlo tra un numero molto ristretto di città e con la distanza in linea d'aria, puoi usare dei vettori per indicare la posizione delle città e quindi calcolare la loro distanza (in linea d'aria)
    come già espresso non mi serve la distanza in linea d'aria ma una distanza espressa da me che fa riferimento ad una tabella kilometrica

    Citazione Originalmente inviato da ivano85 Visualizza messaggio
    . Altrimenti, o trovi un servizio che date due città ti dia la distanza, o il lavoro è piuttosto improponibile.
    non mi interessano altri servizi ma solo che si prenda un valore km dettato da me


    Non ho capito una cosa: le distanze in base a cosa si calcolano?
    Sono già tutte disponibili o vanno desunte da "incroci" con altre città? Oppure come?
    tutte già disponibili, per esempio le potrei mettere su un array
    [CODE]
    $cities = array('Messina','Spadafora','Milazzo','S filippo del mela','Barcellona PdG','Capo d orlando','Catania');

  7. #7
    Ospite Guest

    Predefinito

    potresti creari un array e poi caricare le distanze.....

    Codice PHP:
    //Normalizzo; le città saranno inserite come numeri.
    $città=array("Roma", "Napoli", "Ferrara", "Messina");

    function
    distanza($from, $to){
    $dist=0;

    if(
    $from==$to){
    $dist=0;
    }else{
    include(
    "distanze.php");
    if(isset(
    $distanze[$from][$to])){
    $dist=$distanze[$from][$to];
    }elseif(isset(
    $distanze[$to][$from])){
    $dist=$distanze[$to][$from];
    }else{
    $dist=false;
    }
    }

    return
    $dist;
    }
    distanze.php
    Codice PHP:
    $distanze=array();
    $distanze[0]=array();
    $distanze[0][1]=1250; // da Roma a napoli
    $distanze[0][2]=2054; // da Roma a Ferrara
    etc...
    Distanze come $distanze[0][2] e $distanze[2][0] possono essere dichiarate anche solo una volta; se lo script non ne trova una, proverà a vedere se esiste l'altra.

    Uso:
    Codice PHP:
    if(distanza($_GET['from'], $_GET['to'])){
    echo
    "Da ".$citta[$_GET['from']]." a ".$citta[$_GET['to']]." ci sono ".distanza($_GET['from'], $_GET['to'])." Km";
    }else{
    echo
    "La distanza non è presente nel database!";
    }
    PS: nn lo ho provato ma dovrebbe andare....
    PS2: puoi anche integrarlo con mysql usando mysql_fetch_array(MYSQL_ENUM)

  8. #8
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Se ho capito bene:
    - hai già a disposizione tutte le città di riferimento che ti servono
    - conosci già quali sono le città con un collegamento diretto e quale sia la lunghezza di questo collegamento
    - conosci anche quali sono le città che non hanno un collegamento diretto e che per raggiungerle è necessaria una tappa intermedia
    - sai con precisione qual è la città di partenza e quale quella di arrivo dell'itinerario

    Se è così, con quella funzione non devi fare altro che implementare l'Algoritmo di Dijkstra: trovi un esempio completo nella pagina che ti ho collegato. Implementarlo non è difficile... se non ci riesci si può provare a sviluppare qualcosa qui di seguito.

    [4 matt93] Forse il tuo codice funziona solo se è presente il collegamento diretto... ma se non c'è, non è detto che non esista un percorso per altre strade...

    Stammi bene...
    Ultima modifica di dementialsite : 06-07-2008 alle ore 15.03.11
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  9. #9
    Ospite Guest

    Predefinito

    si, con l'algoritmo di dijkstra (un nome italiano no?!?!?! ) puoi calcolare la distanza più corta da una città ad un altra.


    Non ho capito una cosa: le distanze in base a cosa si calcolano?
    Sono già tutte disponibili o vanno desunte da "incroci" con altre città? Oppure come?
    tutte già disponibili, per esempio le potrei mettere su un array
    se non vuoi usare l'algoritmo di dij... e che so io quello che ho postato io è un'ottima soluzione; semplice e abbastanza efficace.

  10. #10
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    potresti semplicemente implementare una tabella con id|partenza|destinazione|distanza

    dove inserisci tutti i record con le distanze tra le città che vai ad inserire nel tuo modulo(form)..

    avrai per 10 città risulteranno 9! = 45 combinazioni semplici quindi 45 record per gestire le distanze tra 10 città differenti.

    questo puoi farlo imponento che

    ..form..
    campo1 = origine campo2 = arrivo
    ..invio..

    controllo che esista la coppia origine-arrivo con un semplice

    query1 = select.... where partenza = 'origine' and destinazione = 'arrivo'
    fai i relativi controllo e se esiste imposti una variabile di tipo array e di nome ris_ricerca a false o a true per la prima ricerca.
    quindi se esiste
    $ris_ricerca['query1'] = true;
    else
    $ris_ricerca['query1'] = false;

    fai la stessa cosa invertendo origine-arrivo
    query2 = select.... where partenza = 'arrivo' and destinazione = 'origine'
    quindi se esiste
    $ris_ricerca['query2'] = true;
    else
    $ris_ricerca['query2'] = false;

    e poi vai a controllare quale dei due indici abbia il valore settato a true e da li ne recuperi dalla tabella la distanza in km.

    questo è un metodo che ho pensato ora e molto semplice da sviluppare, o meglio, e semplicemente un recupero di dati dal database.

    avevo pensato a recuperare le distanze lavorando su assi cartesiani e tramite un punto di riferimento e due vettori che partono da questo punto, calcolarne tramite l'angolo e la lunghezza il terzo vettore che è appunto la distanza tra le due città, però poi ho pensato che dato che è una cosa abbastanza difficile da implementare, sinceramente è la prima volta che mi sorge un problema del genere, sarebbe stata un cosa troppo azzardata per le richieste fatte dall'utente :)

    mah, spero che ti possa essere utile.

    ciao
    Ultima modifica di Xsescott : 07-07-2008 alle ore 14.35.36
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  11. #11
    Balloto non è connesso Neofita
    Data registrazione
    02-10-2004
    Messaggi
    8

    Predefinito

    Potresti fare tutto in automatico senza database se anzichè chiedere la città chiedi la latitudine e longitudine (magari metti un link ad un sito che ti permetta di avere tali dati per ogni città).

    Io ho fatto la formula in topografia..è un macello ti avverto XD!

  12. #12
    Guest

    Predefinito

    grazie a tutti ,

    credo che per il mio semplice utilizzo usero' lo script di matt93 , alla fine non mi interessa un calcolo delle distanze fra i nodi (per ora)

    anche se mi piacerebbe successivamente implementare l'algoritmo suggerito da dementialsite per rendere lo script completo (includere delle soste o diversi percorsi )

    Grazie mille a tutti

    se ho problemi vi posto

  13. #13
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    bhe, allora dai un occhiata anche a questo ottimo algoritmo:
    http://it.wikipedia.org/wiki/Algoritmo_greedy

    ciao
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •