0

このアプリケーションでは、Google マップ API v1 を使用します。マーカーのグリッドベースのクラスタ化を作成しました(合計数千まで)。すべてが正常に動作します - 良好なパフォーマンスなど...唯一の問題は、現在表示されている領域に応じてグリッドを計算することです

private void createCluster2DArray() {
    double cwidth = (cachedrightLongitude - cachedleftLongitude) / clustersXnum;
    double cheight = (cachedtopLatitude - cachedbottomLatitude) / clustersYnum;
    for (int i = 0; i < clustersXnum; i++) {
        for (int j = 0; j < clustersYnum; j++) {
            Cluster cluster;
            if (clusters[i][j] == null) {   
                cluster = new Cluster();
                clusters[i][j] = cluster;
            } else {
                cluster = clusters[i][j];
                cluster.list.clear();
            }
            //calculate dimensions
            cluster.left = cachedleftLongitude + i * cwidth;
            cluster.right = cluster.left + cwidth;
            cluster.bottom = cachedbottomLatitude + j * cheight;
            cluster.top = cluster.bottom + cheight;
            cluster.calculateCenter(mMapView);
        }
    }
}

cachedrightLongitude, cachedrightLongitude, cachedrightLongitude, cachedrightLongitude度単位のデバイス画面領域の境界です。問題は、ユーザーが表示領域を変更する (ズーム レベルを変更する、または単に画面をスライドする) たびにクラスターの境界線が変化することです。これにより、クラスターの再計算とマーカーの再配布が行われます。

私が見る唯一の解決策は、ズームレベルごとにある種の静的な画面に依存しないクラスターを作成することです(たとえば、ズームレベル5ではクラスターのサイズは10ミリ度になり、レベル6では2ミリ度になるため、境界クラスターのみサイズと外枠を動的に変更します)。私は正しいですか?

他の提案はありますか?

4

1 に答える 1

1

Android マップ API v1 の場合、https ://github.com/damianflannery/Polaris にクラスタリング ライブラリがあります。これは Cyril Mottier の Polaris ライブラリのフォークですが、プル リクエストに関する議論では、オリジナルにマージされないことが示唆されています。ここ を参照してください。ソースを見ていないので、グリッド クラスタリングを使用しているかどうかはわかりません。

あなたの質問については、静的な画面に依存しないクラスター グリッドを使用する方法だと思います。ミリ度の値を変更することだけをお勧めします。ズーム レベルが 1 異なる場合は、ミリデグを 2 で割る (または掛ける) 必要があります。

また、緯度では度の値を直接使用することはできませんが、メルカトル図法を介してプッシュする必要があることに注意してください。これは、グリッドを、北極と南極に近い幅の数倍の高さを持つ長方形のように見せるのではなく、正方形で構成するためです。

これは基本的に、マップ API v2 のAndroid Maps Extensionsで行うことです。ズーム レベル 0 で 180 度のグリッド サイズを想定したので、ズーム レベル 1 で 90 度、ズーム レベル 2 で 45 度、ズーム 21 で約 85 マイクロ度です。この値は API で変更できます。

Extensions lib のコードで最も役立つ部分は次のとおりです。緯度を変換するSphericalMercatorとGridClusteringStrategyの一部。

于 2013-05-02T09:24:22.050 に答える