- Home
- Categorie
- Coding e Sistemistica
- PHP
- Posizione tra due coordinate geografiche
-
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...
-
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?
-
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.
-
Per maggiori chiarimenti ti consiglio di leggere questo
http://it.wikipedia.org/wiki/Sistema_di_coordinate_polariNel caso delle coordinate polari si prende come riferimento non 3 punti, ma il centro e un sistema cartesiano.
-
Guarda quest'immagine...
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???
-
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.
-
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.2168590385299il 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.
-
Ciao Amistat,
l'angolo ti occorre per misurare la distanza sulla superficie?
-
No quello già lo faccio...mi occorre per definire la posizione di B rispetto ad A...
-
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]
-
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?
-
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]
-
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