1

我有一个 Android 应用程序,它在启动时会膨胀 MapView,获取用户的位置,然后向我的服务器发出请求,以在其位置的某个半径范围内以 JSON 格式获取所有兴趣点 (POI),并在地图上绘制这些点。我希望用户能够在地图上平移并在超出初始数据负载时看到更多的兴趣点负载,就像谷歌地图一样。

我最初的想法是处理平移事件,当平移停止时,获取地图中心,并在该位置的某个半径范围内向 POI 发出另一个服务器请求。在我看来,这将很快达到发送冗余数据并发出不必要的服务器请求的地步。

我正在寻找一种缓存策略,我可以在其中发出获取新数据的请求,但不必对相同的数据发出额外的请求。我的 POI 也不会经常更改,因此缓存将是加速我的应用程序后续启动的理想选择。有没有针对这种事情的最佳实践?还是更喜欢预先提出更大的数据请求并在必要时获取新数据?

4

1 回答 1

1

例如,我不由自主地想到将 POI 划分为方形瓷砖。这些切片具有 lastUpdate 时间戳,客户端和服务器都根据切片进行通信,而不是地理位置中心点和半径。您的客户端将始终将缓存切片的 lastUpdate 时间戳发送到服务器,并且服务器只会在请求切片的时间戳确实发生更改时以更新的数据进行响应。另一个优点是,与“圆点”计算相比,检索 POI 的算法要快得多。

您的客户端应用程序可以根据时间戳决定何时重新请求磁贴。这取决于您的服务器数据更改的频率。如果它每天只更改一次,那么让您的应用程序每天只重新请求一次缓存切片。我的建议是基于固定大小的瓷砖(例如 2 平方英里)。否则,您将很难跟踪 lastUpdate 时间戳。但是,您可以为缩放级别创建几个不同的“细节级别”,或者您的应用程序需要根据当前缩放计算左上角可见图块和右下角可见图块。

于 2012-07-30T16:45:49.230 回答