Calcolare la regione di coordinate coperta da un dato raggio

Creato il 03 agosto 2010 da Malcommac

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>