Interfejs Places API może zwracać szczegółowe informacje o konkretnym miejscu. Na tej stronie wyjaśniamy różnice między szczegółami miejsca używanymi w klasie Place
(nowej) i PlacesService
(starszej) oraz podajemy fragmenty kodu do porównania. W tabeli poniżej znajdziesz niektóre główne różnice 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 odpowiedzi google.maps.places.PlacesServiceStatus . |
Korzysta z obietnic i działa asynchronicznie. |
Metody wymagają sprawdzenia PlacesServiceStatus . |
Nie wymaga sprawdzania stanu, może używać standardowej obsługi błędów. |
Pola danych miejsca są sformatowane w sposób snake case. | Pola danych o miejscach są sformatowane w stylu „camel case”. |
Ograniczone do stałego zbioru typów miejsc i pol danych o miejscach. | Zapewnia większą liczbę regularnie aktualizowanych typów miejsc oraz pól danych o miejscach. |
Porównanie kodu
W tej sekcji porównujemy 2 podobie kawałki kodu, aby zilustrować różnice między usługą Places i klasą Place. Fragmenty kodu zawierają kod wymagany w każdym odpowiednim interfejsie API do wysłania żądania dotyczącego szczegółów miejsca, a następnie do użycia otrzymanych danych o miejscu do dodania znacznika na mapie.
Usługa Miejsca (starsza wersja)
Poniższy skrócony fragment kodu pokazuje, jak wysłać żądanie dotyczące szczegółów miejsca za pomocą funkcji PlacesService
. Żądanie używa wywołania zwrotnego i zawiera wymaganą kontrolę warunkową PlacesServiceStatus
. Wymagane pola danych miejsca 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
Miejsce zajęć (nowość)
Ten skrócony fragment kodu pokazuje, jak wysłać żądanie dotyczące szczegółów miejsca za pomocą klasy Place
. Żądanie jest asynchroniczne i nie zawiera sprawdzania stanu (można użyć standardowego sposobu obsługi błędów). Identyfikator miejsca służy do tworzenia nowych instancji Place
, które są używane do wysyłania żądań (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 wewnątrz 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,
});
}