Ios 限制所显示批注的数量

Ios 限制所显示批注的数量,ios,plist,mapkit,Ios,Plist,Mapkit,嗨,我的应用程序运行良好,它从不同的plist加载注释到几个不同的地图 我的问题是在我的一个plist上大约有5000个注释,地图视图大约需要20秒来显示注释 是否有任何方法可以限制加载注释的数量,比如说当前位置的20公里半径 这会缩短装载时间吗 我不想从头开始重做并建立一个数据库,因为我基本上已经这样做了,所以我只有一个plist。如果你想继续使用plists,我建议的选择是将大plist分解成覆盖较小区域的较小plist 如果将他们分为7个澳大利亚州,可以提供您所需的性能水平,那么这很好。但

嗨,我的应用程序运行良好,它从不同的plist加载注释到几个不同的地图

我的问题是在我的一个plist上大约有5000个注释,地图视图大约需要20秒来显示注释

是否有任何方法可以限制加载注释的数量,比如说当前位置的20公里半径

这会缩短装载时间吗


我不想从头开始重做并建立一个数据库,因为我基本上已经这样做了,所以我只有一个plist。

如果你想继续使用plists,我建议的选择是将大plist分解成覆盖较小区域的较小plist

如果将他们分为7个澳大利亚州,可以提供您所需的性能水平,那么这很好。但是我会创建更小的区域(都是矩形的),每个区域在一条边上覆盖一定数量的N度。N不应太小,但也不应太大(这取决于距离要显示数据的当前位置有多远)

例如,可以将单个plist分解为16个区域,如下所示(不必是平方数):

Plist“A”将包含Lat 50至51和Lon 100至110的注释数据。
Plist“B”将包含Lat 50至51和Lon 110至120的注释数据。
Plist“E”将包含Lat 49至50和Lon 100至110的注释数据。
等等

我还将有一个额外的“索引”plist,它可以让应用程序计算出给定坐标中的plist以及该plist的邻居是什么。然后,如果当前位置靠近某个区域的边缘,应用程序可以从当前位置的plist及其相邻位置读取注释数据

索引plist的结构可能如下所示:

PlistName  NWCoordinate  SECoordinate  Neighbors
A          51,100        50,110        B, E, F
F          50,110        49,120        A, B, C, E, G, I, J, K
索引plist将在应用程序启动时读取一次

然后,一旦应用程序拥有当前位置(或当其变化足够大时),应用程序将执行以下操作:

  • 从地图中删除现有注释
  • 使用索引确定从哪个plist加载新注释。假设当前位置为49.25112.3。应用程序使用索引将F plist及其邻居加载到某个数组中(而不是一次直接加载到一个映射)
  • 使用
    addAnnotations
    一次性将注释添加到数组中

5000点不是很多,我有100000点的数据库,它仍然比那快很多(我没有使用MapKit)。如果需要20秒,那么它必须为每个标记进行某种网络通信

plist是否包含每个标记的纬度/经度?如果是这样,则可以为地图上的每个标记创建一个
CLLocation
对象,并为地图中心创建一个
CLLocation
对象,然后使用
[Mapcenter distanceFromLocation:markerLocation]
计算中心到标记的距离(以米为单位)

放下地图上没有的东西,你就可以走了

如果您想将plist拆分为较小的文件,我会按位置将它们拆分。例如,任何以125.1/-19.1开头的纬度/经度标记都将位于单个文件中

我在澳大利亚工作的经验是,像墨尔本这样的城市在一个很小的区域里有很多东西,而这个国家的其他地方几乎都是空的。所以很难把东西分成小块


另外,通过Instruments中的“Time Profile”(时间档案)功能运行你的应用程序,找出到底是什么花了这么长时间。这是Xcode中的
Product->Profile
菜单项。你可以在网上找到大量关于如何使用它的教程。

我认为唯一的选择是将大plist分解为覆盖较小区域的较小plist。然后根据当前位置,仅加载当前位置处或附近的plist。而且,“Xcode”只是IDE,问题不在于IDE。我已经将标签更新为“ios”。谢谢Anna,这听起来是个不错的选择,所以我必须设置一个if语句,根据某个经度和纬度之间的区域加载某个plist?假设澳大利亚有7个州,我应该建立7个声明?
PlistName  NWCoordinate  SECoordinate  Neighbors
A          51,100        50,110        B, E, F
F          50,110        49,120        A, B, C, E, G, I, J, K