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 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.PlacesServiceStatus odpowiedzi. |
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ą formatowane przy użyciu 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ą Places 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 korzysta z wywołania zwrotnego i zawiera wymagane sprawdzenie warunkowe w przypadku 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 o miejscu nie są przekazywane, dopóki nie zostanie wywołana funkcja fetchFields()
, co zapewnia większą elastyczność. Metoda fetchFields()
używa operatora await, więc 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,
});
}