• User Attivo

    Posizione tra due coordinate geografiche

    Salve ragazzi, ho una domandina alquanto strana.

    Vorrei sapere se è possibile calcolare la posizione tra due coordinate geografiche, rappresentata in gradi.

    Esempio...

    Le coordinate sono del tipo: 41,434 - 11,2302 / 41,989 - 11,898

    Il colosseo si trova a 123° dal Vaticano, poi io converto il 123° in Sud-Est...considerando il 360° dell'angolo giro.

    Soltanto che non riesco a trovare il modo di calcolare quanti gradi sono tra 1 posizione e l'altra.

    Avete qualche consiglio da darmi?

    Grazie in anticipo!


  • Super User

    Ciao, la domanda è più di geometrica che di programmazione.

    Mi sfugge nell'esempio dell'angolo tra Colosseo e Vaticano quale sia il vertice che consideri. Iniziando a leggere pensavo che ti riferissi al centro della Terra, ma 123° sono tanti Colosseo e Vaticano che sono relativamente vicini, evidentemente ho capito male...


  • User Attivo

    Ciao Claudio e grazie intanto per la risposta...

    I 123° che ho scritto erano un esempio...

    Era per far capire di cosa sto parlando....

    In ogni caso a me servirebbe, dati due punti e due coppie di coordinate, capire a quanti Gradi stanno uno dall'altro....

    Una volta calcolati i gradi, posso facilmente stabilire se A è a S-E o a N-W del punto B, e viceversa... 🙂

    Più chiaro adesso?


  • Super User

    Ripeto quanto ho detto prima, qual è il vertice dell'angolo che consideri?

    Due punti nello spazio (o nel piano) non individuano un angolo, ma tuttalpiù il segmento che li congiunge.

    Ci vogliono 3 punti, di cui uno vertice, per definire un angolo.


  • Super User

    Per maggiori chiarimenti ti consiglio di leggere questo
    http://it.wikipedia.org/wiki/Sistema_di_coordinate_polari

    Nel caso delle coordinate polari si prende come riferimento non 3 punti, ma il centro e un sistema cartesiano.


  • User Attivo

    Guarda quest'immagine...

    poandrea.com/mappa.png

    Considerando il punto A: Roma e il punto B: L'Acquila....possiamo dire che L'Acquila si trova a 30° Rispetto a Roma....

    Ora mi chiedo...c'è una formula per calcolare il valore dell'angolo...avendo le due coordinate dei due punti???


  • Super User

    Dunque consideri un sistema cartesiano, immagino con l'asse x parallelo all'equatore.

    Qui trovi tutte le formule per calcolare l'angolo
    http://it.wikipedia.org/wiki/Rappresentazione_dei_numeri_complessi
    l'argomento è differente ma la situazione è identica.

    La formula è semplicissima, in quanto devi calcolare l'arcotangente del rapporto tra la differenza di coordinate y e la differenza di coordinate x.

    Il problema è che devi capire in quale quadrante ti trovi per determinare univocamente l'angolo, in quanto avrai sempre soluzioni possibili doppie.
    Perciò ti rimando a quella pagina di Wikipedia che spero potrà chiarirti le idee.


  • User Attivo

    Intanto grazie mille per la segnalazione.

    Ho provato a mettere in pratica quello che mi hai detto.. e sono arrivato a questa formula:

    [php]
    $lat1="41.8880";
    $lat2="41.794";
    $lon1="12.25";
    $lon2="12.5044";
    echo $dist=atan(($lon1-$lon2)/($lat1-$lat2));
    [/php]Con Risultato: -1.2168590385299

    il risultato ottenuto però...in che unità di misura mi viene fuori??

    Poi confrontando il mio risultato con quello ottenuto in questa pagina:

    sunearthtools.com/dp/tools/distance.php

    noto che è molto diverso, in quanto a loro viene: 116.38°

    Grazie ancora per l'aiuto.


  • User Attivo

    Ciao Amistat,
    l'angolo ti occorre per misurare la distanza sulla superficie?


  • User Attivo

    No quello già lo faccio...mi occorre per definire la posizione di B rispetto ad A...


  • User Attivo

    Ciao Amistat,

    la funzione atan restituisce il valore dell' angolo espresso in radianti.

    Per ottenere il valore in gradi devi moltiplicare il valore ottenuto per 180° e dividere per pi-greco (3,14159 26535 89793...).

    Inoltre rimane il problema anticipato da Claudio e cioè che la tangente di angoli che differiscono per 180° è la stessa. Quindi calcolando l'arcotangente l'angolo che ottieni potrebbe non essere quello giusto.

    Se non sbaglio dovresti aggiungere 180° al risultato finale se la differenza tra le latitudini è negativa.

    [php]$lat1="41.8880";
    $lat2="41.794";
    $lon1="12.25";
    $lon2="12.5044";
    $dist=atan(($lon1-$lon2)/($lat1-$lat2))*180.0/3.141592653589793;
    if (($lat1-$lat2) < 0) then $dist+=180.0;[/php]

    :ciauz:


  • User Attivo

    Ciao OlaOla, e grazie per la risposta...

    Ho applicato la tua formula, ma credo ci siano ancora dei problemini...

    Con riferimento sempre alla pagina postata in precedenza, ho incrociato i due punti....cercando di ottenere gli stessi risultati sia con lo script realizzato, sia con la pagina segnalata:

    Vado a elencare i test..

    [PHP]
    $lat1="41.8880";
    $lat2="41.794";
    $lon1="12.25";
    $lon2="12.5044";
    $dist=(atan(($lon1-$lon2)/($lat1-$lat2))*180.0)/3.141592653589793;
    if ($lat1-$lat2 < 0)
    $dist+=180;
    echo $dist;
    [/PHP]

    Risultato: -69.72088717011

    Mentre con la pagina: 116.38

    [PHP]
    $lat2="41.8880";
    $lat1="41.794";
    $lon2="12.25";
    $lon1="12.5044";
    $dist=(atan(($lon1-$lon2)/($lat1-$lat2))*180.0)/3.141592653589793;
    if ($lat1-$lat2 < 0)
    $dist+=180;
    echo $dist;
    [/PHP]

    Risultato: 110.27911282989

    Mentre con la pagina: 296.38

    Si nota che i due risultati, siano diversi di circa 180° (che ci sia uno scarto di una decina di gradi non mi importa)

    Per caso il +180 va fatto a prescindere?


  • User Attivo

    PS: ho risolto così

    [php]
    $lat2="41.8880";
    $lat1="41.794";
    $lon2="12.25";
    $lon1="12.5044";
    $dist=(atan(($lon1-$lon2)/($lat1-$lat2))*180.0)/3.141592653589793238462643383279502884197169399375105820974944592;
    if(($lat1-$lat2)<0)
    $dist=$dist+180;
    if(($lon1-$lon2)<0 && ($lat1-$lat2)>0)
    $dist=$dist+360;
    if(($dist>'0' && $dist<'20') || ($dist<'360' && $dist>'340'))
    $pos='Nord';
    if($dist>'20' && $dist<'70')
    $pos='Nord-Est';
    if($dist<'340' && $dist>'290')
    $pos='Nord-Ovest';
    if($dist<'290' && $dist>'250')
    $pos='Ovest';
    if($dist>'70' && $dist<'110')
    $pos='Est';
    if($dist>'110' && $dist<'160')
    $pos='Sud-Est';
    if($dist<'250' && $dist>'200')
    $pos='Sud-ovest';
    if($dist<'200' && $dist>'160')
    $pos='Sud';
    [/php]


  • User Newbie

    Ho una domanda simile a quella di Amisat ma non so come postarla , se non rubando uno spazio risposta in questa discussione .
    L'Amministratore può indicarmi come fare ?
    Grazie mille