Bandara adalah kompleks multi-terminal yang besar dan navigasi yang akurat sangat penting untuk kedatangan dan keberangkatan tepat waktu. Google Maps Geocoding API biasanya akan menampilkan koordinat (Lintang/Bujur) yang dalam sebagian besar kasus adalah sentroid kompleks bandara besar. Aplikasi ini adalah alat interaktif yang dirancang khusus untuk membantu pengguna menentukan dan memvisualisasikan lokasi yang akurat dalam tempat yang lebih besar dan kompleks seperti terminal tertentu atau titik penjemputan/pengantaran di dalam Bandara.
Berikut cara kerjanya:
Penelusuran Bandara/Tempat: Pengguna memulai dengan menelusuri lokasi utama (misalnya, "Bandara Internasional Indira Gandhi") menggunakan input Google Places Autocomplete, yang dibatasi untuk India.
Penemuan Sub-Lokasi: Setelah lokasi utama dipilih, skrip menggunakan Google Places API untuk mengambil detail, termasuk semua "sub-tujuan" yang tercantum dan terkait dengan tempat tersebut (seperti Terminal 1, Terminal 3, gerbang tertentu, dll., jika tersedia di data Google).
Pemetaan Visual: Skrip menggunakan Geocoding API untuk menemukan koordinat lokasi utama dan sub-tujuannya.
Kemudian, peta akan menampilkan lokasi utama dan menempatkan penanda yang berbeda dan dapat diklik (lingkaran biru) di peta untuk setiap sub-tujuan yang diidentifikasi.
Identifikasi yang Akurat: Mengklik penanda sub-tujuan akan menandainya
(berubah menjadi hijau) dan membuka InfoWindow yang menampilkan nama dan detail
lainnya yang tersedia (seperti alamat atau jenis), sehingga pengguna dapat mengonfirmasi bahwa mereka telah memilih titik tertentu yang benar.
Tampilan Kontekstual: Peta secara otomatis menyesuaikan tampilannya (fitBounds
) untuk
memastikan semua penanda yang relevan (lokasi utama + sub-tujuan) terlihat
jelas.
API Google Maps Platform di Aplikasi Navigasi Bandara
Dokumen ini menjelaskan API utama Google Maps Platform dan parameter yang digunakan dalam aplikasi demo "Navigate to Airport" yang disediakan. Aplikasi ini memanfaatkan beberapa layanan untuk menyediakan tampilan peta, penelusuran tempat, informasi tempat yang mendetail, dan insight lokasi lanjutan.
1. Inisialisasi dan Tampilan Peta
Dasar aplikasi ini adalah peta interaktif itu sendiri.
- API yang Digunakan:
google.maps.Map
(dari Maps JavaScript API) - Tujuan: Untuk membuat dan menampilkan peta interaktif di halaman web.
- Parameter Utama:
center
: Menentukan pusat geografis awal peta. Di aplikasi ini, awalnya disetel ke koordinat Delhi ({ lat: 28.461835685621395, lng: 77.05004035761647 }
).zoom
: Menetapkan tingkat zoom awal peta.DEFAULT_ZOOM_LEVEL
(15) digunakan untuk tampilan close-up.mapId
: ID unik untuk gaya peta yang dikonfigurasi di Konsol Google Cloud.
2. Place Search dan Autocomplete
Fungsi kotak penelusuran didukung oleh Places API.
- API yang Digunakan:
google.maps.places.Autocomplete
(dari Places Library di Maps JavaScript API) - Tujuan: Menyediakan penyelesaian teks prediktif untuk penelusuran geografis saat pengguna mengetik, menyarankan tempat yang relevan seperti bandara.
- Parameter Utama:
input
: Elemen input HTML (#search-input
) tempat pengguna mengetik kueri mereka.componentRestrictions
: Memfilter hasil penelusuran ke negara tertentu. Di sini,{ country: 'in' }
membatasi hasil ke India.fields
: Menentukan kolom data yang akan ditampilkan untuk tempat yang dipilih.['place_id']
digunakan pada awalnya untuk hanya mengambil ID unik tempat, sehingga mengoptimalkan transfer data.
- Cara menggunakan Pelengkapan Otomatis
// Initialize Autocomplete
const autocomplete = new google.maps.places.Autocomplete(input, {
componentRestrictions: { country: 'in' },
fields: ['place_id'],
});
// Add listener to the Autocomplete
autocomplete.addListener('place_changed', async () => {
const place = autocomplete.getPlace();
if (!place.place_id) {
return;
}
// Once a place is selected, fetch details
await getPlaceDetails(place.place_id);
});
3. Mengambil Informasi Tempat Mendetail dan Menangani Sub-Tujuan
Setelah tempat dipilih dari saran pelengkapan otomatis, detail yang lebih komprehensif akan diambil.
- API yang Digunakan: Places API (melalui panggilan
fetch
langsung kehttps://places.googleapis.com/v1/places/{placeId}
) - Tujuan: Untuk mengambil detail lengkap tentang tempat tertentu, termasuk nama tampilannya, alamat, jenis, dan yang paling penting,
subDestinations
-nya (misalnya, terminal individual atau area penting dalam kompleks yang lebih besar seperti bandara). - Parameter Utama dalam URL:
{placeId}
: ID unik tempat yang dipilih.fields
: Menentukan kolom data yang tepat untuk diambil. Aplikasi memintaid
,displayName
,subDestinations
,types
, danformattedAddress
. Hal ini sangat penting untuk mengontrol biaya dan menerima hanya data yang diperlukan.
- Cara mendapatkan
subDestinations
berdasarkan lokasi
async function getPlaceDetails(placeId) {
// Construct the URL for the Places API (v1) details endpoint
// The 'fields' parameter is crucial for requesting subDestinations
const url = `https://places.googleapis.com/v1/places/${placeId}?key=YOUR_API_KEY&fields=id,displayName,subDestinations,types,formattedAddress`;
const response = await fetch(url);
const data = await response.json();
// Accessing subDestinations from the Places API response
if (data.subDestinations && data.subDestinations.length > 0) {
for (const subDestination of data.subDestinations) {
// Each subDestination object contains an 'id' and 'displayName'
console.log(`Sub-destination ID: ${subDestination.id}`);
console.log(`Sub-destination Name: ${subDestination.displayName?.text}`);
// This subDestination.id is then used in a geocoding call (as shown in section 4)
}
}
}
**Handling `subDestinations`:** When the Places API returns
`subDestinations`, the application initiates a process for each one:
1. **Geocoding:** It uses the `google.maps.Geocoder` to convert
each `subDestination.id` into its precise geographical coordinates
(`lat`, `lng`).
1. **Marker Placement:** A distinct marker is added to the map for
each sub-destination. These markers are styled with a blue circle icon
to differentiate them.
1. **Map Bounds Adjustment:** The `google.maps.LatLngBounds` object
is used to dynamically expand the map's view to encompass all retrieved
sub-destinations, verifying they are all visible within the current map
frame.
1. **Interactive Information Window:** A `click` listener is
attached to each sub-destination marker. When clicked, the marker's
icon changes to green, and an `InfoWindow` appears, displaying the
sub-destination's name, address, and types. This provides immediate,
detailed context to the user.
4. Geocoding dan Geocoding Terbalik: Mengambil Detail untuk Sub-Tujuan
Aplikasi menggunakan geocoding untuk dua tujuan utama: mengonversi ID tempat menjadi koordinat dan mengonversi koordinat kembali menjadi detail lokasi. Bagian ini secara khusus menyoroti cara geocoding digunakan untuk mendapatkan informasi mendetail tentang sub-tujuan.
- API yang Digunakan:
google.maps.Geocoder
(dari Maps JavaScript API) dan Geocoding API (melalui panggilanfetch
langsung kehttps://maps.googleapis.com/maps/api/geocode/json
) - Tujuan:
google.maps.Geocoder
: Digunakan untuk mengonversiplaceId
(diperoleh dari Autocomplete atau Places API) menjadi koordinat geografis (lat
,lng
) dan area tampilan, sehingga peta dapat memusatkan dan melakukan zoom dengan benar pada tempat yang dipilih dan sub-tujuannya.- Geocoding API (
fetch
): Digunakan untuk geocoding terbalik (mengonversi garis lintang dan bujur menjadi alamat yang mudah dibaca) dan untuk mengambil data lokasi lanjutan seperti garis batas bangunan dan titik navigasi.
- Parameter Utama:
google.maps.Geocoder.geocode()
:placeId
: ID Tempat untuk geocode.location
: ObjekLatLng
untuk geocoding balik.
- Panggilan Geocoding API
fetch
:latlng
: Koordinat garis lintang dan bujur untuk geocoding terbalik.extra_computations=BUILDING_AND_ENTRANCES
: Parameter penting ini meminta data tambahan, khususnya jejak bangunan dan informasi pintu masuk, yang kemudian digunakan untuk menampilkan garis luar bangunan dan titik navigasi.
Cara menggunakan ID subDestination
untuk mengambil detail lebih lanjut (misalnya, lokasi,
alamat yang diformat, jenis)
function geocodeAndAddMarker(subDestination, bounds) {
return new Promise((resolve, reject) => {
const geocoder = new google.maps.Geocoder();
// Using the subDestination.id to geocode and get location details
geocoder.geocode({ placeId: subDestination.id }, (results, status) => {
if (status === "OK" && results[0]) {
const location = results[0].geometry.location;
const displayName = subDestination.displayName?.text || "Sub-destination";
const formattedAddress = results[0].formatted_address; // Further detail from Geocoding
const types = results[0].types; // Further detail from Geocoding
const marker = new google.maps.Marker({
map: map,
position: location,
title: displayName,
icon: {
path: google.maps.SymbolPath.CIRCLE,
fillColor: 'blue',
fillOpacity: 0.6,
strokeWeight: 0,
scale: 8
}
});
marker.addListener('click', () => {
marker.setIcon({
path: google.maps.SymbolPath.CIRCLE,
fillColor: 'green',
fillOpacity: 0.6,
strokeWeight: 0,
scale: 8
});
const infowindow = new google.maps.InfoWindow({
content: `<b>${displayName}</b><br><p>Address: ${formattedAddress}</p><p>Types: ${types.join(', ')}</p>`,
});
infowindow.open(map, marker);
});
bounds.extend(location);
resolve(true);
} else {
reject(new Error(`Geocoding failed for placeId: ${subDestination.id}`));
}
});
});
}
5. Menampilkan Penanda
Penanda digunakan untuk menandai lokasi tertentu di peta.
- API yang Digunakan:
google.maps.Marker
(dari Maps JavaScript API) dangoogle.maps.marker.AdvancedMarkerElement
dengangoogle.maps.marker.PinElement
(dari Marker Library Maps JavaScript API) - Tujuan:
google.maps.Marker
: Digunakan untuk penanda yang dapat ditarik awal (meskipundraggable
disetel kefalse
dalam kode yang diberikan, ini adalah bagian dari kemampuannya) dan untuk penanda sub-tujuan dasar seperti yang dijelaskan di bagian 3.AdvancedMarkerElement
danPinElement
: Digunakan untuk penanda titik navigasi yang lebih berbeda secara visual, sehingga memungkinkan penataan gaya kustom pin penanda.
- Parameter Utama:
position
: KoordinatLatLng
tempat penanda akan ditempatkan.map
: Instance peta tempat penanda akan ditampilkan.title
: Teks yang ditampilkan saat mengarahkan kursor ke penanda.icon
: Memungkinkan ikon kustom untukgoogle.maps.Marker
(misalnya,google.maps.SymbolPath.CIRCLE
dengan warna kustom).content
: UntukAdvancedMarkerElement
, hal ini memungkinkan penyematan konten HTML kustom, termasukPinElement
untuk pin yang telah diberi gaya.- Parameter
PinElement
:background
,borderColor
,glyphColor
,scale
untuk penyesuaian visual.
6. Menampilkan Kerangka Bangunan
Aplikasi dapat merepresentasikan jejak bangunan secara visual.
- API yang Digunakan:
google.maps.Data
(dari Maps JavaScript API) - Tujuan: Untuk menampilkan data geografis, seperti garis batas bangunan (ditampilkan sebagai GeoJSON
display_polygon
dariextra_computations
Geocoding API). - Parameter Utama:
map
: Instance peta tempat lapisan data diterapkan.style
: Menentukan tampilan visual fitur GeoJSON (misalnya,strokeColor
,fillColor
,fillOpacity
).addGeoJson()
: Metode untuk menambahkan data GeoJSON ke lapisan.
7. Batas Peta dan Zoom
memverifikasi tampilan peta mencakup semua lokasi yang relevan.
- API yang Digunakan:
google.maps.LatLngBounds
(dari Maps JavaScript API) - Tujuan: Untuk menyesuaikan area tampilan peta secara dinamis agar sesuai dengan kumpulan titik geografis (misalnya, tempat utama dan semua sub-tujuannya).
- Metode Utama:
extend(location)
: Menambahkan titikLatLng
ke batas, memperluasnya jika perlu.fitBounds(bounds)
: Menyesuaikan pusat dan tingkat zoom peta untuk menampilkan seluruh area yang ditentukan oleh objekLatLngBounds
.
Dengan menggabungkan API Google Maps Platform ini, aplikasi memberikan pengalaman yang komprehensif dan interaktif untuk menelusuri tempat, melihat detailnya, dan memvisualisasikan informasi geografis terkait seperti sub-tujuan dan garis batas bangunan.
Pertimbangan Penerapan Perhatikan bahwa fitur ini tidak berfungsi di semua area bandara dan bergantung pada ketersediaan data (terminal bandara).
Referensi Geocoding API Places API Maps JavaScript API
Penulis: