Yandexカウンターに乗らずに地球上の場所を見つける方法

...この物語は、はるか昔、クラコビアの遠い国で始まりました。クラコビアの住民は、彼らの生活を不注意に生き、知らなかった...



しかし、私自身は地元の人であり、今日私は長年にわたって(個人的に)私が眠ることを妨げたものについて恐ろしい話をします。 そして、これらは税金ではありません(すべてが問題ありません)、これはYandex.Mapジオコーダーです!

ジオコーダーは、Yandex.Maps HTTPサービスの1つであり、リクエストで住所のテキスト表現を受信し、それに基づいて見つかったオブジェクトを応答で返します。 またはその逆:座標を受信し、アドレスで応答します。


ジオコーダーは、クラコビアのすばらしい国が地図上のどこにあるかを教えてくれます。 そして、彼はこの物語の主人公になります。その物語は、古代フォリオのYandex.Maps APIユーザー契約で、まったく別の本で説明されていました。 伝説によれば、ジオコーディング機能へのリクエストの数には制限があるという。 HTTPおよびJSジオコーダーに対して1日1日あたり25,000を超えないリクエストを送信することができます。 またはオートミール、先生。



そして先日、普通の言葉によるこのルールは、ウェブサイトのパフォーマンスに対する脅威に変わりました。 APIマップクラブでは、制限を超えたさまざまなサービスの大量禁止に関するメッセージが公開されてます。







どうする 明確にするために、茂みからピアノを取ります-8年前、Habréでプロジェクト「e-Neighbors」 -「興味深い場所の地図」が点灯しました。 これらすべての年、私はそれに取り組んでいます。



ユーザーが地図上に描いた場所のいくつかは、地図上の座標しか持っていませんでした-彼らにとっては、住所を見つけることが必要でした。 それどころか、さまざまなソースで見つかった他の場所では、アドレスのみが知られていました。 そのため、地図に表示するには座標に変換する必要がありました。



さらに、住所との間の座標の変換は定期的に繰り返されなければなりませんでした!

サービスの使用規則に従って、ジオコーダーの応答をデータベースに永久に保存することはできませんが、最大30日間キャッシュすることができます。 Yandexがデータを共有することを望んでいるわけではなく、データの品質とカバレッジが常に変化しているだけです。サービスの作成者である私にとって、ユーザーが最新情報を利用できるようにすることが重要でした。 ところで、クラクフはまだ見つかりません。


さらに、何万人もの人々が毎日eSoads Webサイトにアクセスして場所を検索しましたが、これもジオコーダーの使用につながりました。



実際、奇跡に対する怠と信仰がなければ、すべてがそれほど怖くはなかったかもしれません! 参照:



ymaps.geocode('  .12').then(function(res){myMap.geoObjects.add(res.geoObjects);}); //  ymaps.geoQuery(ymaps.geocode('')).addToMap(myMap);
      
      





簡単な操作の結果、1つまたは複数のポイントがマップ上に正確に正しい場所に表示されます。 それは奇跡ではありませんか?



JSジオコーダーの使いやすさに目がくらんで、多くの開発者が「地図ソリューション」をこの方法でプログラムしました。 住所のみを扱う場合は、ATM、郵便局、販売拠点、または住所に関連付けられたその他の「組織」を表示するのが本当に簡単です。



テキストはIPAによって飲み込まれ、深さのどこかで魔法のように消化されます。そして、マップ上の適切な場所にマークが表示されます。 さらに詳しく説明します-多くの人は、数値座標または法定住所によるラベルの場所の設定の違いを見ません。



問題は、すべての魔法の代金を支払わなければならないことです! そして、ペンに入ってカウンターに立ち上がる必要があります。 また、1ページの場合、10個のタグがあり、1日あたり2,500人のユーザーがいます。それで、限界に達しました。

以前は、1日あたり25,000件のリクエストの境界を越えると、Yandexのマネージャーから、あなたが間違っていることを説明する手紙が届くことがありました。 これで、プラスドーム付きの邪悪なロボットが登場します-それだけです。


