クラスター分析は複雑な問題であり、ニーズと利用可能な情報に応じて、多くの解決策が存在します。
k -meansは、初期パラメーターとして予想されるクラスターの数を指定するアルゴリズムであり、アルゴリズムはその数の周りにクラスター化します。高速ですが、多くの場合、最良の結果が得られないか、推測できないkの数値を選択する必要があります。
DBSCANは、2 つの場所の間の距離と指定したカットオフ半径に基づいてクラスターを作成するアルゴリズムです。k平均法よりもはるかに優れた結果が得られますが、速度も大幅に低下します。
それ以外にも、さまざまなデータ モデルやユース ケースに合わせて調整および最適化された、さらに多くのアルゴリズムが利用可能です。私が知っている PHP には実装はありません。これに本当に必要なのは、PostgreSQL + PostGISなどの GIS サポートを備えたデータベースです。素晴らしい選択です。ネイティブのk -means 拡張機能が利用可能です。Rには、あらゆる種類のクラスタリング アルゴリズム用の多くのパッケージがあります。
データセットが十分に大きい場合、それが唯一の実行可能なルートであり、確かに最初の困難な戦いが必要になります. それ以外の場合は、単純な丸め座標から最も近い整数へのカウント アルゴリズムにかなりこだわっています。これは、事実上すべてのデータベースで PHP に実装するのが簡単です (ただし、正方形のグリッド ベースのクラスターのみが得られますが、そうではありませんかわいい)。
もちろん、単純なツールを使用してこれを解決するには、多くの妥協案が考えられます。データベースで単純なグリッドベースのクラスタリングを実行してデータセットを絞り込み、重みベースのアルゴリズムを使用してクライアント上の PHP または Javascript で残りのマーカーをさらにクラスタリングします。または、あなたが持っている遅い方法を使用して、毎晩すべてを事前に計算します. しかし、適切な GIS バックエンドを使用して実現できるものほど優れた実装はありません。
私は数年前に同様の問題に取り組み、それほど難しいことではないと考えていましたが、当時利用できたツールでは難しいことが判明したため、最終的には放棄しました。平均的な PHP/MySQL の組み合わせでは、その問題を十分に解決するために使用できるものは事実上何もありません。適切なツールにアップグレードすると、さらに多くのソリューションが突然利用できるようになります。私の場合、現在 PostGIS、R およびGeoServerです。どのアルゴリズムも CPU かメモリ、またはその両方を集中的に使用するため、通常、PHP はそれを実装するには不十分であり、ネイティブの GIS データ型と機能を持たないデータベースは、あなたの生活を不必要に困難にします。