Minggu, 07 Juli 2013

Google Places



Setelah bisa melakukan pencarian dengan geocoding dan menampilkanya menggunakan static map mari kita lanjut google place, google place adalah layanan developers.google.com/map untuk menemukan suatu informasi detail tentang suatu lokasi, yang masih bisa diperinci untuk mencari informasi detail dengan berbagai kategori, mencari suatu event, mencari suatu image yang terkait dengan suatu lokasi, dan fasilitas autocomplete pada suatu pencarian.
Akan tetapi Tidak semua fasilitas web service dari Google bisa digunakan begitu saja, ada yang harus menggunakan key (Cara mendapatkan api key).API keynya sendiri bisa didapat di https://code.google.com/apis/console/. Syaratnya anda harus memiliki account di Google (bisa menggunakan accout Gmail yang sudah ada).
Contoh layanan Google yang menggunakan API key adalah Google Places. Fungsinya kurang lebih sama dengan Geocoding tetapi memberikan hasil yang lebih lengkap. Dokumentasi selengkapnya ada di https://developers.google.com/places/documentation/. Request dalam Google Places antara lain Place Searches (mencari tempat), Place Details (mengembalikan hasil pencarian dengan lebih detail), dan Places Photos (image yang terkait dengan informasi yang dicari).
Misalkan sekarang diinginkan untuk mencari suatu obyek di tempat yang ditemukan sebelumnya (misal mencari bank, restoran,cafe, dan sebagainya) maka kita manfaatkan Place Searches. Dokumentasinya ada di https://developers.google.com/places/documentation/search. URL untuk pencarian berbasis teks adalah https://maps.googleapis.com/maps/api/place/textsearch/{output}?{parameters}. Output adalah salah satu dari json atau xml.Parameter yang diperlukan di antaranya adalah query (teks yang menunjukkan sesuatu yang kita cari),key (API key untuk aplikasi ini), sensor (bernilai true/false, mengindikasikan apakah request berasal dari device yang memiliki sensor lokasi misalnya smartphone atau tablet), location (koordinat latitude dan longitude), dan radius (jarak dalam satuan meter dari koordinat yang ditentukan, nilai maksimumnya adalah 50000 dan mungkin obyek diluar radius itu akan disertakan juga dalam hasil pencarian).
Response yang diberikan selengkapnya bisa dilihat di dokumentasi geocoding pada URL yang disebutkan di atas. Hasil pencarian paling banyak adalah hanya 60 hasil, dimana setiap halaman hanya berisi paling banyak 20 hasil. Beberapa informasi yang bisa kita manfaatkan adalah lat dan lng (untuk menunjukkan koordinat), name (menunjukkan nama obyek), formatted_adresses (alamat lengkap), dan reference (untuk referensi ke pencarian detil diPlaceDetails).
Pertama kali, tambahkan link ke pencarian detil setelah elemen <img> berikut:
...  // kode lain sebelumnya
        echo "<img src='".$url_map."' />";                                                            
echo "<a href='detailplaces.php?lat=$lat&lng=$lng'>Cari sesuatu di sini</a>";
      }
...  // kode lain sesudahnya
Tambah scrpit yang bercetak tebal di skrip sebelumnya (script geocoding).
File yang akan dipanggil adalah detailplaces.php dengan membawa argumen koordinat lokasi.


Berikut kode untuk detailplaces.php (anda bisa gunakan kerangka script yang pernah dibuat sebelumnya):

<?php
 $keyword =isset($_GET['keyword']) ? urlencode($_GET['keyword']) : '';
 $lat = isset($_GET['lat']) ? $_GET['lat'] : '';
 $lng = isset($_GET['lng']) ? $_GET['lng'] : '';
 $pagetoken = isset($_GET['pagetoken']) ? $_GET['pagetoken'] : '';
 if (($lat == "" || $lng == "") && $pagetoken == "")
 { die("Tentukan dulu kooordinat lokasi di <a href='places.php'>link berikut ini</a>");
 }
?>
<html>
<head>
<title>Pencarian detail lokasi</title>
</head>
<body>
<h2>Pencarian detail lokasi</h2>
<form name='Tanya' method='GET'>
Apa yang anda cari? (restaurant, bank, sekolah, dsb):
<input id="keyword" name='keyword' type='text' value='<?php echo $keyword ?>'>
<input type="hidden" name="lat" value="<?php echo $lat ?>">
<input type="hidden" name="lng" value="<?php echo $lng ?>">
<input type="submit" name="cari" value="Search">
</form>
<?php
  $url = "";
  $api_key="=== MASUKKAN API KEY GOOGLE DI SINI ===";
  if ($pagetoken != "")  // jika bukan halaman pertama
  { $url="https://maps.googleapis.com/maps/api/place/textsearch/json?pagetoken=$pagetoken&sensor=false&key=$api_key&";
  }
  else if ($pagetoken == "" && $keyword != "")  // halaman pertama
  { $url="https://maps.googleapis.com/maps/api/place/textsearch/json?query=$keyword&sensor=false&key=$api_key&location=$lat,$lng&radius=100";
  }
  if ($url != "")   // jika ada url yg akan dicari
  {  $result_json = json_decode(file_get_contents($url));
    echo '<div id="HasilPencarian">';
if ($result_json->status == 'OK')
{ for ($i=0; $i<sizeof($result_json->results); $i++)
  { $name = $result_json->results[$i]->name;
$address = $result_json->results[$i]->formatted_address;
    echo "$name, $address<br/>";
  }
  echo "<p><a href='javascript:back()'>Previous page</a>";
  if (isset($result_json->next_page_token))
  { $next_page = $result_json->next_page_token;
    echo "<p><a href='?pagetoken=$next_page'>Next page</a>";
  }
}
else
{ echo $result_json->status;
}
echo '</div>';
  }
?>
</body>
</html>
 
Simpan dengan nama detailplaces.php
Input untuk script ini ada 3 macam: (1) koordinat yang didapat dari pencarian tempat sebelumnya, atau (2) keyword yang menunjukkan obyek yang dicari, atau (3) token ke halaman selanjutnya dari pencarian yang sama.
Ketika link yang disediakan di pencarian tempat dipilih, maka data yang dibawa adalah koordinat lokasi. Dengan input ini script menanyakan jenis obyek yang dicari. Ketika isian di-submit, maka yang dikirimkan adalah keyword dan koordinat (sebagai elemen hidden). Kedua data ini digunakan untuk pencarian detil dari lokasi yang ditentukan. Jika hasil pencarian melebihi 20 item (ada halaman lain yang belum ditampilkan) maka disediakan link untuk memanggil script yang sama dengan membawa parameter pagetoken. Isi pagetoken ini adalah parameter yang telah digunakan untuk pencarian, dalam bentuk terenkripsi.
 


Masing-masing hasil pencarian memiliki koordinat latitude dan longitude yang bisa ditampilkan detilnya di peta.
Untuk detail bisa menggunakan static map atau layanan webservice lainnya dari google.map yang bisa di kembangkan sesuai kebutuhannya.
 
Catatan : $api_key="=== MASUKKAN API KEY GOOGLE DI SINI ===";  pada skrip detailplaces harus di isi api key untuk mendapatkan api key silahkan baca di artikel sebelumnya.


Semoga bermanfaat. . .!
 


1 komentar: