2014-11-05 12 views
15

Pracuję nad aplikacją, która ma funkcjonalność RADARu, podobnie jak aplikacja LOVOO. Nie mam doświadczenia w pracy z CoreLocation i innymi frameworkami opartymi na lokalizacji.Radarowa aplikacja LOVOO z suwakiem

Byłbym bardzo wdzięczny, gdybyś mógł zasugerować mi, jak powinno to zostać osiągnięte. Jakie ramy należy użyć i jak postępować na początku.

Chociaż to samo pytanie już istnieje na SO tutaj moje pytanie jest takie samo jak Radar View like LOVOO, ale jego nie ma zastosowania dla mnie to dlaczego pytam go ponownie.

Co próbowałem się do tej pory, mam łac i długich wartości punktów do fabuły i mam obliczony kąt i odległość między punktem środkowym (Moja lokalizacja), a innym punkcie

- (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; 
} 

a następnie

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++; 
    } 

Nie jestem pewien, czy x i y są poprawne, czy też nie, jeśli są poprawne, to jak mogę zmienić te wartości przy zmianie wartości suwaka.

+4

Stworzyłem podobny LOVOO, taki jak widok Radar dla iOS z suwakiem. Jest dostępny na github. https://github.com/abm-adnan/Radar – Adnan

+0

To naprawdę świetne .. Na pewno wyglądam tak, jak ty to zrobiłeś, ale tak, hv również go utworzyłem, ale nie zrobił tego publicznie z powodu NDA podpisanego z moim klientem. Dzięki – pankaj

+0

jeśli potrzebujesz pomocy, daj mi znać, w czym mogę pomóc. Dzięki – Adnan

Odpowiedz

1

Myślę, że słowo kluczowe tutaj to Geofencing.

Geofencing to automatyczne wyzwalanie działania, jeśli urządzenie wchodzi lub wychodzi z określonego regionu. Dla Twojej sprawy Twoim zadaniem jest wyświetlanie profili tych użytkowników, którzy wchodzą w obszar twojego radaru.

Zasadniczo musisz obliczyć region okrągły (z uwzględnieniem promienia) i wyświetlić wszystkie pozostałe punkty w twoim regionie.

kiedyś uznał ten samouczek, który mógłby nauczyć jak to zrobić samemu: http://www.raywenderlich.com/95014/geofencing-ios-swift

Mam nadzieję, że to pomaga!

Powiązane problemy