Magazine Informatica

Calcolare la regione di coordinate coperta da un dato raggio

Creato il 03 agosto 2010 da Malcommac

Calcolare la regione di coordinate coperta da un dato raggio

Piccolo tip per i programmatori. La funzione qui sotto permette calcolare la regione di coordinate (coppia di coordinate max e min) realizzata a

partire da un punto (lat,long) e che si estende per un dato raggio. I parametri richiesti sono molto semplici e, nell’ordine, descrivono il centro della regione e il raggio. Il terzoparametro si occupa di manipolare, qualora fosse necessario, le coordinate espresse in kilometri o miglia.

</p>
<p>+ (CGRadius) coveredRegionWithCenter:(CLLocationCoordinate2D) center radius:(CGFloat) regradius inKilometers:(BOOL) unitAsKm {</p>
<p>CGRadius region;</p>
<p>region.center = center;</p>
<p>// unit conversion if needed</p>
<p>CGFloat radius = (unitAsKm ? (regradius*0.621371192) : regradius);</p>
<p>CGFloat dpmLAT = (1 / 69.1703234283616);</p>
<p>// latitude calculation</p>
<p>CGFloat usrRLAT = dpmLAT * radius;</p>
<p>// longitude calculation</p>
<p>CGFloat mpdLON = 69.1703234283616 * cos(center.latitude * (M_PI/180));</p>
<p>CGFloat dpmLON = 1 / mpdLON;</p>
<p>CGFloat usrRLON = dpmLON * radius;</p>
<p>region.minCoordinate.latitude = center.latitude - usrRLAT;</p>
<p>region.minCoordinate.longitude = center.longitude - usrRLON;</p>
<p>region.maxCoordinate.latitude = center.latitude + usrRLAT;</p>
<p>region.maxCoordinate.longitude = center.longitude + usrRLON;</p>
<p>return region;</p>
<p>}</p>
<p>

Una funzione del genere può essere utile nel caso in cui si debbano verificare quali punti di coordinate di un insieme sono all’interno del raggio proposto. Il risultato della funzione è una struttura C CGRadius definita come:

</p>
<p>typedef struct</p>
<p>{</p>
<p>CLLocationCoordinate2D center;</p>
<p>CLLocationCoordinate2D minCoordinate;</p>
<p>CLLocationCoordinate2D maxCoordinate;</p>
<p>} CGRadius;</p>
<p>

Ritornare alla prima pagina di Logo Paperblog