我有一个包含 2000 多个地点的 KML 文件,但是当我使用它时,加载所有地点需要 5 分钟以上。现在我的问题是是否可以加载距离当地仅约 5 英里的地方的地图,并为用户添加一个按钮,以便他们在需要时单击它以使用所有地方。
请帮助我,我是业余程序员,找不到解决方案,谢谢您的提前
您应该为您的和特定的 KML 地标创建CLLocation
对象,然后您可以使用它们来查看它们的距离(以米为单位)。鉴于每英里有 1,609.34 米,因此五英里是 8,046.72 米:currentLocation
placemarkLocation
distanceFromLocation
CLLocation *placemarkLocation = [[CLLocation alloc] initWithLatitude:latitude
longitude:longitude];
if ([placemarkLocation distanceFromLocation:currentLocation] < 8046.72)
{
// add placemark to map
}
else
{
// don't
}
我有两个后续观察:
您说加载过程需要 5 分钟。我觉得这很可疑,想知道你是否还有其他事情发生。我只是为了笑声和笑容,在地图上添加了 2000 个注释,这花了几秒钟,而不是几分钟。我建议您进行一些诊断以确定延迟的来源,因为如果问题是 XML 解析或其他问题,那么优化地图生成是没有意义的。做一些诊断工作来确定延迟的真正原因。
例如,如果问题是您正在通过 Internet 下载一个巨大的 KML 文件,该文件以数十或数百兆字节为单位,那么任何优化对MKMapView
整体性能的影响都可以忽略不计。这只是一个随机示例,但请确保您真正了解问题的根源。
虽然在 iPhone 5 上向我添加 2000 个注释需要MKMapView
几秒钟,但这显然不是一个很好的用户体验(就几秒钟的延迟而言,还有两千个注释的想法,你显然无法在 iPhone 屏幕上进行视觉区分)。您建议抓住 5 英里范围内的地标,并让用户可以选择全部选择它们。我可能会建议一种不同的方法:
与其编写这种“五英里或全部”逻辑,我建议您查看region
orvisibleMapRect
的MKMapView
,并显示属于该区域的注释 or MKMapRect
。或者,更好的是,只显示该区域内的 100 个注释。而且,如果您将其与regionDidChangeAnimated
例程挂钩,它将在需要时获得新的注释。