どこへ行くか-ここでも、Habréには国、州、都市のドロップダウンリストがあります。
私は(おそらくそうであるように)そのようなデータ(国のリストなど)をアレイ、データベース、および構成ファイルの両方に何度も保存する必要がありました。 プロジェクトに別の言語バージョンがある場合、他の言語でオプションを追加するのは面倒です。
一度にいくつかの問題が発生しますが、誰かがこのリストに挑戦した場合にのみ喜んでいます。
- 地理データと翻訳を追加すると、作業プロジェクトであるデータウェアハウスが詰まります。 メインビジネスに関連しない余分なテーブルは必要ありません。
- プロジェクトの地理データは絶えず繰り返され、自転車の発明です。 地球上の国や都市のセットはめったに変化しませんが、なぜこのデータをアプリケーションで温かい場所にするのでしょうか?
- チームに言語学者や多言語がなければ、エラーは都市や国のリストに簡単に入り込む可能性があります。 短いものでタイを書いているロシア人は何人いますか?
地理データは、スタンドアロンパッケージの理想的な候補です。 お気に入りのパッケージマネージャー(コンポーザー、npm、またはCocoaPods)に1つのコマンドを入力し、すぐに地理的な名前を操作する機会を得たいと思います。 ファッショナブルなhttp://momentjs.com/のようなものが欲しいのですが、地理についてです。 パッケージを1つ入れてください。いわば、このページを閉じてください。
驚いたことに、そのようなパッケージはまだ存在しないので、私は自分で作業を始めました。 手始めに、PHPバージョン。 この記事は私のアプローチの説明であり、この出版物の主な目的は他の開発者からの意見の集まりと考えることができます。 必要性の評価、パッケージの関連性。
提案された実装
これは、現時点ではPHPに最適なAPIのようです。
// – // $planet = new Planet(); // , , $planet->getCountries()->toArray(); // , – , $planet->getCountries()->useShortNames()->toArray(); // $countries = $planet->getCountries(); $thailand = $countries->find(['code' => 'TH']); $thailand->getStates()->toArray(); // $thailand->getStates()->setLanguage('ru')->toArray(); // ( , " " "") $thailand->getStates()->setLanguage('ru')->inflict('in')->toArray(); // ? geonames? ? $capital = $thailand->getCapital(); $capital->getGeonamesId(); $capital->getLatitude(); $capital->getLongitude();
これはすでに、最初の画像のリストをサイトに非常に迅速に追加するのに十分です。
完全な幸福のために、私もしたいと思います:
// $russia->find(['zip' => '626430']); // $planet->find(['zip' => 'EC3R 6DN']); // $planet->find([ 'latitude' => 51.5078788, 'longitude' => -0.0899208 ]);
Habréの人々の意見は私にとって重要ですが、私は誘惑されることはありません-私はすでに一般大衆の反応を待たずにPHPのパッケージを書き始めました。 パイロットバージョンはGitHubにあり、1か月の間に3〜4の最初の言語とすべての基本機能が表示されます。 誰かが開発に参加したい場合(他の言語のパッケージ-JavaScript、Rubyなどが特に興味があります)、私はあなたから個人的なメッセージを受け取ることを非常に嬉しく思います。
アプリケーションモデルとの通信
「しかし、ユーザーの都市を覚える方法」などの質問を予測します。そして、ここでの答えは非常に簡単です-国のISO 3166-1コード、都市のGeoNamesコードなど、データベース(またはそこにデータを書き込む場所)で標準識別子を使用します状態。 コードとそのコンテンツおよび翻訳を比較することに問題はなく、この特定のパッケージにアタッチされることはありません。
質問
主な質問は、この記事の目的です。アプリケーションでそのようなパッケージを使用しますか? または、地理データを自分で保存し続けますか?