- Home
- Categorie
- Coding e Sistemistica
- Coding
- Posizione tra due coordinate geografiche
- 
							
							
							
							
							
Posizione tra due coordinate geograficheSalve 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! 
 
- 
							
							
							
							
							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