この通りはどこですか、この家はどこですか...または、企業が所在する地域を特定する方法

画像



新しいサービスを開発する過程で、興味深い問題があります。 行政区域または市町村の組織への企業の所属を決定し、企業が所在する地区またはオクルグを企業に割り当てる必要があります。 エンドユーザー向けのプレゼンテーションは、検索フォームのフィルターである必要があります。これにより、特定の地区または都市の地区でのみ組織を検索できます。 そして、ロシア全土の企業に対してこれを行う必要があります。



入力データ:一定の蓄積ベースがあり、ロシア中のかなり多数の組織に番号を付けました。 ベースには、通常の文字列を表す企業のアドレスが含まれていました。 したがって、領土を拘束する明確な方法はありませんでした。



このように一見単純なタスクを実装するには、頭を悩ませる必要がありました。 最初は、Googleマップを使用して、カスタムマップを通じて地域の輪郭を描き、Yandexジオコーダーを通じて組織の座標を取得するというアイデアがありました。 しかし、このアイデアはユートピア的であることが判明しました-誰もがロシア全体の地域の地図を描くことができるわけではありません。



適切な解決策が突然思い浮かびました-KLADRの行政区域区分の既製の基盤を使用することです 。 このデータベースには、ロシアの集落、通り、家の完全なリストが含まれています。 また、KLADRデータベースには、地域単位ごとにOKATOコード(管理地域区分オブジェクトの全ロシア分類子)が含まれています。 OKATOベース自体はKLADRの一部ではなく、個別にダウンロードする必要があることに注意してください。



そのため、郡または地区を決定できるベースが利用可能です。 彼女の利用可能な住所をどのように一致させるかを理解することは残っています。 KLADRの家に関するデータは、かなり具体的な方法で保存されます。家に関する情報には、建物、構造、パリティなど、さまざまな指定を含めることができます。 そのため、使用可能なアドレスを分析する必要があります。 これを行うには2つの方法があります。



1つ目は、最も単純で信頼性の低い方法です。既存の会社の住所をYandexジオコーダーにフィードし、 Yandexジオコーダーは住所を細かく分けます。 ただし、この方法には大きなマイナス点もあります。何らかの理由でジオコーダーデータベースにそのような住所がない場合、指定された場所に最も近い建物が返されます。 または多分何も...

2番目の方法は、ジェダイの方法です。 アドレスパーサーを自分で実装します。 私たちのサービスでは住所を決定する正確さが重要であったため、パーサーを独自に、また手段を使って実装することが決定されました。 最も簡単な実装例はこちらです。 この例では、住所文字列は、キーが領土単位のタイプである配列に解析されます。 上記の例では、「but」が1つあります。アドレスはすでに「正しい」形式である必要があります。 つまり、たとえば、住所内の家は通りの前ではなく通りを追わなければなりません。



これで、アドレスがより理解しやすい構造を表すようになったため、既存のKLADRデータベースと比較してOKATOコードを取得できます。 KLADR基地自体は、特定の地区またはオクルーグに属する領域のアイデアを提供しません。 これを使用して、最大のOKATOコード自体と郵便番号を決定できます。 そして、岡本基地自体が正しい考えを与えることができます。 それは、情報が都市内地域、共和党の都市の地区、地域、地域の従属に置かれていることです。



そのため、スクリプトが記述され、コードがマッピングされます。 その結果、次の機能が登場しました。



画像



zdanchikによって実装および記述されています



All Articles