Google Mapsv3APIを使用しています。私は現在、人がビューポートを変更するたびに(マップをズームまたはシフトすることによって)新しいデータをフェッチするように要求しており、古いデータを破棄しています。これはうまく機能しますが、ビューポートが変更されるたびにデータをフェッチする必要がないように、データをキャッシュしたいと思います。Google Maps APIは、緯度と経度で構成される北東と南西の座標によってビューポートを定義します。それらはLatLngBoundsと呼ばれるオブジェクトに保存されます。
私はこれを行うことができる2つの方法を考え出しました:
- ユーザーがアクセスする新しいビューポートの境界を保存し、新しいビューポートが古いビューポートにあるかどうかを確認し、古いビューポート内にない新しいビューポートの部分の新しいデータのみをフェッチします。基本的に、
- 新しいビューポートをそれぞれ、データとフェッチする必要のあるデータの長方形のセクションに分割します。各長方形セクションの境界を格納します。
誰かがこれを行うためのより良い方法を考えることができるなら、新しいアプローチを自由に提案してください。
私の質問は、パフォーマンス/メモリ使用量と全体的な速度の点でどちらが優れているかということです。それらは両方とも類似したアルゴリズムなので、それは本当に重要ですか?
また、現在、両方のアルゴリズムは、古いビューポートに基づいて新しいビューポートを分割することに依存しています。新しいビューポートを分割するアルゴリズムはどのようになりますか?(2番目のアルゴリズムを実装したと仮定します)
var prevBounds = [ /* Array of previously seen bounds */ ];
var newViewport = map.getBounds(); // New Viewport to divide up
var sw = newViewport.getSouthWest();
var swlat = sw.lat();
var swlng = sw.lng();
var ne = newViewport.getNorthEast();
var nelat = ne.lat();
var nelng = ne.lng();
// newViewport.intersects(bounds)
// Returns true if this bounds shares any points with this bounds.