Tujuan
Menemukan lokasi yang ideal, baik hotel untuk liburan mendatang maupun apartemen yang cocok untuk keluarga, sering kali melibatkan proses yang melelahkan dan memakan waktu untuk membandingkan berbagai opsi. Bagaimana jika Anda dapat membantu mempermudah hal ini bagi pengguna dengan memberikan metrik yang disesuaikan yang menunjukkan kesesuaian hotel untuk wisatawan atau memberi peringkat listingan apartemen berdasarkan kesesuaiannya untuk keluarga, sehingga mengubah tugas yang membosankan menjadi keputusan yang mudah.
Dokumen ini menjelaskan cara menggunakan Places Aggregate API untuk menghasilkan skor lokasi kustom yang dinamis, berdasarkan kepadatan tempat dalam area geografis yang ditentukan. Skor, yang merupakan peringkat numerik berdasarkan kriteria yang Anda tentukan, akan langsung mengomunikasikan seberapa sesuai lokasi tersebut dengan kebutuhan mereka.
Bayangkan skenario saat Anda mempromosikan hotel di suatu kota dan ingin menyoroti hotel di area wisata yang paling menarik dengan membuat skor cocok untuk wisatawan. Gunakan Places Aggregate API untuk menghitung jumlah jenis tempat yang relevan di dekat setiap hotel. Misalnya, Anda tahu bahwa pelanggan Anda menghargai hotel di lokasi yang dekat dengan sejumlah hal berikut:
- Restoran & Kedai kopi
- Taman & Museum
- Toko pakaian
Dengan menerapkan bobot kepentingan pada jumlah jenis tempat yang dipilih ini, Anda dapat menghitung skor keseluruhan untuk setiap lokasi hotel. Skor ini mencerminkan kesesuaian keseluruhan lokasi, berdasarkan tempat-tempat terdekat. Pembobotan yang ditetapkan untuk setiap jenis tempat harus sesuai dengan kasus penggunaan spesifik Anda dan hal yang penting bagi audiens target Anda. Dokumen ini akan menggunakan skor cocok untuk wisatawan sebagai contoh utama, tetapi skor Anda dapat dibuat untuk mencerminkan demografi dan kebutuhan pengguna Anda.
Prasyarat
Sebelum membaca dokumen ini, sebaiknya pahami dokumentasi berikut:
- Dokumentasi developer Places Aggregate API untuk memahami detail teknis dan parameter yang tersedia.
- [Opsional] Dokumentasi developer Gemini Developer API untuk memahami cara memanggil Gemini menggunakan API dan digunakan dalam dokumen ini sebagai opsi untuk membuat skor lokasi kustom.
Memilih jenis tempat yang relevan
Langkah pertama untuk membuat skor lokasi kustom adalah menentukan jenis tempat yang relevan bagi pelanggan Anda dari Tabel A. Karena kita membuat skor bagus untuk turis, kita telah memilih jenis tempat berikut yang ingin dikunjungi turis selama mereka menginap:
- restoran
- taman
- clothing_store
- museum
- coffee_shop
Selanjutnya, tetapkan bobot untuk setiap jenis tempat ini, yang mencerminkan kepentingan relatifnya dalam skor akhir. Bobot harus ditentukan berdasarkan hal yang paling penting untuk kasus penggunaan dan preferensi pengguna Anda. Untuk contoh ini, skala pembobotan akan berada di antara 0 dan 1, sebagai berikut:
Jenis Tempat |
Pembobotan |
restoran |
0,8 |
taman |
0,6 |
clothing_store |
0,3 |
museum |
0,2 |
coffee_shop |
0,5 |
Memanggil Places Aggregate API
Setelah memiliki daftar jenis tempat yang Anda minati, langkah berikutnya adalah memanggil Places Aggregate API.
Places Aggregate API memerlukan filter lokasi. Untuk contoh ini, gunakan circle,
dengan pusat latLng sebagai lokasi hotel Anda, dan radius
500 m. Tetapkan juga ratingFilter untuk menampilkan tempat dengan rating antara 3,8 dan
5, tidak termasuk tempat dengan rating lebih rendah dari jumlahnya.
Bereksperimenlah dengan memvariasikan setelan filter lokasi untuk kasus penggunaan spesifik Anda. Misalnya, Anda mungkin ingin mengambil tempat dalam radius yang lebih luas dari lintang dan bujur pusat dengan meningkatkan nilai radius. Atau, Anda mungkin ingin menggunakan metode lain untuk menetapkan area penelusuran, seperti Wilayah atau Area khusus.
Pelajari bagian filter lokasi dalam dokumentasi API Places Aggregate untuk mempelajari opsi yang tersedia bagi Anda.
Panggil Places Aggregate API untuk setiap jenis tempat dan lokasi yang ingin Anda buat skor kustomnya. Misalnya, panggil Jenis Tempat restoran untuk salah satu hotel Anda:
curl --location 'https://areainsights.googleapis.com/v1:computeInsights' \
--header 'X-Goog-Api-Key: API_KEY \
--header 'Content-Type: application/json' \
--data '{
"insights": [
"INSIGHT_COUNT"
],
"filter": {
"locationFilter": {
"circle": {
"latLng": {
"latitude": 51.51611,
"longitude": -0.12726
},
"radius": 500
}
},
"typeFilter": {
"includedTypes": [
"restaurant"
]
},
"ratingFilter": {
"minRating": 3.8,
"maxRating": 5
}
}
}'
Setelah semua panggilan ke API selesai, Anda akan memiliki data yang terlihat seperti ini untuk setiap lokasi:
Jenis Tempat |
Pembobotan |
Jumlah |
restoran |
0,8 |
56 |
taman |
0,6 |
3 |
clothing_store |
0,3 |
32 |
museum |
0,2 |
8 |
coffee_shop |
0,5 |
41 |
Membuat skor lokasi kustom
Setelah memiliki jumlah tempat dan pembobotan untuk setiap jenis tempat di setiap lokasi, Anda kini dapat membuat skor lokasi kustom. Kita akan membahas dua opsi di bagian ini, yaitu menggunakan algoritma lokal, atau menggunakan Gemini Developer API.
Opsi 1: Menggunakan algoritma
Opsi pertama yang akan kita bahas adalah menggunakan algoritma lokal untuk menghasilkan skor menggunakan bobot dan jumlah untuk setiap Jenis Tempat. Normalisasikan skor ini ke skala 0 hingga 5, dengan nilai yang lebih tinggi menunjukkan area yang lebih menarik berdasarkan kriteria Anda. Untuk contoh ini, buat dua objek JavaScript dari data di atas:
itemCounts |
typeWeights |
{ "restaurant": 56, "park": 3, "clothing_store": 32, "museum": 8, "coffee_shop": 41 } |
{ "restaurant": 0.8, "park": 0.6, "clothing_store": 0.3, "museum": 0.2, "coffee_shop": 0.5 } |
Buat skor dari jumlah dan bobot dengan mengalikan itemCounts
dengan typeWeights, dan menambahkan hasilnya ke weightedCount keseluruhan:
let weightedCount = 0;
for (const itemType in itemCounts) {
weightedCount += itemCounts[itemType] * typeWeights[itemType];
}
weightedCount = weightedCount.toFixed(2);
Untuk contoh ini, output dari langkah ini adalah: 78,3.
Sekarang Anda dapat menggunakan normalisasi logaritmik untuk menghasilkan skor akhir untuk lokasi ini dalam skala antara 0 dan 5:
if (weightedCount === 0) {
normalizedScore = 0;
} else {
normalizedScore = Math.log(weightedCount + 1);
}
// Clamp between 0 and 5
normalizedScore = Math.max(0, Math.min(5, normalizedScore));
Untuk contoh ini, output skor akhir adalah: 4,36 (dibulatkan menjadi dua angka desimal).
Opsi 2: Menggunakan Gemini Developer API
Sebagai alternatif penggunaan algoritma lokal, Gemini Developer API menawarkan cara yang efektif untuk menghitung skor lokasi kustom untuk semua lokasi. Cukup berikan data jumlah dan bobot dengan petunjuk sistem untuk semua lokasi hotel Anda.
Metode ini sangat berguna jika Anda memiliki informasi bernuansa yang ingin disertakan dalam penghitungan, seperti:
- Deskripsi teks untuk setiap lokasi hotel, misalnya: "Lokasi ini cocok untuk keluarga dan areanya tenang di malam hari".
- Informasi tentang pengguna Anda, seperti: "Pengguna ini melakukan pemesanan untuk keluarga dan lebih menyukai area yang tenang di lokasi pusat".
Gemini Developer API dapat memahami dan memperhitungkan data kualitatif ini, sehingga menghasilkan skor yang lebih canggih dan relevan di luar pendekatan matematis murni.
Dengan menggunakan Gemini Developer API, selain jenis tempat dan tabel pembobotan di atas, Anda dapat memiliki data deskripsi untuk setiap lokasi yang terlihat seperti ini:
Lokasi |
Deskripsi |
Lokasi pusat yang dekat dengan museum, tenang di malam hari, dan cocok untuk keluarga. |
|
Lokasi pusat dekat dengan bar dan restoran. Bising dan ramai di malam hari, cocok untuk grup. |
|
Lokasi perumahan yang jauh dari pusat kota. |
|
Lokasi pusat di dekat sungai. tenang di malam hari dan cocok untuk keluarga. |
|
Lokasi perumahan yang jauh dari pusat kota. |
Deskripsi kualitatif ini beserta informasi atau preferensi pengguna dapat disertakan dalam perintah Anda ke Gemini.
Petunjuk sistem
Gemini memerlukan petunjuk, beserta data mentah, untuk mengetahui bahwa Gemini diharapkan menghasilkan skor untuk setiap lokasi, berdasarkan titik data yang diberikan. Contoh petunjuk sistem untuk mencapai hal ini dapat berupa:
You will be given a json file containing details about a number of locations grouped by their latitude and longitudes. Within the location details is information about the count of places nearby the location that match a specific category, and the weighting of importance of that category, between 0 - 1. You will also be given information about the user's preference, and a description of each location. Take this into consideration when generating scores. Generate a location suitability score taking these into account for each location. The score should be between 1 - 5 inclusive, to two decimal places. The minimum score a location can receive is 1. Output in JSON
Instruksi sistem di atas memberi tahu Gemini data apa yang diharapkan, dan apa output yang diharapkan dari model AI. Instruksi ini juga meminta output dalam JSON.
Output terstruktur
Meskipun kita telah meminta Gemini untuk menampilkan hasilnya dalam JSON, kita harus lebih spesifik tentang struktur outputnya, sehingga kita tahu apa yang diharapkan saat membuat kueri dengan kode. Untuk itu, kita dapat menambahkan petunjuk output terstruktur tambahan ke permintaan, menggunakan kolom responseSchema di Gemini API. Hal ini menggunakan objek skema OpenAPI untuk membatasi output model.
Contoh:
{
"type": "array",
"description": "Array of location data with score",
"items": {
"type": "object",
"properties": {
"location": {
"type": "object",
"description": "Geographical coordinates of the location",
"properties": {
"latitude": {
"type": "number",
"format": "float",
"description": "Latitude of the location"
},
"longitude": {
"type": "number",
"format": "float",
"description": "Longitude of the location"
}
},
"required": [
"latitude",
"longitude"
]
},
"score": {
"type": "string",
"description": "A score associated with the location"
}
},
"required": [
"location",
"score"
]
}
}
Contoh ini meminta Gemini untuk menghasilkan array JavaScript dengan hal berikut:
- Lintang & bujur lokasi
- Skor lokasi kustom
Dengan menggunakan petunjuk sistem dan output terstruktur di atas, respons dari
Gemini untuk satu lokasi akan terlihat seperti ini, dengan score sebagai skor lokasi
kustom:
[
{
"location": {
"latitude": 51.51611,
"longitude": -0.12726
},
"score": "4.13"
}
]
Menampilkan skor
Setelah Anda membuat skor lokasi kustom untuk setiap lokasi menggunakan salah satu metode yang dijelaskan, skor tersebut dapat ditampilkan bersama detail hotel Anda, atau digunakan sebagai opsi pemfilteran penelusuran. Misalnya, "tampilkan tempat dengan skor cocok untuk wisatawan yang tinggi". Hal ini akan memungkinkan pelanggan Anda membuat keputusan berbasis data saat melakukan pemesanan.
Kesimpulan
Menggunakan skor lokasi kustom dapat menjadi alat yang efektif untuk memberikan gambaran sekilas kepada pengguna tentang kesesuaian suatu area. Dokumen ini menunjukkan cara membuat skor lokasi kustom untuk berbagai lokasi menggunakan lima jenis tempat yang berbeda. Implementasi ini dapat dimodifikasi sesuai kebutuhan Anda, dan jenis tempat yang serupa dapat digabungkan menjadi satu permintaan, untuk menampilkan jumlah gabungan dari jenis tersebut, untuk diberikan ke solusi penilaian lokasi kustom Anda.
Coba Places Aggregate API sekarang untuk menghasilkan skor lokasi yang mendalam guna membantu pelanggan Anda membuat keputusan berbasis lokasi yang tepat.
Kontributor
Henrik Valve | Engineer DevX