مقدمه
یک درخواست جستجوی نزدیک (جدید) یک یا چند نوع مکان را میگیرد و لیستی از مکانهای منطبق در منطقه مشخص شده را برمیگرداند. یک ماسک فیلد که یک یا چند نوع داده را مشخص میکند، مورد نیاز است. جستجوی نزدیک (جدید) فقط از درخواستهای POST پشتیبانی میکند.
مرورگر APIها به شما امکان میدهد درخواستهای زنده ارسال کنید تا بتوانید با API و گزینههای API آشنا شوید:
برای دیدن نتایج جستجوی نزدیک (جدید) که روی نقشه نمایش داده میشود ، نسخه آزمایشی تعاملی را امتحان کنید.
درخواستهای جستجوی نزدیک (جدید)
یک درخواست جستجوی نزدیک (جدید) یک درخواست HTTP POST به یک URL به شکل زیر است:
https://places.googleapis.com/v1/places:searchNearby
تمام پارامترها را در بدنه درخواست JSON یا در هدرها به عنوان بخشی از درخواست POST ارسال کنید. برای مثال:
curl -X POST -d '{
  "includedTypes": ["restaurant"],
  "maxResultCount": 10,
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965},
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
پاسخهای جستجوی نزدیک (جدید)
جستجوی نزدیک (جدید) یک شیء JSON را به عنوان پاسخ برمیگرداند. در پاسخ:
-  آرایه placesشامل تمام مکانهای منطبق است.
-  هر مکان در آرایه توسط یک شیء Placeنمایش داده میشود. شیءPlaceحاوی اطلاعات دقیقی در مورد یک مکان واحد است.
-  فیلدماسک ارسالی در درخواست، لیست فیلدهای برگردانده شده در شیء Placeرا مشخص میکند.
شیء کامل JSON به شکل زیر است:
{
  "places": [
    {
      object (Place)
    }
  ]
}پارامترهای مورد نیاز
- فیلد ماسک- با ایجاد یک ماسک فیلد پاسخ، لیست فیلدهایی را که باید در پاسخ برگردانده شوند، مشخص کنید. ماسک فیلد پاسخ را با استفاده از پارامتر URL - $fieldsیا- fieldsیا با استفاده از هدر HTTP- X-Goog-FieldMaskبه متد ارسال کنید. هیچ لیست پیشفرضی از فیلدهای برگردانده شده در پاسخ وجود ندارد. اگر ماسک فیلد را حذف کنید، متد خطا برمیگرداند.- ماسک کردن فیلد یک روش طراحی خوب برای اطمینان از عدم درخواست دادههای غیرضروری است که به جلوگیری از زمان پردازش غیرضروری و هزینههای صورتحساب کمک میکند. - لیستی از انواع دادههای مکان که با کاما از هم جدا شدهاند را برای برگرداندن مشخص کنید. به عنوان مثال، برای بازیابی نام نمایشی و آدرس مکان. - X-Goog-FieldMask: places.displayName,places.formattedAddress - برای بازیابی همه فیلدها از - *استفاده کنید.- X-Goog-FieldMask: * - یک یا چند مورد از فیلدهای زیر را مشخص کنید: - فیلدهای زیر SKU مربوط به Nearby Search Pro را فعال میکنند: - places.accessibilityOptions
 - places.addressComponents
 - places.addressDescriptor*
 - places.adrFormatAddress
 - places.attributions
 - places.businessStatus
 - places.containingPlaces
 - places.displayName
 - places.formattedAddress
 - places.googleMapsLinks
 - places.googleMapsUri
 - places.iconBackgroundColor
 - places.iconMaskBaseUri
 - places.id
 - places.location
 - places.name**
 - places.movedPlace
 - places.movedPlaceId
 - places.photos
 - places.plusCode
 - places.postalAddress
 - places.primaryType
 - places.primaryTypeDisplayName
 - places.pureServiceAreaBusiness
 - places.shortFormattedAddress
 - places.subDestinations
 - places.types
 - places.utcOffsetMinutes
 - places.viewport
 * توصیفگرهای آدرس عموماً برای مشتریان در هند در دسترس هستند و در جاهای دیگر آزمایشی میباشند.
 فیلد places.name شامل نام منبع مکان به شکل- places/ PLACE_IDاست. برای دسترسی به نام متنی مکان- places.name- places.displayNameاستفاده کنید.
