Ios 延迟加载mapview注释的算法

Ios 延迟加载mapview注释的算法,ios,maps,mkmapview,Ios,Maps,Mkmapview,我正在开发一个地图应用程序,可以从API加载位置。我已经计算出了代码,所以当用户平移一段相当长的距离时,API会被查询出x公里内的位置,并且注释会被替换 我正在为iOS编写代码,但这适用于任何地图应用程序 在这一点上一切都正常,但我对我的算法感到不满意,因为我知道什么是有效距离,什么是要加载的位置半径。我正在考虑一些事情- 地图视图是一个矩形,比它的宽度高 在x公里内的装载位置会给您一个圆圈 用户可以放大和缩小 用户可以平移N、S、E、W 视图的每一个小变化都会导致重新加载,这将导致用户体验不

我正在开发一个地图应用程序,可以从API加载位置。我已经计算出了代码,所以当用户平移一段相当长的距离时,API会被查询出x公里内的位置,并且注释会被替换

我正在为iOS编写代码,但这适用于任何地图应用程序

在这一点上一切都正常,但我对我的算法感到不满意,因为我知道什么是有效距离,什么是要加载的位置半径。我正在考虑一些事情-

  • 地图视图是一个矩形,比它的宽度高
  • 在x公里内的装载位置会给您一个圆圈
  • 用户可以放大和缩小
  • 用户可以平移N、S、E、W
  • 视图的每一个小变化都会导致重新加载,这将导致用户体验不佳-需要有一个阈值
  • 视图之外应该有位置,因此用户可以在重新加载之前平移和缩放到一定程度
  • 给定圆内的矩形,用户上下平移将比左右平移更早到达圆的边缘
  • 为了节省资源,当放大过宽时,并非所有位置都会显示,因此放大可能会显示新位置
  • 缩小将显示新的位置
对我应该做什么样的算法有什么建议吗?我希望确定以下变量-

  • 给定屏幕宽度的加载位置半径
  • 重新加载点之前的更改阈值(平移和缩放)

光栅地图的常见解决方案是将图像切割成瓷砖,然后加载“靠近”查看器所在位置的瓷砖。您可以在平移/缩放后加载其他点,而无需删除数据。如果检索新点的代码是在后台线程中运行的,用户不会注意到,并且每次平移时,他们都会在一个已经有数据的位置结束,而当他们查看时,您会为下一次平移加载更多数据。你需要计算出他们一步能走多远。经度很简单,只需取纵向差(即左右),这就是他们可以拖动手指的距离,从而拖动地图的距离。因此,如果地图视图的宽度为1度,则应该已经有地图右侧1度和左侧1度的数据。纬度更难,因为它随着你离开赤道而改变。如果你看苏格兰,从上到下有一个不同的衡量标准。但原理是一样的。计算出用户在1次拖动中可以滚动多远,并预加载数据。如果你想一个3x3的网格像一个电话板。地图视图位于5按钮处,您需要预先加载所有环绕按钮。地图视图将被拖到一边,因此它现在正在查看需要加载的6个正方形,在不丢失屏幕上的数据的情况下,将其加载到额外的正方形中。你可以打三个电话到右边、上面和右边、上面和下面。或者做一次呼叫并在一次呼叫中获取所有新数据

当然,如果您获取新数据的调用有点慢,并且用户可以在收到应答之前平移两次,那么您可能需要获取更大的区域。因此,您将位于5x5网格的中心,当视图向边缘移动时,您必须获取另一行或列


我希望这会有所帮助。

光栅地图的常见解决方案是将图像切割成瓷砖,然后加载“靠近”查看器所在位置的瓷砖。您可以在平移/缩放后加载其他点,而无需删除数据。如果检索新点的代码是在后台线程中运行的,用户不会注意到,并且每次平移时,他们都会在一个已经有数据的位置结束,而当他们查看时,您会为下一次平移加载更多数据。你需要计算出他们一步能走多远。经度很简单,只需取纵向差(即左右),这就是他们可以拖动手指的距离,从而拖动地图的距离。因此,如果地图视图的宽度为1度,则应该已经有地图右侧1度和左侧1度的数据。纬度更难,因为它随着你离开赤道而改变。如果你看苏格兰,从上到下有一个不同的衡量标准。但原理是一样的。计算出用户在1次拖动中可以滚动多远,并预加载数据。如果你想一个3x3的网格像一个电话板。地图视图位于5按钮处,您需要预先加载所有环绕按钮。地图视图将被拖到一边,因此它现在正在查看需要加载的6个正方形,在不丢失屏幕上的数据的情况下,将其加载到额外的正方形中。你可以打三个电话到右边、上面和右边、上面和下面。或者做一次呼叫并在一次呼叫中获取所有新数据

当然,如果您获取新数据的调用有点慢,并且用户可以在收到应答之前平移两次,那么您可能需要获取更大的区域。因此,您将位于5x5网格的中心,当视图向边缘移动时,您必须获取另一行或列

我希望这有帮助