Iphone MKMapView-如何获取&;显示现有地址列表中的临近地址/位置的注释接点

Iphone MKMapView-如何获取&;显示现有地址列表中的临近地址/位置的注释接点,iphone,ios,objective-c,mkmapview,mapkit,Iphone,Ios,Objective C,Mkmapview,Mapkit,我对map kitMKMapView应用程序非常陌生 我有一个组织中1000个成员的地址列表。 我已根据所有成员的地址获得坐标 使用-(CLLocationCoordinate2D)地理编码使用地址:(NSString*)地址s方法 并在地图视图中显示所有1000个成员的注释 但现在我的要求是只在我附近显示当前位置成员的位置仅两种方式 离我更近的前20名成员 我周围50公里范围内的所有成员名单 如何实现这两种方案,您必须通过 CLLocation *memberlocation = [[CL

我对map kit
MKMapView
应用程序非常陌生

我有一个组织中1000个成员的地址列表。

我已根据所有成员的地址获得坐标

使用
-(CLLocationCoordinate2D)地理编码使用地址:(NSString*)地址
s方法

并在地图视图中显示所有1000个成员的注释

但现在我的要求是只在我附近显示当前位置成员的位置
两种方式

  • 离我更近的前20名成员
  • 我周围50公里范围内的所有成员名单

  • 如何实现这两种方案,您必须通过

    CLLocation *memberlocation = [[CLLocation alloc] initWithLatitude:memberlat longitude:memberlong];
    
    CLLocation *yourcurrentlocation = [[CLLocation alloc] initWithLatitude:currentlocationlat longitude:currentlocationlong];
    
    CLLocationDistance distance = [memberlocation distanceFromLocation:yourcurrentlocation];
    
    然后使用它们,您可以找到最近的成员,并使用您自己的逻辑,为您所需的解决方案编写代码

    如果您认为比较1000个地址和自我位置需要时间,那么将自我位置lat long发送到服务器webservice,在那里您有所有lat long的成员,在webservice中您必须使用以下查询来查找最近的20个成员

    SELECT top (20) id, ( 6371 * acos( cos( radians(13.0610) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(80.2404) ) + sin( radians(13.0610) ) * sin( radians( lat ) ) ) ) AS distance 
    FROM markers  ORDER BY distance;
    

    这里不是13.0610,而是你必须通过你的自定位纬度,80.2404是经度,正如前面所解释的,你不这么认为,通过自定位比较1000个地址会降低性能。@ArpitKumar,有没有其他方法可以在不比较地址和自定位的情况下找到距离?@Nazik,目前没有,我没有其他办法。“但我正试图找到一个更好的方法。”纳兹克,这正是我所期待的。好主意,通过服务器端查询,我们可以轻松解决它+1用于保存1000个列表地址的数据的形式或场景。使用Sqlite或核心数据,或者只是在对象模型中维护服务器端?@ArpitKumar使用Sqlite我已经存储了AddressOK,太好了。现在,您可以在iphone编程端使用@Nazik answer。您是否满意或正在寻找其他内容。