- فیلدهای زیر SKU جستجوی نزدیک سازمانی را فعال میکنند: - places.currentOpeningHours
 - places.currentSecondaryOpeningHours
 - places.internationalPhoneNumber
 - places.nationalPhoneNumber
 - places.priceLevel
 - places.priceRange
 - places.rating
 - places.regularOpeningHours
 - places.regularSecondaryOpeningHours
 - places.userRatingCount
 - places.websiteUri
- فیلدهای زیر، جستجوی نزدیک Enterprise + Atmosphere SKU را فعال میکنند: - places.allowsDogs
 - places.curbsidePickup
 - places.delivery
 - places.dineIn
 - places.editorialSummary
 - places.evChargeAmenitySummary
 - places.evChargeOptions
 - places.fuelOptions
 - places.generativeSummary
 - places.goodForChildren
 - places.goodForGroups
 - places.goodForWatchingSports
 - places.liveMusic
 - places.menuForChildren
 - places.neighborhoodSummary
 - places.parkingOptions
 - places.paymentOptions
 - places.outdoorSeating
 - places.reservable
 - places.restroom
 - places.reviews
 - places.reviewSummary
 - routingSummaries*
 - places.servesBeer
 - places.servesBreakfast
 - places.servesBrunch
 - places.servesCocktails
 - places.servesCoffee
 - places.servesDessert
 - places.servesDinner
 - places.servesLunch
 - places.servesVegetarianFood
 - places.servesWine
 - places.takeout
 * فقط جستجوی متنی و جستجوی نزدیک
 
