Interfejs Places API może zwracać szczegółowe informacje o konkretnym miejscu. Na tej stronie znajdziesz wyjaśnienie różnic między szczegółami miejsca używanymi w klasie Place (nowej) i PlacesService (starszej) oraz fragmenty kodu do porównania. W tabeli poniżej znajdziesz niektóre z głównych różnic w używaniu szczegółów miejsca między klasą Place a PlacesService:
PlacesService (starsza wersja) |
Place (Nowy) |
|---|---|
getDetails() |
fetchFields() |
PlaceDetailsRequest |
FetchFieldsRequest |
Metody wymagają użycia wywołania zwrotnego do obsługi obiektu wyników i google.maps.places.PlacesServiceStatusodpowiedzi. |
Korzysta z obiektów Promise i działa asynchronicznie. |
Metody wymagają sprawdzenia PlacesServiceStatus. |
Nie wymaga sprawdzania stanu, można użyć standardowej obsługi błędów. Więcej informacji |
| Pola danych o miejscach są sformatowane w notacji snake case. | Pola danych o miejscu są sformatowane w notacji camel case. |
| Ograniczone do stałego zestawu typów miejsc i pól danych o miejscach. | Zapewnia rozszerzony wybór regularnie aktualizowanych typów miejsc i pól danych o miejscach. |
Porównanie kodu
W tej sekcji porównujemy 2 podobne fragmenty kodu, aby zilustrować różnice między usługą Miejsca a klasą Place. Fragmenty kodu pokazują kod wymagany w poszczególnych interfejsach API do wysłania żądania szczegółów miejsca, a następnie wykorzystują uzyskane dane o miejscu do dodania znacznika na mapie.
Usługa Miejsca (starsza wersja)
Poniższy skrócony fragment kodu pokazuje, jak wysłać żądanie szczegółów miejsca za pomocą PlacesService. Żądanie używa wywołania zwrotnego i zawiera wymagane sprawdzenie warunkowe w przypadku parametru PlacesServiceStatus. Wymagane pola danych o miejscu są określone w treści żądania.
function getPlaceDetails() {
// Instantiate the Places Service.
const service = new google.maps.places.PlacesService(map);
// Make a request using the Place ID.
const request = {
placeId: "ChIJN1t_tDeuEmsRUsoyG83frY4",
fields: ["name", "formatted_address", "place_id", "geometry"],
};
// Request place details.
service.getDetails(request, (place, status) => {
// Check whether PlacesServiceStatus is OK.
if (
status === google.maps.places.PlacesServiceStatus.OK &&
place &&
place.geometry &&
place.geometry.location
) {
// Log the result.
console.log(place.name);
console.log(place.formatted_address);
// Add a marker for the place.
const marker = new google.maps.Marker({
map,
position: place.geometry.location,
title: place.name,
});
}
});
}
Więcej informacji
Klasa miejsca (nowa)
Poniższy skrócony fragment kodu pokazuje, jak wysłać żądanie szczegółów miejsca za pomocą klasy Place. Żądanie jest asynchroniczne i nie obejmuje sprawdzania stanu (można użyć standardowej obsługi błędów). Identyfikator miejsca służy do tworzenia nowego wystąpienia Place, które jest używane do wysyłania żądania (fetchFields()). Wymagane pola danych miejsca nie są przekazywane, dopóki nie zostanie wywołana funkcja fetchFields(), co zapewnia większą elastyczność. Metoda fetchFields() używa operatora await, dlatego można jej używać tylko w funkcji async.
async function getPlaceDetails() {
// Use place ID to create a new Place instance.
const place = new google.maps.places.Place({
id: "ChIJN5Nz71W3j4ARhx5bwpTQEGg",
requestedLanguage: "en", // optional
});
// Call fetchFields, passing the needed data fields.
await place.fetchFields({
fields: ["displayName", "formattedAddress", "location"],
});
// Log the result.
console.log(place.displayName);
console.log(place.formattedAddress);
// Add an Advanced Marker.
const marker = new google.maps.marker.AdvancedMarkerElement({
map,
position: place.location,
title: place.displayName,
});
}