我正在开发一款具有RADAR功能的应用程序,就像LOVOO应用程序一样。我没有使用CoreLocation和其他基于位置的框架的经验。
如果你能告诉我如何实现这一目标,我们将不胜感激。 我应该使用哪些框架以及如何最初进行。
虽然SO上已存在同样的问题,但我的问题与Radar View like LOVOO相同,但对我来说没有用,这就是我再次提出这个问题的原因。
到目前为止我自己尝试过的是,我有点和长点值来绘制,我计算了中心点(我的位置)和其他点之间的角度和距离
- (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;
}
然后
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++;
}
我不确定x和y是否正确,如果它们是正确的,那么我如何通过更改滑块值来更改这些值。
答案 0 :(得分:1)
我认为此处的关键字是 Geofencing 。
Geofencing是指您的设备进入或离开某个区域时自动触发操作。对于您的情况,您的操作是显示进入雷达区域的用户的个人资料。
基本上你需要计算一个圆形区域(给定半径)并显示你所在区域内的所有其他点。
我曾经发现这个教程可以教你如何自己做: http://www.raywenderlich.com/95014/geofencing-ios-swift
我希望它有所帮助!