- محدودیت مکانی- ناحیه مورد جستجو به صورت یک دایره مشخص شده است که با نقطه مرکز و شعاع بر حسب متر تعریف میشود. شعاع باید بین 0.0 تا 50000.0 باشد. شعاع پیشفرض 0.0 است. شما باید در درخواست خود مقداری بزرگتر از 0.0 برای آن تعیین کنید. - برای مثال: - "locationRestriction": { "circle": { "center": { "latitude": 37.7937, "longitude": -122.3965 }, "radius": 500.0 } } 
پارامترهای اختیاری
- انواع گنجاندهشده/انواع مستثنیشده، انواع اولیه گنجاندهشده/انواع اولیه مستثنیشده- به شما امکان میدهد لیستی از انواع را از انواع جدول A که برای فیلتر کردن نتایج جستجو استفاده میشوند، مشخص کنید. حداکثر ۵۰ نوع را میتوان در هر دسته محدودیت نوع مشخص کرد. - یک مکان فقط میتواند یک نوع اصلی از انواع جدول A مرتبط با خود داشته باشد. برای مثال، نوع اصلی ممکن است - "mexican_restaurant"یا- "steak_house"باشد.- includedPrimaryTypesو- excludedPrimaryTypesبرای فیلتر کردن نتایج بر اساس نوع اصلی یک مکان استفاده کنید.- یک مکان همچنین میتواند چندین مقدار نوع از انواع جدول A مرتبط با خود داشته باشد. برای مثال، یک رستوران ممکن است انواع زیر را داشته باشد: - "seafood_restaurant"،- "restaurant"،- "food"،- "point_of_interest"،- "establishment". از- includedTypesو- excludedTypesبرای فیلتر کردن نتایج در لیست انواع مرتبط با یک مکان استفاده کنید.- وقتی یک نوع اصلی عمومی مانند - "restaurant"یا- "hotel"را مشخص میکنید، پاسخ میتواند شامل مکانهایی با نوع اصلی خاصتر از نوع مشخص شده باشد. برای مثال، شما مشخص میکنید که نوع اصلی- "restaurant"را شامل شود. در این صورت پاسخ میتواند شامل مکانهایی با نوع اصلی- "restaurant"باشد، اما پاسخ همچنین میتواند شامل مکانهایی با نوع اصلی خاصتر مانند- "chinese_restaurant"یا- "seafood_restaurant"باشد.- اگر جستجو با چندین محدودیت نوع مشخص شود، فقط مکانهایی که همه محدودیتها را برآورده میکنند، بازگردانده میشوند. برای مثال، اگر شما - {"includedTypes": ["restaurant"], "excludedPrimaryTypes": ["steak_house"]}را مشخص کنید، مکانهای برگردانده شده خدمات مرتبط با- "restaurant"را ارائه میدهند اما در درجه اول به عنوان- "steak_house"فعالیت نمیکنند.- شاملانواع- فهرستی از انواع مکانها از جدول A که با کاما از هم جدا شدهاند تا جستجو شوند. اگر این پارامتر حذف شود، مکانهایی از همه نوع بازگردانده میشوند. - انواع مستثنی- فهرستی از انواع مکانها از جدول A که با ویرگول از هم جدا شدهاند تا از جستجو مستثنی شوند. - اگر هم - includedTypes(مانند- "school") و هم نوعهای- excludedTypes(مانند- "primary_school") را در درخواست مشخص کنید، پاسخ شامل مکانهایی میشود که به عنوان- "school"طبقهبندی شدهاند اما به عنوان- "primary_school"طبقهبندی نشدهاند. پاسخ شامل مکانهایی است که حداقل با یکی از نوعهای- includedTypesمطابقت دارند و هیچکدام از- excludedTypesشامل نمیشوند.- اگر انواع متناقضی وجود داشته باشد، مانند نوعی که هم در - includedTypesو هم- excludedTypesظاهر میشود، خطای- INVALID_REQUESTبرگردانده میشود.- شامل انواع اولیه- فهرستی از انواع مکانهای اصلی از جدول A که با ویرگول از هم جدا شدهاند تا در جستجو لحاظ شوند. - انواع اولیه مستثنی شده- فهرستی از انواع مکانهای اصلی از جدول A که با ویرگول از هم جدا شدهاند تا از جستجو مستثنی شوند. - اگر انواع اصلی متناقضی وجود داشته باشد، مانند نوعی که هم در - includedPrimaryTypesو هم- excludedPrimaryTypesظاهر میشود، خطای- INVALID_ARGUMENTبرگردانده میشود.
- زبانکد- زبانی که نتایج با آن برگردانده میشوند. - فهرست زبانهای پشتیبانیشده را ببینید. گوگل اغلب زبانهای پشتیبانیشده را بهروزرسانی میکند، بنابراین این فهرست ممکن است جامع نباشد.
-  اگر languageCodeارائه نشود، API به طور پیشفرضenرا در نظر میگیرد. اگر کد زبان نامعتبری را مشخص کنید، API خطایINVALID_ARGUMENTرا برمیگرداند.
- این API تمام تلاش خود را میکند تا آدرسی را ارائه دهد که هم برای کاربر و هم برای افراد محلی قابل خواندن باشد. برای دستیابی به این هدف، آدرسهای خیابان را به زبان محلی برمیگرداند و در صورت لزوم با رعایت زبان ترجیحی، آنها را به اسکریپتی که توسط کاربر قابل خواندن باشد، تبدیل میکند. تمام آدرسهای دیگر به زبان ترجیحی برگردانده میشوند. اجزای آدرس همگی به همان زبانی برگردانده میشوند که از اولین جزء انتخاب شده است.
- اگر نامی در زبان مورد نظر موجود نباشد، API از نزدیکترین مورد منطبق استفاده میکند.
- زبان ترجیحی تأثیر کمی بر مجموعه نتایجی که API برای برگرداندن انتخاب میکند و ترتیب برگرداندن آنها دارد. کدگذار جغرافیایی بسته به زبان، اختصارات را به طور متفاوتی تفسیر میکند، مانند اختصارات مربوط به انواع خیابان یا مترادفهایی که ممکن است در یک زبان معتبر باشند اما در زبان دیگر معتبر نباشند.
 
