কাছাকাছি অনুসন্ধান (নতুন) এক বা একাধিক স্থানের ধরন নেয় এবং মিলিত স্থানগুলির একটি তালিকা প্রদান করে। নিম্নলিখিত উদাহরণে, আপনি একটি স্থানের ধরন চয়ন করতে পারেন এবং একটি মানচিত্রে ফলাফল দেখতে পারেন৷ স্থানগুলি সম্পর্কে আরও বিশদ দেখতে মার্কারগুলিতে ক্লিক করুন৷
কাছাকাছি অনুসন্ধান (নতুন) আপনার নির্দিষ্ট করা স্থানের ধরনগুলির উপর ভিত্তি করে স্থানগুলির একটি সেট সম্পর্কে তথ্য প্রদান করে — উদাহরণস্বরূপ restaurant
বা book_store
বা bowling_alley
। পরিষেবাটি নির্দিষ্ট locationRestriction
ব্যাসার্ধের মধ্যে নির্দিষ্ট স্থানের প্রকারের সাথে মিলে যাওয়া স্থানগুলির একটি তালিকার সাথে প্রতিক্রিয়া জানায়।
কাছাকাছি অনুসন্ধান (নতুন) ব্যবহার করতে, আপনাকে অবশ্যই আপনার Google ক্লাউড প্রকল্পে "স্থানীয় API (নতুন)" সক্ষম করতে হবে৷ বিস্তারিত জানার জন্য শুরু করুন দেখুন।
কাছাকাছি জায়গা খুঁজুন
নির্দিষ্ট স্থানের ধরন, অবস্থান এবং ব্যাসার্ধের উপর ভিত্তি করে স্থানগুলির একটি তালিকা ফেরত দিতে searchNearby()
এ কল করুন। একটি অনুরোধ ব্যবহার করে অনুসন্ধান পরামিতি নির্দিষ্ট করুন, এবং তারপর searchNearby()
কল করুন। ফলাফলগুলি Place
অবজেক্টের একটি তালিকা হিসাবে ফেরত দেওয়া হয়, যেখান থেকে আপনি স্থানের বিবরণ পেতে পারেন। নিচের স্নিপেটটি একটি অনুরোধের একটি উদাহরণ এবং searchNearby()
:
টাইপস্ক্রিপ্ট
// Get bounds and radius to constrain search. center = mapElement.center; let bounds = innerMap.getBounds(); const ne = bounds.getNorthEast(); const sw = bounds.getSouthWest(); const diameter = spherical.computeDistanceBetween(ne, sw); const radius = Math.min((diameter / 2), 50000); // Radius cannot be more than 50000. const request = { // required parameters fields: ['displayName', 'location', 'formattedAddress', 'googleMapsURI'], locationRestriction: { center, radius, }, // optional parameters includedPrimaryTypes: [typeSelect.value], maxResultCount: 5, rankPreference: SearchNearbyRankPreference.POPULARITY, }; const { places } = await Place.searchNearby(request);
জাভাস্ক্রিপ্ট
// Get bounds and radius to constrain search. center = mapElement.center; let bounds = innerMap.getBounds(); const ne = bounds.getNorthEast(); const sw = bounds.getSouthWest(); const diameter = spherical.computeDistanceBetween(ne, sw); const radius = Math.min((diameter / 2), 50000); // Radius cannot be more than 50000. const request = { // required parameters fields: ['displayName', 'location', 'formattedAddress', 'googleMapsURI'], locationRestriction: { center, radius, }, // optional parameters includedPrimaryTypes: [typeSelect.value], maxResultCount: 5, rankPreference: SearchNearbyRankPreference.POPULARITY, }; const { places } = await Place.searchNearby(request);
- এক বা একাধিক ডেটা ক্ষেত্রের একটি কমা-বিভাজিত তালিকা নির্দিষ্ট করতে
fields
প্যারামিটার (প্রয়োজনীয়) ব্যবহার করুন। - 50,000 মিটার পর্যন্ত ব্যাসার্ধ নির্দিষ্ট করতে
locationRestriction
প্যারামিটার (প্রয়োজনীয়) ব্যবহার করুন। - অনুসন্ধান করার জন্য এক বা একাধিক স্থানের ধরন নির্দিষ্ট করতে
includedPrimaryTypes
প্যারামিটার ব্যবহার করুন। -
POPULARITY
বাDISTANCE
এর একটিSearchNearbyRankPreference
নির্দিষ্ট করতেrankPreference
প্যারামিটার ব্যবহার করুন। - প্যারামিটারের সম্পূর্ণ তালিকা দেখুন।
উদাহরণ
নিম্নলিখিত উদাহরণটি মানচিত্রের সীমার মধ্যে নির্বাচিত প্রকারের স্থানগুলির জন্য অনুসন্ধান করতে searchNearby()
ব্যবহার করে এবং ফলাফলগুলি দেখানোর জন্য মার্কার সহ একটি মানচিত্র তৈরি করে৷
টাইপস্ক্রিপ্ট
const mapElement = document.querySelector('gmp-map') as google.maps.MapElement; let innerMap; const advancedMarkerElement = document.querySelector('gmp-advanced-marker') as google.maps.marker.AdvancedMarkerElement; let center; let typeSelect; let infoWindow; async function initMap() { const { Map, InfoWindow } = await google.maps.importLibrary('maps') as google.maps.MapsLibrary; const { LatLng } = await google.maps.importLibrary("core") as google.maps.CoreLibrary; innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, }); typeSelect = document.querySelector(".type-select"); typeSelect.addEventListener('change', () => { nearbySearch(); }); infoWindow = new InfoWindow(); // Kick off an initial search once map has loaded. google.maps.event.addListenerOnce(innerMap, 'idle', () => { nearbySearch(); }); } async function nearbySearch() { const { Place, SearchNearbyRankPreference } = await google.maps.importLibrary('places') as google.maps.PlacesLibrary; const { AdvancedMarkerElement } = await google.maps.importLibrary("marker") as google.maps.MarkerLibrary; const { spherical } = await google.maps.importLibrary('geometry') as google.maps.GeometryLibrary; // Get bounds and radius to constrain search. center = mapElement.center; let bounds = innerMap.getBounds(); const ne = bounds.getNorthEast(); const sw = bounds.getSouthWest(); const diameter = spherical.computeDistanceBetween(ne, sw); const radius = Math.min((diameter / 2), 50000); // Radius cannot be more than 50000. const request = { // required parameters fields: ['displayName', 'location', 'formattedAddress', 'googleMapsURI'], locationRestriction: { center, radius, }, // optional parameters includedPrimaryTypes: [typeSelect.value], maxResultCount: 5, rankPreference: SearchNearbyRankPreference.POPULARITY, }; const { places } = await Place.searchNearby(request); if (places.length) { const { LatLngBounds } = await google.maps.importLibrary("core") as google.maps.CoreLibrary; const bounds = new LatLngBounds(); // First remove all existing markers. for (const marker of mapElement.querySelectorAll('gmp-advanced-marker')) marker.remove(); // Loop through and get all the results. places.forEach(place => { if (!place.location) return; bounds.extend(place.location); const marker = new AdvancedMarkerElement({ map: innerMap, position: place.location, title: place.displayName, }); // Build the content of the InfoWindow safely using DOM elements. const content = document.createElement('div'); const address = document.createElement('div'); address.textContent = place.formattedAddress || ''; const placeId = document.createElement('div'); placeId.textContent = place.id; content.append(address, placeId); if (place.googleMapsURI) { const link = document.createElement('a'); link.href = place.googleMapsURI; link.target = '_blank'; link.textContent = 'View Details on Google Maps'; content.appendChild(link); } marker.addListener('gmp-click', () => { innerMap.panTo(place.location); updateInfoWindow(place.displayName, content, marker); }); }); innerMap.fitBounds(bounds, 100); } else { console.log('No results'); } } function updateInfoWindow(title, content, anchor) { infoWindow.setContent(content); infoWindow.setHeaderContent(title); infoWindow.open({ anchor, }); } initMap();
জাভাস্ক্রিপ্ট
const mapElement = document.querySelector('gmp-map'); let innerMap; const advancedMarkerElement = document.querySelector('gmp-advanced-marker'); let center; let typeSelect; let infoWindow; async function initMap() { const { Map, InfoWindow } = await google.maps.importLibrary('maps'); const { LatLng } = await google.maps.importLibrary("core"); innerMap = mapElement.innerMap; innerMap.setOptions({ mapTypeControl: false, }); typeSelect = document.querySelector(".type-select"); typeSelect.addEventListener('change', () => { nearbySearch(); }); infoWindow = new InfoWindow(); // Kick off an initial search once map has loaded. google.maps.event.addListenerOnce(innerMap, 'idle', () => { nearbySearch(); }); } async function nearbySearch() { const { Place, SearchNearbyRankPreference } = await google.maps.importLibrary('places'); const { AdvancedMarkerElement } = await google.maps.importLibrary("marker"); const { spherical } = await google.maps.importLibrary('geometry'); // Get bounds and radius to constrain search. center = mapElement.center; let bounds = innerMap.getBounds(); const ne = bounds.getNorthEast(); const sw = bounds.getSouthWest(); const diameter = spherical.computeDistanceBetween(ne, sw); const radius = Math.min((diameter / 2), 50000); // Radius cannot be more than 50000. const request = { // required parameters fields: ['displayName', 'location', 'formattedAddress', 'googleMapsURI'], locationRestriction: { center, radius, }, // optional parameters includedPrimaryTypes: [typeSelect.value], maxResultCount: 5, rankPreference: SearchNearbyRankPreference.POPULARITY, }; const { places } = await Place.searchNearby(request); if (places.length) { const { LatLngBounds } = await google.maps.importLibrary("core"); const bounds = new LatLngBounds(); // First remove all existing markers. for (const marker of mapElement.querySelectorAll('gmp-advanced-marker')) marker.remove(); // Loop through and get all the results. places.forEach(place => { if (!place.location) return; bounds.extend(place.location); const marker = new AdvancedMarkerElement({ map: innerMap, position: place.location, title: place.displayName, }); // Build the content of the InfoWindow safely using DOM elements. const content = document.createElement('div'); const address = document.createElement('div'); address.textContent = place.formattedAddress || ''; const placeId = document.createElement('div'); placeId.textContent = place.id; content.append(address, placeId); if (place.googleMapsURI) { const link = document.createElement('a'); link.href = place.googleMapsURI; link.target = '_blank'; link.textContent = 'View Details on Google Maps'; content.appendChild(link); } marker.addListener('gmp-click', () => { innerMap.panTo(place.location); updateInfoWindow(place.displayName, content, marker); }); }); innerMap.fitBounds(bounds, 100); } else { console.log('No results'); } } function updateInfoWindow(title, content, anchor) { infoWindow.setContent(content); infoWindow.setHeaderContent(title); infoWindow.open({ anchor, }); } initMap();
সিএসএস
/* * Always set the map height explicitly to define the size of the div element * that contains the map. */ gmp-map { height: 100%; } #map-container { display: flex; flex-direction: row; height: 100%; } /* * Optional: Makes the sample page fill the window. */ html, body { height: 100%; margin: 0; padding: 0; } .type-select { width: 400px; height: 32px; border: 1px solid #000; border-radius: 10px; flex-grow: 1; padding: 0 10px; margin-left: 10px; margin-top: 10px; }
এইচটিএমএল
<html> <head> <title>Nearby Search</title> <link rel="stylesheet" type="text/css" href="./style.css" /> <script type="module" src="./index.js"></script> <!-- prettier-ignore --> <script>(g => { var h, a, k, p = "The Google Maps JavaScript API", c = "google", l = "importLibrary", q = "__ib__", m = document, b = window; b = b[c] || (b[c] = {}); var d = b.maps || (b.maps = {}), r = new Set, e = new URLSearchParams, u = () => h || (h = new Promise(async (f, n) => { await (a = m.createElement("script")); e.set("libraries", [...r] + ""); for (k in g) e.set(k.replace(/[A-Z]/g, t => "_" + t[0].toLowerCase()), g[k]); e.set("callback", c + ".maps." + q); a.src = `https://maps.${c}apis.com/maps/api/js?` + e; d[q] = f; a.onerror = () => h = n(Error(p + " could not load.")); a.nonce = m.querySelector("script[nonce]")?.nonce || ""; m.head.append(a) })); d[l] ? console.warn(p + " only loads once. Ignoring:", g) : d[l] = (f, ...n) => r.add(f) && u().then(() => d[l](f, ...n)) }) ({ key: "AIzaSyA6myHzS10YXdcazAFalmXvDkrYCp5cLc8", v: "beta" });</script> </head> <body> <gmp-map center="45.438646,12.327573" zoom="14" map-id="DEMO_MAP_ID"><!-- Map id is required for Advanced Markers. --> <gmp-advanced-marker></gmp-advanced-marker> <div id="controls" slot="control-inline-start-block-start"> <select name="types" class="type-select"> <option value="cafe" selected>Cafe</option> <option value="restaurant">Restaurant</option> <option value="museum">Museum</option> <option value="monument">Monument</option> <option value="park">Park</option> </select> </div> </gmp-map> </body> </html>