住所を入力して、家の必要な半径内のすべての庭園を見つけ、距離で並べ替え、さらには地図で確認します。
そして、すべてが非常にリアルであることが判明しました。 起こったことは次のとおりです:( テスト住所:1/2 Lunacharsky St.、Kyiv )。

habrakatの下でどのように起こったのか
問題の声明
大都市があり、そこには住所のある200〜500の庭があります。たとえば、1 kmまたは2 kmの地域で、ユーザーの住所に最も近い庭を見つけ、距離で並べ替える必要があります。
プラットフォームの選択
無料のWebマップのさまざまなプロバイダーから選択します。
- Googleマップ :決定の時点では、Googleはまだウクライナでマップを公開していませんでした(現在は既に存在します)。
- Yandex.Maps :ウクライナの主要都市のほとんど、優れたAPI、優れたドキュメントとサポート、安定した高速アクセス、場合によってはウクライナの通り名の問題があります。
- 他のカード( Visicom 、 Mapiaなど):開発者によって異なる問題-APIの利便性の低下、サンプルとドキュメントの不足、マップの実装の不備、速度の低下。
結果:Yandexマップが選択されます。
機会と課題
Yandex.Maps APIは、他の多くのシステムと同様に、次の機能を提供します。
- アドレスによる座標の決定。
- 2つの座標または住所間の距離の決定。
- 指定された座標でオブジェクトのマップに表示します。
したがって、マップ上に特定の庭を表示することは問題ありません(多くの人がすでにこれを行っています)。 ユーザーが住んでいる場所を地図上に表示するのも簡単です。 庭とユーザーの間の距離を計算するのも簡単な作業です。 しかし、市内には10の庭はありません。また、最も近いものを見つけることができるように、検索ごとに200から500のクエリを作成することは問題です(また、1日あたり25,000のクエリの制限を簡単に超えてしまい、そのような検索には多くの時間がかかります)。
ソリューションと実装
すべての計算をサーバー側に転送します。 これを行うには:
- 幼稚園の住所のデータベースに入力するとき、Yandex Maps APIに1回要求し、この住所の座標を決定し、住所とともにデータベースに入力します。
- ユーザーがYandex.Maps APIを介して最も近い庭園を検索すると、住所の座標が決定されます。
- さらにサーバー上で、ユーザーの住所の座標がわかっているので、住所から1 kmまたは2 km離れたエリアの座標を計算します。
- 座標がこのエリアにあるすべての庭園を探しており、ユーザーの住所とともに、座標をサイトページに埋め込まれたYandex-Maps APIオブジェクトに渡します。
- このオブジェクトは、指定された縮尺でマップを描画し、その上に転送されたすべての庭園を表示します。 次の結果が得られます:(テストアドレス:1/2 Lunacharsky St.、Kyiv )
カウント方法
座標を持つメインチップは、キロメートル単位の半径を度単位の半径に変換します。
- 地理的な子午線の1分は1852メートルです。
- 60分程度、つまり 60 * 1852メートル
- 1キロメートル-1 /(60 * 1.852)度
度単位の半径の単純な加算と減算を行う必要があります。
エピローグ
ウクライナでは、幼稚園や学校で同様の検索を実装した最初の企業のようです。 これがロシアでどのようになっているのかはわかりませんが、大まかなスキャンでは、そのようなものは見られませんでした。 したがって、私は共有したかった。 結局のところ、このアルゴリズムは非常にシンプルであり、多くのプロジェクトで確実に役立つでしょう。