3

我有一个包含 2000 多个地点的 KML 文件,但是当我使用它时,加载所有地点需要 5 分钟以上。现在我的问题是是否可以加载距离当地仅约 5 英里的地方的地图,并为用户添加一个按钮,以便他们在需要时单击它以使用所有地方。

请帮助我,我是业余程序员,找不到解决方案,谢谢您的提前

4

1 回答 1

1

您应该为您的和特定的 KML 地标创建CLLocation对象,然后您可以使用它们来查看它们的距离(以米为单位)。鉴于每英里有 1,609.34 米,因此五英里是 8,046.72 米:currentLocationplacemarkLocationdistanceFromLocation

CLLocation *placemarkLocation = [[CLLocation alloc] initWithLatitude:latitude
                                                           longitude:longitude];

if ([placemarkLocation distanceFromLocation:currentLocation] < 8046.72)
{
    // add placemark to map
}
else
{
    // don't
}

我有两个后续观察:

  1. 您说加载过程需要 5 分钟。我觉得这很可疑,想知道你是否还有其他事情发生。我只是为了笑声和笑容,在地图上添加了 2000 个注释,这花了几秒钟,而不是几分钟。我建议您进行一些诊断以确定延迟的来源,因为如果问题是 XML 解析或其他问题,那么优化地图生成是没有意义的。做一些诊断工作来确定延迟的真正原因。

    例如,如果问题是您正在通过 Internet 下载一个巨大的 KML 文件,该文件以数十或数百兆字节为单位,那么任何优化对MKMapView整体性能的影响都可以忽略不计。这只是一个随机示例,但请确保您真正了解问题的根源。

  2. 虽然在 iPhone 5 上向我添加 2000 个注释需要MKMapView几秒钟,但这显然不是一个很好的用户体验(就几秒钟的延迟而言,还有两千个注释的想法,你显然无法在 iPhone 屏幕上进行视觉区分)。您建议抓住 5 英里范围内的地标,并让用户可以选择全部选择它们。我可能会建议一种不同的方法:

    与其编写这种“五英里或全部”逻辑,我建议您查看regionorvisibleMapRectMKMapView,并显示属于该区域的注释 or MKMapRect。或者,更好的是,只显示该区域内的 100 个注释。而且,如果您将其与regionDidChangeAnimated例程挂钩,它将在需要时获得新的注释。

于 2013-02-02T17:16:18.077 回答