Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1

    Funzione per ogni punto nel database

    Buongiorno, dovrei calcolare la distanza tra tutti i punti geografici che ho nel database.
    Il problema è che la funzione che ho io calcola la distanza tra 2 punti, come potrei fare per calcolarla per tutti i punti che ho nella tabella?

    Fate conti che la tabella è così strutturata:

    id1 latitude longitude
    id2 latitude longitude
    id3 latitude longitude
    e così via...

    Io dovrei calcolare la distanza tra 1e2, poi tra 2e3 e successivi in modo da avere la distanza totale, esiste un modo? (i punti nel database non sono un numero fisso e non fanno parte di una linea retta).
    Grazie in anticipo!

  2. #2
    nessuno? ma non spi può proprio fare?

  3. #3
    la prima cosa che mi viene in mente:
    Codice PHP:
    $distanza=0;
    $result mysql_query("SELECT lat, lng FROM tabella ORDER BY id asc"$link); /*ammesso che i punti siano ordinati secondo l'id e abbiano campi nel db lat e lng*/

    $num_rows mysql_num_rows($result); /*trovo quanti punti ci sono*/
    $point1=mysql_fetch_assoc($result); /*prendo il punto 1 preventivamente*/ 

    for($i=2;$i<=$num_rows;$i++){ /*per tutti i punti partendo dal secondo*/
        
    $point2=mysql_fetch_assoc($result); /*prendo il punto 2*/
        
    $distanza+=calcoladistanza($point1['lat'],$point1['lng'],$point2['lat'],$point2['lng']); /*sistema in base al prototipo della tua funzione che calcola la distanza*/
        
    $point1=$point2/*mi ricordo di quest'ultimo punto e lo uso come primo al passo successivo*/


  4. #4
    Grazie mille sei stato gentilissimo!

    Sono un principiante col php... non so mica integrarlo con la mia funzione...
    te la scrivo se hai tempo mi faresti vedere?

    Codice PHP:
    $distanceValue rad2deg(acos(sin(deg2rad($latitude1))*sin(deg2rad($latitude2))+cos(deg2rad($latitude1))*cos(deg2rad($latitude2))*cos(deg2rad($longitude1-$longitude2))))*69.09
    Se non ti rompe mi diresti anche come ricavare la distanza maggiore tra tutte quelle che ha calcolato lo script?

  5. #5
    lol questi son gli eserizi che mi facevano fare in c il primo anno di uni :P
    Codice PHP:
    $distanza_tot=0;
    $distanza_max=0
    $result mysql_query("SELECT lat, lng FROM tabella ORDER BY id asc"$link); 

    $num_rows mysql_num_rows($result); 
    $point1=mysql_fetch_assoc($result);  

    for(
    $i=2;$i<=$num_rows;$i++){  
        
    $point2=mysql_fetch_assoc($result); 

        
    $distanza=calcoladistanza($point1['lat'],$point1['lng'],$point2['lat'],$point2['lng']);
        
    $distanza_tot+=$distanza;
        if(
    $distanza>$distanza_max$distanza_max=$distanza;
        
    $point1=$point2;


  6. #6
    basta aggiungere in testa al codice di cui sopra:
    Codice PHP:
    function calcoladistanza($latitude1,$longitude1,$latitude2,$longitude2)
     {
     
    $distanceValue rad2deg(acos(sin(deg2rad($latitude1))*sin(deg2rad($latitude2))+cos(deg2rad($latitude1))*cos(deg2rad($latitude2))*cos(deg2rad($longitude1-$longitude2))))*69.09;
    return 
    $distanceValue;


  7. #7
    Grazie, ho provato così:

    Codice PHP:
    $distanza_tot=0;
     
    $distanza_max=0;
     
    $result mysql_query("SELECT latitude, longitude FROM TRK ORDER BY id asc");

     function 
    calcoladistanza($latitude1,$longitude1,$latitude2,$longitude2) { 
    $distanceValue rad2deg(acos(sin(deg2rad($latitude1))*sin(deg2rad($latitude2))+cos(deg2rad($latitude1))*cos(deg2rad($latitude2))*cos(deg2rad($longitude1-$longitude2))))*69.09
    return 
    $distanceValue


    $num_rows mysql_num_rows($result);
    $point1=mysql_fetch_assoc($result); 
    for(
    $i=2;$i<=$num_rows;$i++)

    $point2=mysql_fetch_assoc($result); 
    $distanza=calcoladistanza($point1['latitude'],$point1['longitude'],$point2['latitude'],$point2['longitude']); $distanza_tot+=$distanza
    if(
    $distanza>$distanza_max$distanza_max=$distanza$point1=$point2
    }

    echo 
    "Distanza Totale: ",$distanza_max
    Però non calcola in modo giusto, infatti quei latitude1 longitude1 latitude2 ecc... ero io che nel caso di prima in cui erano 2 punti li impostavo a mano, adesso non credo che abbiano senzo...

    Cosa è che non ho capito?

  8. #8
    Gli argomenti della funzione devono avere lo stesso nome di quelli che compaiono dentro la funzione stessa, e il nome nn ha importanza. Avrei anche potuto chiamarli $a,$b,$c,$d. Serve solamente a dire il primo parametro che poi passerò lo uso per questo, il secondo per quello, etc. Ora, io ne so ben poco di "geoposizionamento", ma facendo pescare 5 punti da un array invece che da db la cosa mi pare funzionare. ovvero con questi dati:

    Codice PHP:
    $arr[1][latitude]=45;$arr[1][longitude]=1;
    $arr[2][latitude]=45;$arr[2][longitude]=2;
    $arr[3][latitude]=45;$arr[3][longitude]=3;
    $arr[4][latitude]=45;$arr[4][longitude]=5;
    $arr[5][latitude]=45;$arr[5][longitude]=1
    ottengo questo output, che mi pare almeno coerente. poi se quel numero sono metri o anni-luce o altro nn lo so.

    45,1|45,2
    Distanza 2: 48.853697470923
    45,2|45,3
    Distanza 3: 48.853697470923
    45,3|45,5
    Distanza 4: 97.70553459517
    45,5|45,1
    Distanza 5: 195.39618344163
    Distanza Max: 195.39618344163
    ovvero da 45,1 a 45,2 c'è un tot, da 45,2 a 45,3 la stessa distanza (buono no?) da 45,3 a 45,5 il doppio di prima (ribuono no?) e poi se faccio coincidere l'ultimo punto con quello di partenza la distanza è la somma delle tre prima (riribuono no?) ...

    Edit: controllando con google earth peraltro paiono proprio essere miglia quella distanza...

  9. #9
    in effetti a logica torna tutto... ti provo a dire i primi 5 punti del database ordinati per id magari capisci cosa non va..

    latitude longitude

    46.5632 11.9328
    46.563 11.9324
    46.563 11.9322
    46.5628 11.9317
    46.5626 11.9314
    46.5625 11.9312

    PS: ti ringrazio nuovamente, hai molta pazienza!

  10. #10
    ho questo:
    codice:
    46.5632,11.9328|46.563,11.9324
    Distanza 2: 0.023494322160431
    Distanza accumulata: 0.023494322160431 
    
    46.563,11.9324|46.563,11.9322
    Distanza 3: 0.0095007888301851
    Distanza accumulata: 0.032995110990616 
    
    46.563,11.9322|46.5628,11.9317
    Distanza 4: 0.027478676422342
    Distanza accumulata: 0.060473787412958 
    
    46.5628,11.9317|46.5626,11.9314
    Distanza 5: 0.019850142135901
    Distanza accumulata: 0.080323929548858 
    
    Distanza accumulata: 0.080323929548858 
    Distanza Max: 0.027478676422342
    Cosa c'è che nn va? è diverso dal tuo?

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.