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

请帮助我,我是一名业余程序员,没有找到解决方案,谢谢您的进步

最佳答案

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

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上的我的MKMapView中添加了2000条注释花费了几秒钟,但这显然不是一个很好的UX(就几秒钟的延迟而言,但还有两千条注释的想法,您显然无法在视觉上区分它们)。 iPhone屏幕)。您建议抓住5英里内的地标,并为用户提供替代选择所有地标的选项。我可能会建议另一种方法:
    建议您不要查看regionvisibleMapRectMKMapView,而是显示属于该区域或MKMapRect的注释,而不是编码这种“五英里或全部”的逻辑。或者,甚至更好的是,仅显示该区域内的100条注释。并且,如果将其挂接到 regionDidChangeAnimated 例程中,它将在需要时获得新的注释。
  • 关于ios - xcode KML Viewer仅在 map 上显示约5英里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14660309/

    10-13 06:40