それが私が最後の数日間眠ることを妨げた理由です。 「eSedey」の一部の1つは、KLADR(都市、通り、住所)の具体化です-postindex.esosedi.ru 。 このデータベースは「アドレスについて」であり、もちろん、アドレス(テキスト)によって記述され、多くの場合、座標が含まれていません。 現在でも、祖国の多くの村はジオコーディングされていません(クラコビアを思い出してください)。 したがって、座標は二次的です。



都市または通りのページを入力するたびに、地図が表示されます。 この場合、既知の住所(Timur Frunze、11k2)を座標に変換する要求が送信されます。 ちなみに、ジオコーディングはすぐには行われず、ポイントが多い場合は、マップの読み込みが遅くなる可能性があります。



すべて問題ありませんが、40,000の郵便局、211,000の集落、100万通り、昨日の55,000人の訪問者...これで、尾を付けた1日2回の制限に十分です。 しかし、長年にわたってこれはそのように機能しました。 そして、なぜですか?







私たちは邪悪なロボットを待つことはありません-問題を解決します。 幸いなことに、1つではなく2つのソリューションが存在します。



最初の解決策は正しいものです



座標を保存する場所があるようにバックエンドを変更します。 そして、これは通常の管理パネルを作成し、ジオコーダーの「応答」の目視検査に基づいてTTLデータを公開し、アイコンを移動し、ラベル配置のセンチメートル精度を達成する少女を植えることを意味します...



長所:技術的に、確実に、オフィスの美しい少女。

短所:バックエンドが必要であり、データベースが必要であり、カスタム検索の処理方法が明確ではありません。 妻がどのように反応するかは完全には理解されていません。



解決策2-安くて怒っている



検索してください! 何かがそれ自体に保存されるように(つまり、キャッシングプロキシ)、「すぐに使える」ので、同時の同一のリクエストなどに対処できます。



一般的に、アイデアは非常に単純です。自分のペンに行き、そこでキャッシュのステータスを確認し、必要なデータがない場合は、Yandex.Maps HTTPジオコーダーにリクエストを送信します。



多くの大規模プロジェクトの場合、適切なソリューションは独自の何かを書くことです。 たとえば、OSMに基づいて独自のジオコーダーを展開することもできます。



しかし、経験から、私はほとんどの最も有益なオプションがgithubで何かを準備することであることを知っています。 伝統により、 dimikの geocode-toolソリューションオプションへのリンクを提供します。 Dimaはか​​つてYandex.Mapsで働いていたため、やめられません。



一般に、ジオコードツールはサーバーパーツ(「ハンドル」)、統計情報を備えたWebインターフェイス、およびYandex.Mapsのモジュールです



短所:サーバー上で、さらにノード上で別のサービスを実行する必要があります。 女の子はオフィスに現れません。

長所:すべての作業がカブジャンプに減り、クライアントに数行追加されました(まあ、ほぼ)。



サイトに少なくともロケーションマップを含むマップがあり、ジオコーディング(チェック)を使用していて、それが頻繁に実行されるように思われる場合は、プロキシサーバーを自分に接続します。 各ページに住所変換がある場合は、サーバージオコーダーを使用するか、座標を直接設定します。


抽象ストアの10ページにアクセスする1000人。各ページにはそれぞれ2ポイント(住所)のロケーションマップがあります-これはすでに20,000件のリクエストであり、危険に近い制限です。 突然、ある日広告を購入することにしましたが、もう少し多くの人がサイトを訪れますか?



eNosの隣人で、これはどのように終わりましたか:



それは-ジオコーダーが人工的な心ではないことを忘れないでください-ゴミを出すことができます。







ご存知のように、モスクワの南には4つの( 1、2、3、4 )Svitinoとほぼ同じ場所がありますが、そのうち2つはモスクワにあり、1つはモスクワ地方に、もう1つはカルーガにあります。



ジオコーダーは単純なデータベース検索メカニズムです。つまり、必要な間違ったオブジェクトを少しだけ与えることができます。 たとえば、探しているものは実際には存在しないため(クラコビアを思い出してください)。



これは見た目以上に楽しいです。 しかし! 私! ついに! 私は平和に眠ることができます。 それをお勧めします。



優れたジオキャッシング。



PS:実際、私はメインの仕事からの空き時間に「eSo Neighbors」に取り組んでいます。 そして、主な作業はYandex.Mapsのみです。 そして、私はあなたに警告しました。



PPS: fevronyのすべての写真。



All Articles