地域と緯度/経度の位置列を含む MySQL テーブルがあります。各エリアには、20.000
など、多くの場所があります。マップ上に均等に分布しているように見える 100
など、いくつかだけを選択する方法はありますか?
分散は完璧である必要はありません。クエリ速度の方が重要です。 MySQL を直接使用してこれが不可能な場合は、非常に高速なアルゴリズムを使用して、均等に分散された場所を選択できます。
###前もって感謝します。編集: コメント內(nèi)のいくつかのリクエストに答えます。データには何も処理するものはなく、単にエリアと位置の座標(biāo)だけです。例:
リーリー
特性を持つ列もいくつかありますが、これらはフィルタリングのみに使用されます。
nth行を同時に取得しようとしましたが、少し遅いとはいえ、うまくいったようです
リーリー
random() も使用できますが、少し遅くなります。
編集 3、コメント內(nèi)の @RickJames の質(zhì)問に答えて、1 か所にまとめます:
100
のみを表示します。 1000
以下の場合は、すべてを表示できます
これは、目標(biāo)を満たす 方法です。
「重複」については、2 つの項目が同じ位置にあることを検出する大まかな方法??として考えてください:
SELECT ROUND(緯度 * 5), ROUND(経度 * 3)、 MIN(id) AS id_to_keep テーブルから 1,2ごとにグループ化
「5」と「3」は、保持する ID を増やす (または減らす) ために上 (または下) に調(diào)整できます。緯度/経度の配置により、「5」と「3」は異なります。この比率は、おそらくほとんどの溫帯地域に當(dāng)てはまります。 (赤道近くでは同じ量を使用し、高緯度ではより多くの量を使用します。)
小さな欠陥があります...2 つの非常に近いプロジェクトが、ROUNDs
によって作成された境界を越える可能性があります。
元のテーブルには何行ありますか?上記のクエリは何行生成しましたか? ( SELECT COUNT(*) FROM ( ... ) x;
)