0

ページに検索ボックスと Google マップを実装して、顧客が場所のクエリに基づいて検索を実行できるようにしましたが、これまでのところうまく機能しています。ただし、TextSearch を使用すると、ほとんどの場合 (特定のポイントでない限り) 20 件の結果が得られます。ただし、私たちが好むのは、ユーザーの検索に基づいて、より意味のある一連の結果を返すことです (つまり、ユーザーが郵便番号内の教会を検索している場合、郵便番号外の教会を表示すべきではありません)。

場所と半径に基づいて結果にバイアスをかけたり、NearbySearch を使用して場所/半径に基づいて結果を制限したりできることはわかっています。

ただし、当社の顧客は世界中のあらゆる地域で検索を行っている可能性がある全国的なユーザーであるため、ユーザーが検索するまで、どの場所と範囲を制限として設定すればよいかわかりません。クエリに基づいて動的に決定したいと思います。

たとえば、Google マップで「30319 付近の教会」を検索すると、「ジョージア付近の教会」よりもはるかにローカライズされた結果セットが得られます。

30319 付近の教会: https://maps.google.com/maps?q=churches+near+30319&hl=en&sll=33.772251,-84.296934&sspn=0.049158,0.082312&hq=churches&hnear=Atlanta,+Georgia+30319&t=m&z=14

ジョージア近郊の教会: https://maps.google.com/maps?q=churches+near+Georgia&hl=en&sll=33.870438,-84.332304&sspn=0.049102,0.082312&hq=churches&hnear=Georgia&t=m&z=8

クエリの単一点の位置を取得するために、ジオコードを使用して別のクエリを実行することをテストしました。すなわち

getGeneralVicinity = ->
  address = $('#address').val()
  window.oneq.geocode.geocoder.geocode
    address: address,
    (results, status) ->
      if status is google.maps.GeocoderStatus.OK
        console.log(results[0].types)

おそらく、ジオコード結果のタイプ (つまり、地域) を見つけることで、半径を決定し、geometry.location を場所の境界に使用できるようです。残念ながら、これは一貫性がなく、ユーザーが「churches」のみを検索した場合、期待どおりの結果が得られません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

あなたはほとんどそれを持っていました。Geocoding API を Google の実装ではなく JSON フィードと呼ぶので、詳細はソースから直接引用します。何かをジオコーディングするときに返される非常に興味深いパラメーターがいくつかあります。それを試してみてください:

第 2 層の住所コンポーネントは両方ともジョージアです。ただし、いくつかの異なるパラメーターがあり、必要なものは ですgeometry。これは、領域の形状を示します。

たとえば、30319 リクエストを見てみましょう。境界として取得します:

"bounds" : {
           "northeast" : {
              "lat" : 33.9203610,
              "lng" : -84.30943599999999
           },
           "southwest" : {
              "lat" : 33.83286890,
              "lng" : -84.35826589999999
           }
        },
        "location" : {
           "lat" : 33.87309460,
           "lng" : -84.33842899999999
        },

これにより、次の 3 つのことがわかります。

  • 境界ボックスの角
  • ボックスの中心 (頂点ラインの交点になります)

これにより、中心からの最大距離を計算でき、半径として Google Places API 検索にフィードバックできます。緯度/経度から距離への変換は自明です。これは直交パスと呼ばれます。2 つの式が存在します。1 つは短い距離用 ( Haversine の式) で、もう 1 つは長い距離用 ( this ) です。誰かがこれらの計算機を書きました: http://williams.best.vw.net/gccalc.htm . 30319 のバウンディング ボックスは 10 km にまたがるのに対し、ジョージアのバウンディング ボックスはほぼ 700 に及ぶことがすぐにわかります (一致するには複数の Google プレイス リクエストが必要です)。

これが明確でない場合はお知らせください。さらに詳しく説明します。

于 2013-04-17T14:45:10.813 に答える