- حداکثر تعداد نتیجه- حداکثر تعداد نتایج مکانی را که باید برگردانده شود، مشخص میکند. باید بین ۱ تا ۲۰ (پیشفرض) باشد. 
- رتبه بندی- نوع رتبهبندی مورد استفاده. اگر این پارامتر حذف شود، نتایج بر اساس محبوبیت رتبهبندی میشوند. این میتواند یکی از موارد زیر باشد: -  POPULARITY(پیشفرض) نتایج را بر اساس محبوبیت آنها مرتب میکند.
-  تابع DISTANCEنتایج را بر اساس فاصلهشان از مکان مشخصشده به صورت صعودی مرتب میکند.
 
-  
- کد منطقه- کد منطقهای مورد استفاده برای قالببندی پاسخ، که به عنوان یک مقدار کد CLDR دو کاراکتری مشخص شده است. مقدار پیشفرضی وجود ندارد. - اگر نام کشور فیلد - formattedAddressدر پاسخ با- regionCodeمطابقت داشته باشد، کد کشور از- formattedAddressحذف میشود. این پارامتر هیچ تاثیری بر- adrFormatAddressکه همیشه شامل نام کشور است، یا- shortFormattedAddressکه هرگز شامل آن نمیشود، ندارد.- بیشتر کدهای CLDR با کدهای ISO 3166-1 یکسان هستند، به جز برخی استثنائات قابل توجه. برای مثال، ccTLD بریتانیا "uk" (.co.uk) است در حالی که کد ISO 3166-1 آن "gb" است (از نظر فنی برای موجودیت "پادشاهی متحده بریتانیای کبیر و ایرلند شمالی"). این پارامتر میتواند بر اساس قانون مربوطه بر نتایج تأثیر بگذارد. 
مثالهای جستجوی نزدیک (جدید)
مکانهایی از یک نوع پیدا کنید
 مثال زیر یک درخواست جستجوی نزدیک (جدید) برای نمایش نام تمام رستورانها در شعاع ۵۰۰ متری، که با circle تعریف شده است، نشان میدهد:
