GoogleMapsで検索する(javascript)

JavaScript

@react-google-maps/apiを利用する前提で以下を書きます。

検索UIを作成する場合、StandaloneSearchBoxコンポーネントを利用できますが、こちらを利用した場合、検索対象のlocationやradiusを絞るなどの渡すパラメータを制御する方法がわかりません。引数にも渡せなさそうなので無理なのか?

<StandaloneSearchBox
    onLoad={onSearchBoxLoad}
    onPlacesChanged={onPlacesChanged}
>
    <input
        type="text"
        placeholder="Search"
    />
</StandaloneSearchBox>
react-google-maps-api/packages/react-google-maps-api/src/components/places/StandaloneSearchBox.tsx at 0bd9291dfefb5fe57cd98fdeb7331532fe88410f · JustFly1984/react-google-maps-api
ReactGoogleMapsAPI.ContributetoJustFly1984/react-google-maps-apidevelopmentbycreatinganaccountonGitHub.

実際問題、google maps apiにはnearby search, text search, find placeなどがあり、もっと汎用的に検索できるはずです。

Place Search  |  Places API  |  Google for Developers
const center = googleMap.current.getCenter()
const service = new google.maps.places.PlacesService(googleMap.current)

service.nearbySearch(
    {
    location: center,
    radius: 5000,
    name: keyword,
    },
    callback,
)

service.textSearch(
    {
    query: keyword,
    location: center,
    radius: 5000,
    },
    callback,
)

service.findPlaceFromQuery(
    {
    query: keyword,
    fields: ['name', 'formatted_address', 'geometry'],
    locationBias: center,
    },
    callback,
)

function callback(
  result: google.maps.places.PlaceResult[] | null,
  status: google.maps.places.PlacesServiceStatus,
  // _pagenation: google.maps.places.PlaceSearchPagination | null,
) {
  if (status !== google.maps.places.PlacesServiceStatus.OK) return

  // resultを使って処理
}

ライブラリをインポートしていればwindowにgoogleプロパティが生えているはずですので、places serviceをnewして後は好きなように検索します。

個人的におすすめはtext searchです。
理由はfind place の場合は一致した1件しか結果を返さないのに対し、
text/nearby searchは曖昧検索した結果を返してきます。

加えて、nearby searchの場合はlocationとradius近傍の検索を優先するため、例えば東北近辺で「名古屋」などと検索しても碌な検索結果がヒットしません。(名古屋市などがヒットせず、店名などに名古屋要素のない謎のお店等がヒットする)

一方でtext searchの場合は指定したlocationから遠方の場合であっても名古屋市などが検索結果に現れ、意図した検索結果を得られやすいです。

コメント