Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:如何列出具有最近地理位置的位置集_Objective C_Ios_Geolocation_Geocoding - Fatal编程技术网

Objective c 目标C:如何列出具有最近地理位置的位置集

Objective c 目标C:如何列出具有最近地理位置的位置集,objective-c,ios,geolocation,geocoding,Objective C,Ios,Geolocation,Geocoding,我已经编制了一份包含经纬度信息的位置列表。我是否可以检查基于我的当前位置在表和地图视图中过滤和填充“最近”地理位置列表的最佳方法?(或用户输入的目的地)。也可以指出我感兴趣的半径是多少?e、 g.仅选择距离我所在位置5公里以内的所有最近书店等 谢谢你的建议 Zhen Hoe在导航中经常用于计算坐标之间的距离。是一个相当不错的距离计算资源,甚至有一个haversine的代码示例(尽管是Javascript) 如果您的位置列表相对较小(数百个,甚至更多),您可能只需遍历整个列表并计算每个位置与当前位

我已经编制了一份包含经纬度信息的位置列表。我是否可以检查基于我的当前位置在表和地图视图中过滤和填充“最近”地理位置列表的最佳方法?(或用户输入的目的地)。也可以指出我感兴趣的半径是多少?e、 g.仅选择距离我所在位置5公里以内的所有最近书店等

谢谢你的建议

Zhen Hoe

在导航中经常用于计算坐标之间的距离。是一个相当不错的距离计算资源,甚至有一个haversine的代码示例(尽管是Javascript)

如果您的位置列表相对较小(数百个,甚至更多),您可能只需遍历整个列表并计算每个位置与当前位置之间的距离

您可能会发现
-(CLLocationDistance)distance fromLocation:(const CLLocation*)location
非常有用

也许我遗漏了什么,但为什么不将您的位置添加到地图视图中,然后将地图放在用户当前位置或他们想要的位置的中心?MapKit将为您完成所有计算,并仅显示靠近中心的计算。用户可以通过放大和缩小来设置自己的半径。MapKit正是为了这个目的而高度优化的,这就是你可以实时看到“针雨”的方式

更新: 您也可以选择另一种方式:在地图上有注释后,您可以使用以下方式在地图上查询可见区域中的注释:

- (NSSet *)annotationsInMapRect:(MKMapRect)mapRect
从文档中:

此方法提供了检索地图特定部分中注释对象的快速方法。这种方法比自己在annotations属性中对对象进行线性搜索快得多


如果列表非常大,只有几千个,您可以使用dispatch_async对它们进行迭代,并在完成时通知一位代表。:)@Radek,是的,我的列表可能会非常大(1000+),即使我使用多线程,它是否会太慢?不,iPhone有一个快速处理器。@Mike,这听起来像我需要的:)。我能和你核实一下我怎么触发这个吗?我可以在启动时将所有注释添加到mapView(大约1000+),如何不显示所有1000条注释,而只显示用户位置附近的注释?我现在使用核心数据来存储我想要显示的所有位置的坐标。谢谢您可以使用setRegion:(以用户的loc为中心)指定地图的显示区域,地图将仅显示可见区域中的显示区域。设置范围以调整有效的缩放级别。@Mike,谢谢!我可以确认我应该如何实现该方法吗?我做了类似于NSSet*nearest=[self-annotationsInMapRect:self.mapView.frame]的事情;但这导致程序崩溃。我在这里做错了什么?您正在传递一个self.mapView.frame,它是一个CGRect(内部使用CGFloat),您需要传递一个MKMapRect(内部使用double)。在docs.P.S.中查找MKMapRect。无论何时你说“它崩溃了”,你也应该提供关于它是如何崩溃的以及在哪里崩溃的信息;事情有无数种崩溃的方式。