curl -X POST -d '{
  "includedTypes": ["restaurant"],
  "maxResultCount": 10,
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965},
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
 توجه داشته باشید که هدر X-Goog-FieldMask مشخص میکند که پاسخ شامل فیلدهای داده زیر است: places.displayName . در این صورت، پاسخ به شکل زیر خواهد بود:
{ "places": [ { "displayName": { "text": "La Mar Cocina Peruana", "languageCode": "en" } }, { "displayName": { "text": "Kokkari Estiatorio", "languageCode": "en" } }, { "displayName": { "text": "Harborview Restaurant & Bar", "languageCode": "en" } }, ... }
 برای برگرداندن اطلاعات بیشتر، انواع داده بیشتری را به ماسک فیلد اضافه کنید. برای مثال، places.formattedAddress,places.types,places.websiteUri را اضافه کنید تا آدرس، نوع و آدرس وب رستوران در پاسخ گنجانده شود:
curl -X POST -d '{
  "includedTypes": ["restaurant"],
  "maxResultCount": 10,
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965},
      "radius": 500.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName,places.formattedAddress,places.types,places.websiteUri" \
https://places.googleapis.com/v1/places:searchNearby
پاسخ اکنون به این شکل است:
{ "places": [ { "types": [ "seafood_restaurant", "restaurant", "food", "point_of_interest", "establishment" ], "formattedAddress": "PIER 1 1/2 The Embarcadero N, San Francisco, CA 94105, USA", "websiteUri": "http://lamarsf.com/", "displayName": { "text": "La Mar Cocina Peruana", "languageCode": "en" } }, { "types": [ "greek_restaurant", "meal_takeaway", "restaurant", "food", "point_of_interest", "establishment" ], "formattedAddress": "200 Jackson St, San Francisco, CA 94111, USA", "websiteUri": "https://kokkari.com/", "displayName": { "text": "Kokkari Estiatorio", "languageCode": "en" } }, ... }
مکانهایی با انواع مختلف پیدا کنید
 مثال زیر یک درخواست جستجوی نزدیک (جدید) برای نمایش نام تمام فروشگاههای رفاه و فروشگاههای مشروبات الکلی در شعاع ۱۰۰۰ متری circle مشخص شده را نشان میدهد: 
curl -X POST -d '{
  "includedTypes": ["liquor_store", "convenience_store"],
  "maxResultCount": 10,
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965
      },
      "radius": 1000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName,places.primaryType,places.types" \
https://places.googleapis.com/v1/places:searchNearby
places.primaryType و places.types را به ماسک فیلد اضافه میکند تا پاسخ شامل اطلاعات نوع مربوط به هر مکان باشد و انتخاب مکان مناسب از نتایج را آسانتر کند.حذف نوع مکان از جستجو
 مثال زیر یک درخواست جستجوی نزدیک (جدید) را برای همه مکانهای از نوع "school" نشان میدهد، به استثنای همه مکانهای از نوع "primary_school" ، که نتایج را بر اساس فاصله رتبهبندی میکند: 
curl -X POST -d '{
  "includedTypes": ["school"],
  "excludedTypes": ["primary_school"],
  "maxResultCount": 10,
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965
      },
      "radius": 1000.0
    }
  },
  "rankPreference": "DISTANCE"
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
جستجوی همه مکانهای نزدیک به یک منطقه، رتبهبندی بر اساس فاصله
 مثال زیر یک درخواست جستجوی نزدیک (جدید) برای مکانهای نزدیک به یک نقطه در مرکز شهر سانفرانسیسکو را نشان میدهد. در این مثال، شما پارامتر rankPreference را برای رتبهبندی نتایج بر اساس فاصله وارد میکنید: 
curl -X POST -d '{
  "maxResultCount": 10,
  "rankPreference": "DISTANCE",
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.7937,
        "longitude": -122.3965
      },
      "radius": 1000.0
    }
  }
}' \
-H 'Content-Type: application/json' -H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName" \
https://places.googleapis.com/v1/places:searchNearby
دریافت توصیفگرهای آدرس
توصیفگرهای آدرس، اطلاعات نسبی در مورد موقعیت مکانی یک مکان، از جمله نشانههای نزدیک و مناطق اطراف آن را ارائه میدهند.
 مثال زیر یک درخواست جستجوی نزدیک (جدید) برای مکانهای نزدیک یک مرکز خرید در سن خوزه را نشان میدهد. در این مثال، شما addressDescriptors در فیلد mask قرار میدهید: 
