0

Google Places APIには、単一のタイプとエリアの制約を受け入れるradarSearch methodがあります。領域制約は、上記の要求のいずれかを有するGoogle Places radarSearchで最も近い100の場所を取得する

var request = { 
    location: latlng, // where latlng is a google.maps.LatLng 
    radius: 2000,  // meters 
    type: placeType // e.g. 'restaurant' or 'gas_station', etc. 
} 

又は

var request = { 
    bounds: latlngbounds, // google.maps.LatLngBounds 
    type: placeType  // e.g. 'restaurant' or 'gas_station', etc. 
} 

A radarSearch 200のマッチング場所まで戻ります...緯度経度/半径対又は緯度経度範囲のいずれかであり得ます。検索が実際に500の場所に一致する場合、500の場所の200の場所だけが応答に含まれます。影響を与える明確な方法はないと思われる場所が返されます。最初のテストではランダムであることがわかりましたが、おそらくセンターから最も離れた場所を返すように偏っていました。

問題は...私はに最も近い 100箇所に興味があります。 500の一致する場所をソートして最初の200を返すサポートされた方法はありますか?私は「rankBy」プロパティを使用して試してみたが、それは無視されるように見える...

var request = { 
    bounds: latlngbounds, // google.maps.LatLngBounds 
    type: placeType  // e.g. 'restaurant' or 'gas_station', etc. 
    rankby: google.maps.places.RankBy.DISTANCE, 
} 

正しい応答を保証する唯一の方法は、面積の小さい初期検索を行うことで、連続的に増加します私が少なくとも100ヵ所以上200ヵ所以下になるまで、境界と再探索を行います。その後JSでソートし、100にスライスして100個の最も近い場所を取得できます。同じ結果を得るためのより良い実行可能なアルゴリズムはありますか?

Googleは最近、 'types'プロパティを非推奨にしました。ここでは、いくつかの一致するタイプの配列を指定できます。現在、 'type'プロパティのみがサポートされています。このプロパティでは、単一の検索タイプしか指定できません。私はいくつかの場所の種類をサポートする必要があり、今では各場所の種類ごとに個別の検索を行い、マージする必要があります。この変更は、私のアプリのパフォーマンスに大きな影響を与えます。上記のアプローチでは、少数の場所のタイプでは1〜3秒、各場所のタイプごとに個別の検索を行うには20〜30秒の間は受け入れられませんでした。

最も近い100の「バー」、「レストラン」、または「カフェ」を得るより良い方法はありますか? Googleの変化に伴い、結果を得るのに10倍の時間がかかります。

アイデアを気に入ってください!さらなるガイダンスが存在しない場合

答えて

0

、私は、次のソリューションを実装することができた...だけ位置、半径、および単一の場所タイプの平行で

  • 起動radarSearchesを含む

    • 使用radarSearch要求関心
    • の各場所の種類ごとradarSearchは、半径を調整し、応答カウントがすべての検索、ソートで、完了したとき
    • 100〜200は、応答の配列をマージするまで再帰的に 自身を呼び出します各radarSearchのための最終的な半径は、同じ種類 その後の検索のためのlocalStorageにキャッシュされている100
    • までの距離、及びスライスは

    結果はかなり良好です。コールドスタート5-6秒、ウォームスタート(キャッシュされた半径値を使用)300-600ms。キャッシュは、アプリセッション内の繰り返しのradarSearchesにも使用されます。これは、リファクタリングに対するかなりの投資があったものの、予想以上の結果でした。

    これを読んでいる訪問者にとっては幸いです。うまくいけば、この追加のフォローアップは役に立ちます。

  • 関連する問題