2014-11-05 14 views
15

Sto lavorando a un'app con funzionalità RADAR come l'app LOVOO. Non ho esperienza di lavoro su CoreLocation e altri framework basati sulla posizione.Radar come l'app LOVOO con dispositivo di scorrimento

Sarebbe molto apprezzato se poteste suggerirmi come si può ottenere questo risultato. Quali framework dovrei usare e come procedere inizialmente.

Anche se la stessa domanda esiste già su SO qui la mia domanda è la stessa di Radar View like LOVOO ma non mi è utile per quale motivo lo sto chiedendo di nuovo.

ciò che io stesso ho provato finora è, ho valori lat e lungo di punti per tracciare e ho calcolato angolo e la distanza tra il punto centrale (la mia posizione) e un altro punto

- (float)angletoCoordinate:(CLLocationCoordinate2D)second { 

//myCurrentLocation is origin 

//second is point 

float lat1 = DegreesToRadians(myCurrentLocation.coordinate.latitude); 
float lon1 = DegreesToRadians(myCurrentLocation.coordinate.longitude); 

float lat2 = DegreesToRadians(second.latitude); 
float lon2 = DegreesToRadians(second.longitude); 

float dLon = lon2 - lon1; 

float y = sin(dLon) * cos(lat2); 
float x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(dLon); 
float radiansBearing = atan2(y, x); 
if(radiansBearing < 0.0) 
{ 
    radiansBearing += 2*M_PI; 
} 

return radiansBearing; 
} 


-(float)calculateXPointWithLoc:(ARGeoLocation *)loc andDelta:(float)delta{ 
float angle = radiansToDegrees(delta); 
float dpx = (([myCurrentLocation distanceFromLocation:loc.geoLocation])/1000); 

if(0<=angle<=90) 
    return viewRadar.center.x + sin(angle)*dpx ; 
else if(90<angle<=180) 
    return viewRadar.center.x + cos(angle-90)*dpx ; 
else if(180<angle<=270) 
    return viewRadar.center.x - cos(270-angle)*dpx ; 
else if(270<angle<360) 
    return viewRadar.center.x - sin(360-angle)*dpx ; 

return 0; 
} 

-(float)calculateYPointWithLoc:(ARGeoLocation *)loc andDelta:(float)delta{ 
float angle = radiansToDegrees(delta); 

float dpx = (([myCurrentLocation distanceFromLocation:loc.geoLocation])/1000); 



if(0<=angle<=90) 
    return viewRadar.center.y - cos(angle)*dpx ; 
else if(90<angle<=180) 
    return viewRadar.center.y + sin(angle-90)*dpx ; 
else if(180<angle<=270) 
    return viewRadar.center.y + sin(270-angle)*dpx ; 
else if(270<angle<360) 
    return viewRadar.center.y - cos(360-angle)*dpx ; 

return 0; 
} 

e poi

int i = 0; 
    for(ARGeoLocation *loc in coordinates){ 

    deltaAz = [self angletoCoordinate:loc.geoLocation.coordinate]; 
    x = [self calculateXPointWithLoc:loc andDelta:deltaAz]; 
    y = [self calculateYPointWithLoc:loc andDelta:deltaAz]; 

    [[plots objectAtIndex:i] setFrame:CGRectMake(x, y, DIAMETER_PLOT, DIAMETER_PLOT)]; 
    i++; 
    } 

io non sono sicuro se x ed y sono corretti o meno anche se sono corrette allora come posso cambiare questi valori con il cambiamento di valore del cursore.

+4

Ho creato una visualizzazione Radar simile LOVOO per iOS con slider. È disponibile su Github. https://github.com/abm-adnan/Radar – Adnan

+0

Questo è davvero fantastico .. Sarò sicuro del modo in cui l'hai fatto ma sì l'ho anche creato ma non lo rende pubblico a causa della NDA firmata con il mio cliente. Grazie – pankaj

+0

se hai bisogno di assistenza fammi sapere come posso aiutare. Grazie – Adnan

risposta

1

penso che la parola chiave qui è Geofencing.

Geofencing rappresenta l'attivazione automatica di un'azione se il dispositivo entra o esce da una determinata regione. Per il tuo caso, la tua azione è di mostrare i profili di quegli utenti che entrano nell'area del tuo radar.

Fondamentalmente è necessario calcolare una regione circolare (dato un raggio) e visualizzare tutti gli altri punti all'interno della vostra regione.

una volta ho trovato questo tutorial, che potrebbe insegnare come farlo da soli: http://www.raywenderlich.com/95014/geofencing-ios-swift

Spero che aiuta!