UNPKG

@googlemaps/google-maps-services-js

Version:

Node.js client library for Google Maps API Web Services

141 lines (131 loc) 5.17 kB
/** * Copyright 2020 Google LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { AxiosInstance, AxiosRequestConfig, AxiosResponse } from "axios"; import { Language, LatLng, Place, RequestParams, ResponseData, } from "../common"; import { latLngToString, serializer } from "../serialize"; import { defaultAxiosInstance } from "../client"; export enum PlacesNearbyRanking { /** * This option sorts results based on their importance. Ranking will favor prominent places within the specified area. * Prominence can be affected by a place's ranking in Google's index, global popularity, and other factors. */ prominence = "prominence", /** * This option biases search results in ascending order by their distance from the specified `location`. * When distance is specified, one or more of `keyword`, `name`, or `type` is required. */ distance = "distance", } export interface PlacesNearbyRequest extends Partial<AxiosRequestConfig> { params: { /** The latitude/longitude around which to retrieve place information. This must be specified as latitude,longitude. */ location: LatLng; /** * Defines the distance (in meters) within which to return place results. * The maximum allowed radius is 50 000 meters. * Note that `radius` must not be included if `rankby=distance` is specified. */ radius?: number; /** * A term to be matched against all content that Google has indexed for this place, including but not limited to * name, type, and address, as well as customer reviews and other third-party content. */ keyword?: string; /** * The language code, indicating in which language the results should be returned, if possible. * Note that we often update supported languages so this list may not be exhaustive. */ language?: Language; /** * Restricts results to only those places within the specified range. * Valid values range between 0 (most affordable) to 4 (most expensive), inclusive. * The exact amount indicated by a specific value will vary from region to region. */ minprice?: number; /** * Restricts results to only those places within the specified range. * Valid values range between 0 (most affordable) to 4 (most expensive), inclusive. * The exact amount indicated by a specific value will vary from region to region. */ maxprice?: number; /** * A term to be matched against all content that Google has indexed for this place. * Equivalent to `keyword`. The `name` field is no longer restricted to place names. * Values in this field are combined with values in the `keyword` field and passed as part of the same search string. * We recommend using only the `keyword` parameter for all search terms. */ name?: string; /** * Returns only those places that are open for business at the time the query is sent. * Places that do not specify opening hours in the Google Places database will not be returned if you include this parameter in your query. */ opennow?: boolean; /** * Specifies the order in which results are listed. * Note that `rankby` must not be included if `radius` is specified. * * @default PlacesNearbyRanking.prominence */ rankby?: PlacesNearbyRanking; /** * Restricts the results to places matching the specified type. * Only one type may be specified (if more than one type is provided, all types following the first entry are ignored). */ type?: string; /** * Returns the next 20 results from a previously run search. * Setting a pagetoken parameter will execute a search with the same parameters used previously — * all parameters other than pagetoken will be ignored. */ pagetoken?: string; } & RequestParams; } export interface PlacesNearbyResponseData extends ResponseData { results: Place[]; } export interface PlacesNearbyResponse extends AxiosResponse { data: PlacesNearbyResponseData; } export const defaultUrl = "https://maps.googleapis.com/maps/api/place/nearbysearch/json"; export const defaultParamsSerializer = serializer( { location: latLngToString }, defaultUrl ); export function placesNearby( { params, method = "get", url = defaultUrl, paramsSerializer = defaultParamsSerializer, ...config }: PlacesNearbyRequest, axiosInstance: AxiosInstance = defaultAxiosInstance ): Promise<PlacesNearbyResponse> { return axiosInstance({ params, method, url, paramsSerializer, ...config, }) as Promise<PlacesNearbyResponse>; }