curl -X POST -d '{
  "maxResultCount": 5,
  "locationRestriction": {
    "circle": {
      "center": {
        "latitude": 37.321328,
        "longitude": -121.946275
      },"radius": 1000
    }
  },
  "includedTypes": ["restaurant", "cafe"],
  "excludedTypes": [],
  "rankPreference":"POPULARITY"
}' \
-H 'Content-Type: application/json' \
-H "X-Goog-Api-Key: API_KEY" \
-H "X-Goog-FieldMask: places.displayName,places.addressDescriptor" \
https://places.googleapis.com/v1/places:searchNearby
پاسخ شامل مکان مشخص شده در درخواست، فهرستی از مکانهای دیدنی نزدیک و فاصله آنها از مکان، و فهرستی از مناطق و ارتباط آنها با مکان است:
{ "places": [ { "displayName": { "text": "Westfield Valley Fair", "languageCode": "en" }, "addressDescriptor": { "landmarks": [ { "name": "places/ChIJ62_oCR7Lj4AR_MGWkSPotD4", "placeId": "ChIJ62_oCR7Lj4AR_MGWkSPotD4", "displayName": { "text": "Nordstrom", "languageCode": "en" }, "types": [ "clothing_store", "department_store", "establishment", "point_of_interest", "shoe_store", "store" ], "straightLineDistanceMeters": 114.76984, "travelDistanceMeters": 114.261856 }, { "name": "places/ChIJgexMlR_Lj4ARiKCKuhNnjn0", "placeId": "ChIJgexMlR_Lj4ARiKCKuhNnjn0", "displayName": { "text": "Valley Fair Mall Eyexam of CA", "languageCode": "en" }, "types": [ "establishment", "health", "point_of_interest" ], "straightLineDistanceMeters": 131.62566, "travelDistanceMeters": 237.33253 }, { "name": "places/ChIJWWIlNx7Lj4ARpe1E0ob-_GI", "placeId": "ChIJWWIlNx7Lj4ARpe1E0ob-_GI", "displayName": { "text": "Din Tai Fung", "languageCode": "en" }, "types": [ "establishment", "food", "point_of_interest", "restaurant" ], "straightLineDistanceMeters": 110.0775, "travelDistanceMeters": 171.41951 }, { "name": "places/ChIJwyfPQx7Lj4AR7bYI2A2Yc54", "placeId": "ChIJwyfPQx7Lj4AR7bYI2A2Yc54", "displayName": { "text": "Abercrombie & Fitch", "languageCode": "en" }, "types": [ "clothing_store", "establishment", "point_of_interest", "shoe_store", "store" ], "spatialRelationship": "DOWN_THE_ROAD", "straightLineDistanceMeters": 53.620117, "travelDistanceMeters": 2.4578214 }, { "name": "places/ChIJpycNQx7Lj4ARjhXw3PrM_kU", "placeId": "ChIJpycNQx7Lj4ARjhXw3PrM_kU", "displayName": { "text": "Hollister Co.", "languageCode": "en" }, "types": [ "clothing_store", "establishment", "point_of_interest", "shoe_store", "store" ], "spatialRelationship": "DOWN_THE_ROAD", "straightLineDistanceMeters": 56.53726, "travelDistanceMeters": 15.418246 } ], "areas": [ { "name": "places/ChIJb3F-EB7Lj4ARnHApQ_Hu1gI", "placeId": "ChIJb3F-EB7Lj4ARnHApQ_Hu1gI", "displayName": { "text": "Westfield Valley Fair", "languageCode": "en" }, "containment": "WITHIN" }, { "name": "places/ChIJXYuykB_Lj4AR1Ot8nU5q26Q", "placeId": "ChIJXYuykB_Lj4AR1Ot8nU5q26Q", "displayName": { "text": "Valley Fair", "languageCode": "en" }, "containment": "WITHIN" }, { "name": "places/ChIJtYoUX2DLj4ARKoKOb1G0CpM", "placeId": "ChIJtYoUX2DLj4ARKoKOb1G0CpM", "displayName": { "text": "Central San Jose", "languageCode": "en" }, "containment": "OUTSKIRTS" } ] } }, /.../ }
امتحانش کن!
مرورگر APIها به شما امکان میدهد درخواستهای نمونه ایجاد کنید تا با API و گزینههای API آشنا شوید.
- آیکون API یعنی api را در سمت راست صفحه انتخاب کنید. 
- در صورت تمایل، پارامترهای درخواست را ویرایش کنید. 
- دکمه اجرا را انتخاب کنید. در کادر محاورهای، حسابی را که میخواهید برای ارسال درخواست استفاده کنید، انتخاب کنید. 
- در پنل APIs Explorer، آیکون تمام صفحه را در حالت تمام صفحه انتخاب کنید تا پنجره APIs Explorer باز شود.