2012-04-10 4 views
3

私はiOS用の位置情報アプリケーションを構築しています。現在、ピザ、ガソリンスタンド、銀行などのローカルビジネスを検索するための検索バーがあります。検索バーのテキストはURLにパラメータとして追加され、Yahoo Local APIに渡されます。特定のアドレスを見つけるために同じ検索バーを使用したいと思いますが、それはAPIの機能ではありません。ロケーションの検索:特定の住所とローカルビジネス

A)広範なビジネス検索と特定のロケーション検索を区別できる機能を構築してください。ビジネスクエリをAPIに送信し、アドレス検索をCLGeocoderに送信します。

B)より多彩なAPIを見つける。

C)私がまだ検討していない他の何かをしてください。

別の検索フィールドを追加してアドレス検索に使用することはできますが、同じ検索バーから行うことが可能かどうかは疑問です。誰かがアドバイスを提供したり、正しい方向に向いてくれたら、私はそれを感謝します。ありがとう。

答えて

0

あなたはおそらくAをアドレスとして扱いにくく、POIはかなり自由形の文字列です(特に人間が生成した文字列の場合)。私はむしろユーザーがビジネスやアドレスを検索するために切り替えることができる何らかの種類のスイッチを追加することをお勧めします。

Google maps apiについては、必要に応じてBをご覧ください。これは入力パラメータに関して多目的に見えます。興味のある質問の場合は

+0

マップAPIは、TOSに従ってGoogleマップをユーザーに表示する必要があることを除いて、良い考えです。ガブリエルがそれをしているかどうかわからないので、気をつけておいてください。 – Matt

+0

お返事ありがとうございます。 Google Maps Geocoding APIを使用したクラスを実装しました。それはこれまでかなりうまく動作しています。私はちょうど結果を並べ替える方法を試してみたいので、ユーザーの場所に最も近いものを表示するだけです。たとえば、「22 Churchill Drive」はアーカンソー州からマサチューセッツ州への結果を示しています。私はジオコーディングがより多くの情報を提供してより正確であることを理解していますが、1000マイル以上離れた結果​​を返す必要はありません。 –

+0

ああ、ところで、Matej。スイッチの考えに感謝します。私があまりにもこの統一された場所の検索バーの事のすべてにぶら下がってしまうなら、それは間違いなく選択肢です。 –

0

+1です。これは間違いなくプログラミングの設計上の質問ですが、ほぼUXの質問です。

私はあなたが1つのフィールドですべてを行うことができると思います。私はアドレスを解析し処理するところのSmartyStreetsの仕事をしています。

  • アドレスを解析または決定するために正規表現を使用しないでください。それはあまりにも複雑です。 Matej氏のように、アドレスにはさまざまな形があります。 「自由形式の文字列」は何でもかまいません。誘惑は正規表現を使うことですが、スマーターの方法があります。
  • ロケーション/アドレスAPIは、実際には、少なくともTOSに従って、探している値と結果を提供するものはほとんどありません。たとえば、Google、Yahoo!などは地図を表示する必要があり、自動クエリを許可しません(ユーザーが積極的にリクエストを開始しないなど)。
  • ほとんどのAPIは、近似のみを実行します。アドレスは検証ではありません。したがって、あなたが得た結果は最高で、推測です。 Googleは推測には優れていますが、実際にはそうではない正当な結果が戻ってくる可能性があります。私はこれをたくさん見てきました。ジオロケーション/ジオコーディングAPIがその役割を果たしていますが、それらにも限界があります。

例:ユーザーは、POIまたはアドレスのいずれかをそのテキストフィールドに入力します。あなたはそれがどちらであるか、それがどちらであるかわからない。 を知った場合、POIまたは住所は存在しますか?私は一度に両方を実行する(安価な)APIは知らない。私が見たエンタープライズクラスのものがあるが、おそらくあまりにも多くの金に対してあまりにも多くのことをするだろう。ここに私が試みる簡単なアプローチがあります。

  1. 住所を確認するためのCASS認定サービスを検索します。SmartyStreetsのLiveAddress APIdifferent demo on homepage)は、そのようなサービスの1つです(安価で、少量使用でも無料です)。 APIは直接1行のアドレスを解析しませんが、this algorithma working example here)を使用するのは本当に簡単です。JavascriptのようにJSONPを使いこなす必要がないので、Objective Cではさらに簡単です。

  2. LiveAddressまたは同等のサービス(私はいくつかの調査を行い、さらに質問があれば教えてください - 私は助けてくれることを喜んでお知らせします)が結果を返した場合、文字列はアドレスでした。一部のCASS認定サービスは、偽のアドレスや推測を返すと警告されており、両者を区別することは困難/不可能です。 LiveAddressは有効なアドレスのを返します。したがって、LiveAddressが結果を返す場合(通常は上記のアルゴリズムを使用して最初のもの)、文字列は確かにアドレスかPOIとそれに続くアドレスです。 (そして、はい、LiveAddressは各アドレスをジオコードします。)

  3. 結果が返されない場合は、POI /企業名でした。あなたのアプリがGoogleやYahooのTOSを遵守している場合、そのAPIを推測し、そのようなものについてより一般的なマッチを見つけることができるので、APIをクエリします。

であっても別のオプションは、アドレス(もしあれば)それを返す、それが存在することを確認し、それについての詳細を学ぶためにLiveAddressを通してそれを送ると、最初にして、マップのAPIを照会することです。

あなたが正しい方向にあなたを指し示していることを期待しています。あなたが何かを明確にしたい場合や、住所関連の質問がある場合はお知らせください。

+0

お返事ありがとうございます。ここに素晴らしい情報。私がやるべきことは、ジオコーディングAPI(Google Maps)を先に使うことです。それでも結果が得られない場合は、ローカルのビジネスAPI(Yahoo LocalまたはGoogle Places)に同じクエリを送信できます。たとえば、ユーザーがジオコーディング検索に失敗し、次にビジネスAPIに渡され結果を生成する必要がある「ピザ」をタイプするとします。 –

+0

おそらく効果的だろう。あなたが思うなら、あなたがそれを実装し試したときに結果をここに投稿してください。私はそれがどれほどうまくいくのか興味がある。ただし、ユーザーがアドレスを入力すると、アドレスが実際に存在するかどうかは分かりませんので、座標を捨てることに注意してください。 – Matt

+0

そこに擦り傷があります。私は本当にAPIの "最高の推測"に頼っています。私はちょうどテストを終え、これまでのところ動作します。私は住所検索とローカルビジネス検索のクラスを持っています。アドレス検索に失敗した場合は、クエリ文字列をローカルビジネス検索に渡します。今私は完全な証拠ではないと確信しています。 JFK空港を検索すると、空港とそれに付随するもの(JFK駐車場、JFKシャトル、JFKビーフパティ)を手に入れることができます。私はそれを続けるつもりだが、私はMatejが提案したスイッチに行く気がする。 –

関連する問題