Menjadi Kreatif Dengan Google Maps API
() translation by (you can also view the original English article)



Anda telah mendesain situs web baru yang berkilau; hati-hati memilih warna, tipografi, dan foto untuk secara sempurna mencerminkan branding perusahaan. Maka klien Anda meminta Anda untuk menambahkan peta. Tentu, Anda bisa menggunakan peta building 'wizard', seperti yang ada di setiap akun Google. Tapi, coba perhatikan, fungsi mereka terbatas dan terlihat sangat generik!
Google Maps API, di sisi lain, memberi Anda kebebasan untuk membuat peta yang sepenuhnya disesuaikan, yang dapat melakukan berbagai hal keren. Peta Sejarah Portsmouth adalah situs yang saya buat baru-baru ini menggunakan API ini.



Rangkaian tutorial ini akan menunjukkan cara membuat peta khusus menggunakan Google maps API. Ini akan melibatkan mengotori tangan Anda dengan sedikit JavaScript, tetapi itu akan sepadan.
Tutorialnya akan mencakup segala macam hal. Untuk beberapa nama: warna peta khusus, menu dan penanda; membawa desain peta Anda sendiri (misalnya peta yang digambar) menjadi nyata dengan melapisnya ke peta google yang dapat diperbesar; menghubungkan ke API Flickr; optimasi gambar; desain responsif; optimasi kode dan validasi. Atau, dengan kata lain, pada saat Anda selesai, Anda tidak hanya dapat membuat peta yang indah, Anda juga akan melihat banyak hal yang relevan untuk membangun situs web apa pun.
Skenario
Tutorial ini menggunakan skenario perusahaan Inggris yang mempromosikan festival musik. Gambar "Produk Akhir" di atas menunjukkan jenis hal yang kita tuju. Lihatlah demo.
Catatan: Hanya penanda Glastonbury yang 'aktif' dalam contoh ini.
Sebelum memulai, Anda mungkin ingin mengunduh file yang terkait dengan tutorial ini. Saya telah menyertakan file html terpisah untuk setiap aktivitas.
Lagi Pula Apa itu API?
API, atau Application Programming Interface, adalah cara mewah untuk mengucapkan sekumpulan perintah (misalnya fungsi) perusahaan (misalnya Facebook, Twitter, You Tube, Google) publikasikan. Idenya adalah Anda dapat menggunakan perintah ini untuk membuat versi konten mereka yang sangat disesuaikan. Misalnya, dalam kasus Google Maps API, 'konten' adalah peta, sedangkan dalam kasus Flickr API, 'konten' adalah foto.
Ketika orang-orang membicarakan tentang 'mash-up' mereka berarti mereka telah menggunakan API dari dua atau lebih perusahaan untuk menggabungkan konten, misalnya membuat gambar dari Flickr muncul di peta Google. Ada ribuan API ini di sekitar; lihatlah Web Programmable untuk info lebih lanjut.
Kita akan melihat API Flickr di tutorial selanjutnya, tetapi untuk memulai dengan akan tetap fokus pada Google Maps API. Ini akan memungkinkan Anda melakukan berbagai hal, termasuk menyesuaikan warna, penanda peta, gaya kotak pop-up, tingkat detail, dan tingkat zoom. Belum lagi membuat peta melakukan hal-hal keren, seperti menampilkan data langsung, mengelompokkan penanda, merencanakan rute, menggambar hamparan kustom, data yang secara dinamis terungkap.... daftarnya tidak ada habisnya!
Memulai Dengan Google Maps
Dengan risiko menunjukkan hal yang sudah jelas, untuk memulai Anda memerlukan akun Google. Jika saat ini Anda tidak memilikinya, kunjungi Google dan daftar.
Berbekal akun Google Anda, kini Anda dapat menjelajah ke halaman Google maps API. Tandai halaman ini; Anda akan menjadi sangat akrab dengannya. Area utama adalah: -
- Developer's Guide: Cuplikan kode yang menunjukkan kepada Anda cara menggunakan fungsi API untuk melakukan hal-hal tertentu.
- Referensi API: Daftar referensi lengkap semua fungsi dalam API. Gunakan ini sebagai semacam 'daftar belanja' dari apa yang dapat Anda lakukan dengan menggunakan API. (Tapi ingat ada pustaka tambahan yang memungkinkan Anda melakukan lebih banyak lagi. Kita akan membahas ini nanti).
Sebelum melangkah lebih jauh, Anda juga memerlukan kunci API (urutan panjang huruf dan angka, unik untuk Anda). Dapatkan kunci API Anda di sini.



Membuat Peta Pertama Anda
OK, Anda siap untuk mulai membangun.



Untuk membuat peta yang tersedia berfungsi, ganti tempat yang bertuliskan ‘YOUR_API_KEY_GOES_HERE’ dengan kunci API Anda sendiri. Peta Anda harus menyerupai peta yang ditunjukkan di atas.
Prinsip dasar dari kode ini adalah ia menciptakan div (disebut festival-map
) di mana JavaScript memuat peta. Saya telah menambahkan komentar di kode untuk menjelaskan cara kerjanya, tetapi sebaiknya menyoroti bit utama.
Kode pertama mendeklarasikan aplikasi Anda sebagai HTML5 menggunakan deklarasi <!Doctype html>
.
Kemudian mengatur styling untuk peta; bit-bit antara <style type="text/css">
dan </style>
tag dan . Anda dapat menyesuaikan styling pada # festival-map
id tergantung di mana Anda ingin meletakkan peta Anda. Jika Anda menginginkan peta 'layar penuh', kemudian atur lebar dan tingginya menjadi 100 persen dan hapus marginnya.
Kemudian, melewati JavaScript untuk beberapa saat, kode di antara tag body membentuk objek html kosong, yaitu div (festival-map
) untuk menahan peta. Ini bertindak sebagai semacam 'place holder', di mana JavaScript memuat peta.
1 |
<div id="festival-map"></div> |
OK - sekarang melihat JavaScript - kode pertama terhubung ke kunci google maps API Anda.
1 |
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY_GOES_HERE&sensor=true"></script> |
Kemudian meluncurkan ke JavaScript yang membuat peta. Pengingat cepat: fungsi JavaScript (misalnya loadFestivalMap
) adalah sekumpulan perintah yang hanya dijalankan ketika dipanggil oleh beberapa kode lain. Ini mungkin terlihat rumit, tetapi sebenarnya hanya melakukan beberapa hal -
- Opsi konfigurasi (
festivalMapOptions
) peta (misalnya lintang dan bujur, tingkat zoom, dll) ditetapkan, dan variabel JavaScript kosong (festivalMap
) dibuat yang akan segera ditentukan oleh peta. (Tips: itouchmap adalah situs yang berguna untuk mencari koordinat garis lintang dan bujur dari lokasi manapun.) - Kemudian fungsi
loadFestivalMap
dipicu untuk dijalankan oleh baris ini:google.maps.event.addDomListener(window, 'load', loadFestivalMap);
- Fungsi ini membuat peta, menetapkannya ke variabel JavaScript yang dibuat untuknya (mis.
FestivalMap
). Saat melakukan ini, itu juga menerapkan opsi konfigurasi dan memuat peta ke divfestival-map
yang dibuat untuk menahannya. - Akhirnya, fungsi
loadMapMarkers
dipicu ke dijalankan oleh baris terakhir dari fungsiloadFestivalMap
.
Jika ini tidak masuk akal, baca komentar-komentar dalam versi lengkap dari kode ketika mereka menjelaskan lebih lanjut.
Gambar sebagai Penanda Peta
Sekarang Anda harus memiliki peta dan berjalan, dan dengan sedikit keberuntungan Anda belum terlalu bingung dengan JavaScript! Dengan asumsi semuanya baik-baik, kita bisa mulai membuat peta terlihat sedikit lebih menarik.



Sangat mudah untuk menggunakan gambar Anda sendiri sebagai penanda peta. Dengan cara yang sama dengan cara Anda menetapkan opsi properti untuk peta itu sendiri (misalnya pusat, zoom
, dll. Seperti yang kami lakukan di atas), Anda juga dapat mengubah properti penanda peta. Untuk menggunakan gambar yang berbeda sebagai penanda peta, Anda hanya perlu mengatur properti icon
penanda peta Anda. (Jika Anda tertarik, google maps API - bagian penanda daftar semua properti penanda peta, metode dan acara yang dapat Anda gunakan).
Biasanya penanda peta adalah .png karena mereka memungkinkan Anda memiliki bentuk tidak beraturan dengan latar belakang transparan.
Kita juga perlu menetapkan area ‘yang dapat diklik’ untuk setiap penanda guna memastikan sedikit ‘gambar’ dari .png dapat diklik dan sedikit transparan tidak. Ini sangat penting jika penanda tumpang tindih.
Anda terlebih dahulu membuat gambar ikon peta (markerIconGlastonbury
), dan kemudian membuat bentuk ikon peta (markerShapeGlastonbury
), dan akhirnya Anda menghubungkan keduanya ke penanda peta Anda (markerGlastonbury
).
1 |
//Setting the position of the Glastonbury map marker. |
2 |
var markerPositionGlastonbury = new google.maps.LatLng(51.159803, -2.585585); |
3 |
|
4 |
//Setting the icon to be used with the Glastonbury map marker. |
5 |
var markerIconGlastonbury = { |
6 |
url: 'icons/icon_glas_uk.png', |
7 |
//The size image file. |
8 |
size: new google.maps.Size(225, 120), |
9 |
//The point on the image to measure the anchor from. 0, 0 is the top left. |
10 |
origin: new google.maps.Point(0, 0), |
11 |
//The x y coordinates of the anchor point on the marker. e.g. If your map marker was a drawing pin then the anchor would be the tip of the pin. |
12 |
anchor: new google.maps.Point(189, 116) |
13 |
}; |
14 |
|
15 |
//Setting the shape to be used with the Glastonbury map marker. |
16 |
var markerShapeGlastonbury = { |
17 |
coord: [12,4,216,22,212,74,157,70,184,111,125,67,6,56], |
18 |
type: 'poly' |
19 |
}; |
20 |
|
21 |
//Creating the Glastonbury map marker. |
22 |
markerGlastonbury = new google.maps.Marker({ |
23 |
//uses the position set above. |
24 |
position: markerPositionGlastonbury, |
25 |
//adds the marker to the map. |
26 |
map: festivalMap, |
27 |
title: 'Glastonbury Festival', |
28 |
//assigns the icon image set above to the marker. |
29 |
icon: markerIconGlastonbury, |
30 |
//assigns the icon shape set above to the marker. |
31 |
shape: markerShapeGlastonbury, |
32 |
//sets the z-index of the map marker. |
33 |
zIndex:102 |
34 |
}); |
Anda dapat mengunduh file html lengkap dari bagian atas halaman ini, atau melihat versi live. Untuk saat ini, saya baru saja menambahkan satu penanda peta ... jelas saya akan menambahkan lebih banyak lagi!
Catatan Singkat Tentang Z-indeks
Elemen, seperti penanda peta, dapat memiliki koordinat x, y, dan z. Indeks-z adalah kedalamannya. Ini menentukan bagaimana elemen 'ditumpuk' di atas satu sama lain, dan karenanya bagaimana mereka tumpang tindih.
Jika x dan y koordinat dari elemen yang sama, maka elemen dengan z-indeks lebih tinggi yang ditampilkan di atas unsur-unsur dengan z-indeks lebih rendah. (Z-index hanya berfungsi pada elemen yang diposisikan, misalnya relatif, tetap atau mutlak).
Sejauh ini peta terlihat baik-baik saja karena secara default Google maps API memberikan elemen yang muncul lebih rendah ke bawah layar indeks-z yang lebih tinggi, sehingga mereka muncul di atas item sedikit lebih jauh ke atas layar. Misalnya. ikon Isle of Wight berada di atas ikon festival Glastonbury dan ikon Reading (lihat gambar di bawah).
Nanti dalam tutorial ini kita akan melihat bagaimana Anda dapat mengubah z-indeks untuk memanipulasi bagaimana penanda peta ditampilkan.
Mengubah Warna dan Tingkat Detail
Meskipun peta mulai terbentuk, peta default tidak benar-benar sesuai dengan efek keseluruhan yang ingin saya capai. Untungnya, sangat mudah menggunakan opsi API 'gaya' untuk menyesuaikan tampilan peta.
Saya juga harus mengatakan pada titik ini bahwa saya hanya mengambil beberapa festival musik untuk mengilustrasikan contoh ini. Ini agak acak, dan pilihan saya tidak mencerminkan pendapat saya - baik untuk atau melawan - setiap festival!



Langkah 1
Gunakan wizard JSON untuk latihan bagaimana Anda ingin peta Anda terlihat. Anda dapat mengubah warna dari hampir semuanya, menambah dan menghapus detail, mengatur isi warna dan geometri secara independen dll. Layak menghabiskan sedikit waktu untuk terbiasa dengan cara kerjanya. (Jika Anda bertanya-tanya, JSON hanyalah cara memformat informasi sehingga komputer dapat membacanya.)
Langkah 2
Saat Anda puas dengan gaya yang ditampilkan di pratinjau wizard JSON, klik tombol Show JSON dan salin kode.
Langkah 3
Kembali ke dokumen html Anda, tambahkan variabel tepat setelah tag JavaScript pembuka untuk menyimpan informasi ini, lalu tempelkan kode.
1 |
//First, we read in the data describing style. |
2 |
var style_festival = [ |
3 |
{ |
4 |
"featureType": "administrative", |
5 |
"stylers": [ |
6 |
{ "visibility": "off" } |
7 |
] |
8 |
},{ |
9 |
"featureType": "poi", |
10 |
"stylers": [ |
11 |
{ "visibility": "off" } |
12 |
] |
13 |
},{ |
14 |
"featureType": "transit", |
15 |
"stylers": [ |
16 |
{ "visibility": "off" } |
17 |
] |
18 |
},{ |
19 |
"featureType": "road", |
20 |
"stylers": [ |
21 |
{ "visibility": "off" } |
22 |
] |
23 |
},{ |
24 |
"featureType": "landscape", |
25 |
"stylers": [ |
26 |
{ "color": "#FFE200" } |
27 |
] |
28 |
},{ |
29 |
"featureType": "water", |
30 |
"stylers": [ |
31 |
{ "visibility": "on" }, |
32 |
{ "color": "#4f92c6" } |
33 |
] |
34 |
} |
35 |
]; |
Langkah 4
Anda perlu mendapatkan peta untuk memperlakukan informasi yang baru saja Anda tambahkan sebagai gaya peta. Gunakan StyledMapType
untuk melakukannya.
1 |
//Then we use this data to create the styles. |
2 |
var styled_festival = new google.maps.StyledMapType(style_festival, {name: "Festival style"}); |
Langkah 5
Akhirnya, Anda perlu menetapkan gaya baru ke peta Anda untuk 'mengaktifkan' gaya.
1 |
festivalMap.mapTypes.set('map_styles_festival', styled_festival); |
2 |
festivalMap.setMapTypeId('map_styles_festival'); |
Silakan gunakan tautan di awal tutorial ini untuk mengunduh salinan kode untuk peta sejauh ini, atau lihat demo langsung untuk bagian tutorial ini. Saya sebenarnya menambahkan dua gaya. Satu diaktifkan langsung, dan yang lainnya akan diaktifkan ketika peta diperbesar untuk memberikan tingkat detail yang lebih tinggi. (Ini dijelaskan lebih lanjut di bawah.)
Saya juga tidak bisa menolak menambahkan latar belakang pada titik ini :) Lihatlah pemilih css body
untuk melihat bagaimana saya melakukan ini.
Pop up Boxes dan Zoom Dinamis



Oke, sekarang saatnya membuat peta benar-benar melakukan sesuatu! Anda dapat menggunakan hamparan Info Jendela bawaan, tetapi tidak terlihat fantastis dan tidak mudah disesuaikan. Jadi, sebaliknya, kita akan menggunakan pustaka Infobox.
Langkah 1
Unduh salinan pustaka Infobox. Buka zipnya, dan simpan dalam folder yang dekat dengan peta Anda. Kemudian tambahkan baris ini di dekat bagian atas file html Anda.
1 |
<script src="infobox/infobox.js" type="text/javascript"></script> |
Langkah 2
Tambahkan z-indeks untuk setiap penanda peta sehingga yang lebih dekat dengan bagian bawah layar muncul di atas yang lebih tinggi. (yaitu lebih dekat ke bagian bawah layar penanda adalah, semakin tinggi indeks-z seharusnya.) Semua akan terungkap kemudian mengapa Anda melakukan ini! Sebagai contoh -
1 |
//Creating the Glastonbury map marker. |
2 |
markerGlastonbury = new google.maps.Marker({ |
3 |
//uses the position set above. |
4 |
position: markerPositionGlastonbury, |
5 |
//adds the marker to the map. |
6 |
map: festivalMap, |
7 |
title: 'Glastonbury Festival', |
8 |
//assigns the icon image set above to the marker. |
9 |
icon: markerIconGlastonbury, |
10 |
//assigns the icon shape set above to the marker. |
11 |
shape: markerShapeGlastonbury, |
12 |
//sets the z-index of the map marker. |
13 |
zIndex:107 |
14 |
}); |
Langkah 3
Tambahkan kode berikut setelah setiap penanda peta. Silakan baca komentar di dalam kode untuk melihat apa yang dilakukannya.
1 |
//Creates the information to go in the pop-up info box. |
2 |
var boxTextGlastonbury = document.createElement("div"); |
3 |
boxTextGlastonbury.style.cssText = pop_up_info; |
4 |
boxTextGlastonbury.innerHTML = '<span class="pop_up_box_text"><img src="content/glastonbury.jpg" width="400" height="285" border="0" /></span>'; |
5 |
|
6 |
//Sets up the configuration options of the pop-up info box. |
7 |
var infoboxOptionsGlastonbury = { |
8 |
content: boxTextGlastonbury |
9 |
,disableAutoPan: false |
10 |
,maxWidth: 0 |
11 |
,pixelOffset: new google.maps.Size(-241, 0) |
12 |
,zIndex: null |
13 |
,boxStyle: { |
14 |
background: "url('infobox/pop_up_box_top_arrow.png') no-repeat" |
15 |
,opacity: 1 |
16 |
,width: "430px" |
17 |
} |
18 |
,closeBoxMargin: "10px 2px 2px 2px" |
19 |
,closeBoxURL: "icons/button_close.png" |
20 |
,infoBoxClearance: new google.maps.Size(1, 1) |
21 |
,isHidden: false |
22 |
,pane: "floatPane" |
23 |
,enableEventPropagation: false |
24 |
}; |
25 |
|
26 |
//Creates the pop-up infobox for Glastonbury, adding the configuration options set above. |
27 |
infoboxGlastonbury = new InfoBox(infoboxOptionsGlastonbury); |
28 |
|
29 |
//Add an 'event listener' to the Glastonbury map marker to listen out for when it is clicked. |
30 |
google.maps.event.addListener(markerGlastonbury, "click", function (e) { |
31 |
//Open the Glastonbury info box. |
32 |
infoboxGlastonbury.open(festivalMap, this); |
33 |
//Changes the z-index property of the marker to make the marker appear on top of other markers. |
34 |
this.setZIndex(google.maps.Marker.MAX_ZINDEX + 1); |
35 |
//Zooms the map. |
36 |
setZoomWhenMarkerClicked(); |
37 |
//Sets the Glastonbury marker to be the center of the map. |
38 |
festivalMap.setCenter(markerGlastonbury.getPosition()); |
39 |
}); |
Langkah 4
Dalam kode di atas, Anda memanggil fungsi setZoomWhenMarkerClicked
. Ini akan memperbesar peta ketika seseorang mengklik penanda. Tetapi tidak banyak yang akan terjadi sampai Anda membuat fungsi ini! Ini adalah fungsi yang perlu Anda buat -
1 |
function setZoomWhenMarkerClicked(){ |
2 |
var currentZoom = festivalMap.getZoom(); |
3 |
if (currentZoom < 7){ |
4 |
festivalMap.setZoom(7); |
5 |
} |
6 |
} |
Langkah 5
Saat peta diperbesar, kemungkinan Anda ingin menampilkan lebih banyak detail di peta Anda. Ini dilakukan dengan menambahkan event listener dan menggunakan metode getZoom
untuk terus memeriksa apakah zoom telah diubah. Jika telah ditingkatkan (di atas level 6), metode setMapTypeId
digunakan untuk mengatur gaya kedua (lebih rinci) yang didefinisikan di atas.
1 |
//Continuously listens out for when the zoom level changes. This includs when the map zooms when a marker is clicked. |
2 |
google.maps.event.addListener(festivalMap, "zoom_changed", function() { |
3 |
var newZoom = festivalMap.getZoom(); |
4 |
//If the map is zoomed in, the switch to the style that shows the higher level of detail. |
5 |
if (newZoom > 6){ |
6 |
festivalMap.setMapTypeId('map_styles_festival_zoomed'); |
7 |
} |
8 |
//Otherwise the map must be zoomed out, so use the style with the lower level of detail. |
9 |
else { |
10 |
festivalMap.setMapTypeId('map_styles_festival'); |
11 |
} |
12 |
|
13 |
}); |
Langkah 6
Style infobox Anda menggunakan css agar terlihat cantik.
1 |
//Variable containing the style for the pop-up infobox. |
2 |
var pop_up_info = "border: 0px solid black; background-color: #ffffff; padding:15px; margin-top: 8px; border-radius:10px; -moz-border-radius: 10px; -webkit-border-radius: 10px; box-shadow: 1px 1px #888;"; |
Langkah 7
Ketika sebuah infobox telah dibuka, penanda peta dibawa ke depan. Namun, jika Anda menutup infobox dan kemudian memperbesar peta ke posisi semula, penanda tetap berada di depan. Ini bisa terlihat aneh.
Pada Langkah 1 Anda mengatur indeks-z untuk setiap penanda. Anda dapat menggunakan ini sekarang untuk memperbaiki masalah ini. Anda perlu membuat fungsi (mis. ResetZindexes)
yang me-reset z-indeks ke nilai aslinya, dan kemudian menambahkan panggilan ke fungsi ini (yaitu resetZindexes();)
ke infobox.js untuk memicu fungsi untuk berjalan ketika infobox jendela ditutup.
Pergi ke link di bagian atas halaman ini untuk salinan kode untuk situs sejauh ini, atau lihatlah versi live dari bagaimana seharusnya terlihat sekarang. Saya hanya menambahkan munculan untuk Glastonbury. Jangan ragu untuk menambahkan yang lain sendiri!
Spanduk dan Navigasi yang Disesuaikan



Kita hampir di sana dengan menyesuaikan tampilan peta, tetapi sebelum menyebutnya sehari, kita harus menambahkan beberapa kontrol navigasi.
Google maps memiliki 12 area tempat Anda dapat menambahkan kontrol peta, spanduk, dll. Anda dapat sepenuhnya menyesuaikan area ini, menambahkan html apa pun yang Anda inginkan.
Kami akan menambahkan spanduk dan navigasi khusus di sisi kanan peta.
Langkah 1
Untuk memulai, pertama-tama tentukan fungsi untuk membuat menu. Ekstrak kode ini agak panjang...
1 |
//Function that creates the control panel area, ie. the map title and the 2 buttons just beneath it. |
2 |
function createControlPanel (controlPanelDiv){ |
3 |
controlPanelDiv.style.padding = '0px'; |
4 |
controlUI = document.createElement('div'); |
5 |
controlUI.style.border='0px solid white'; |
6 |
controlUI.style.margin='10px'; |
7 |
controlUI.style.paddingTop='11px'; |
8 |
controlUI.style.paddingBottom='5px'; |
9 |
controlUI.style.paddingLeft='0px'; |
10 |
controlUI.style.paddingRight='0px'; |
11 |
controlUI.style.width='245px'; |
12 |
controlUI.style.height='419px'; |
13 |
controlPanelDiv.appendChild(controlUI); |
14 |
|
15 |
//Map title |
16 |
titleBar = document.createElement('div'); |
17 |
titleBar.style.backgroundColor = '#89CBED'; |
18 |
titleBar.style.height='255px'; |
19 |
titleBar.style.width='245px'; |
20 |
titleBar.style.marginTop='0px'; |
21 |
titleBar.style.marginBottom='0px'; |
22 |
titleBar.style.marginLeft='0px'; |
23 |
titleBar.style.marginRight='0px'; |
24 |
titleBar.style.paddingTop='6px'; |
25 |
titleBar.style.paddingBottom='2px'; |
26 |
titleBar.style.paddingLeft='0px'; |
27 |
titleBar.style.paddingRight='0px'; |
28 |
titleBar.style.borderTopLeftRadius='5px'; |
29 |
titleBar.style.borderTopRightRadius='5px'; |
30 |
titleBar.style.borderBottomLeftRadius='0px'; |
31 |
titleBar.style.borderBottomLeftRadius='0px'; |
32 |
titleBar.style.cssFloat='left'; |
33 |
titleBar.innerHTML = '<div align="center"><img src="icons/map_title.png" width="230" height="252" border="0"/></div>'; |
34 |
controlUI.appendChild(titleBar); |
35 |
|
36 |
yellowStripe = document.createElement('div'); |
37 |
yellowStripe.style.backgroundColor = '#FFFF00'; |
38 |
yellowStripe.style.height='2px'; |
39 |
yellowStripe.style.width='245px'; |
40 |
yellowStripe.style.marginTop='3px'; |
41 |
yellowStripe.style.marginBottom='3px'; |
42 |
yellowStripe.style.marginLeft='0px'; |
43 |
yellowStripe.style.marginRight='0px'; |
44 |
yellowStripe.style.paddingTop='0px'; |
45 |
yellowStripe.style.paddingBottom='0px'; |
46 |
yellowStripe.style.paddingLeft='0px'; |
47 |
yellowStripe.style.paddingRight='0px'; |
48 |
yellowStripe.style.cssFloat='left'; |
49 |
yellowStripe.style.fontFamily='Georgia, serif'; |
50 |
yellowStripe.style.fontSize='14px'; |
51 |
controlUI.appendChild(yellowStripe); |
52 |
|
53 |
//'Smaller' events button. |
54 |
smallEvents = document.createElement('div'); |
55 |
smallEvents.style.height='108px'; |
56 |
smallEvents.style.width='129px'; |
57 |
smallEvents.style.marginTop='0px'; |
58 |
smallEvents.style.marginBottom='0px'; |
59 |
smallEvents.style.marginLeft='0px'; |
60 |
smallEvents.style.marginRight='0px'; |
61 |
smallEvents.style.paddingTop='0px'; |
62 |
smallEvents.style.paddingBottom='2px'; |
63 |
smallEvents.style.paddingLeft='0px'; |
64 |
smallEvents.style.paddingRight='0px'; |
65 |
smallEvents.style.cssFloat='left'; |
66 |
smallEvents.innerHTML = '<div align="center" onClick="handelRequests(\'small_events\')" OnMouseOver="this.style.cursor=\'pointer\';" OnMouseOut="this.style.cursor=\'default\';"><img src="icons/button_small_event.png" width="128" height="107" border="0"/></div>'; |
67 |
controlUI.appendChild(smallEvents); |
68 |
|
69 |
//Umbrella button |
70 |
brolly = document.createElement('div'); |
71 |
brolly.style.height='149px'; |
72 |
brolly.style.width='94px'; |
73 |
brolly.style.marginTop='0px'; |
74 |
brolly.style.marginBottom='0px'; |
75 |
brolly.style.marginLeft='0px'; |
76 |
brolly.style.marginRight='0px'; |
77 |
brolly.style.paddingTop='0px'; |
78 |
brolly.style.paddingBottom='2px'; |
79 |
brolly.style.paddingLeft='0px'; |
80 |
brolly.style.paddingRight='0px'; |
81 |
brolly.style.cssFloat='left'; |
82 |
brolly.innerHTML = '<div align="center" onClick="handelRequests(\'rainfall\')" OnMouseOver="this.style.cursor=\'pointer\';" OnMouseOut="this.style.cursor=\'default\';"><img src="icons/button_brolly.png" width="93" height="148" border="0"/></div>'; |
83 |
controlUI.appendChild(brolly); |
84 |
|
85 |
} |
Catatan singkat tentang gaya: Kode di atas menggunakan properti style
elemen untuk menentukan gayanya menggunakan JavaScript. Untuk mengonversi properti CSS ke notasinya JavaScript, Anda hanya perlu mengingat bahwa properti yang tidak memiliki tanda hubung tetap sama, sedangkan yang dengan tanda hubung dikonversi ke camelCase, mis. background-image menjadi backgroundImage. Pengecualian adalah float
, yang menjadi cssFloat
.
Langkah 2
Kemudian, buat div untuk menahan menu, dan tambahkan menu ke div ini dengan memanggil fungsi yang baru saja Anda buat di langkah 1.
1 |
//Create control panel (ie. site title and 2 buttons) which appears on the right-hand side. |
2 |
var controlPanelDiv = document.createElement('div'); |
3 |
var festivalMapControlPanel = new createControlPanel(controlPanelDiv, festivalMap); |
Langkah 3
Kemudian atur properti kontrol
peta Anda untuk menambahkan menu ke lokasi yang relevan, dalam hal ini RIGHT_TOP
.
1 |
//Add the control panel and reset button (created previously) to the map. |
2 |
festivalMap.controls[google.maps.ControlPosition.RIGHT_TOP].push(controlPanelDiv); |
Langkah 4
Sekarang Anda harus memiliki sesuatu yang tampak seperti menu khusus yang ditampilkan di sisi kanan peta Anda. Jadi semua yang harus dilakukan adalah membuat menu Anda melakukan sesuatu...
Selama tutorial berikutnya kita akan mendapatkan tombol Smaller Events untuk menampilkan foto dari Flickr, dan tombol payung untuk menampilkan overlay peta curah hujan sketched. (Sebuah klise yang saya tahu, tetapi kita mendapatkan sedikit hujan di sini selama bulan-bulan musim panas!)
Jadi untuk mendapatkan sesuatu yang berfungsi di tutorial ini, saya telah mengulangi langkah-langkah di atas untuk juga menambahkan tombol Reset ke area RIGHT_BOTTOM
. Ini termasuk kode pembungkus di sekitar tombol Reset untuk memanggil fungsi handelRequests
.
1 |
//Function that creates the 'Reser map' button. |
2 |
function createResetButton (resetButtonDiv){ |
3 |
resetButtonDiv.style.padding = '0px'; |
4 |
controlUI2 = document.createElement('div'); |
5 |
controlUI2.style.backgroundColor = '#ffffff'; |
6 |
controlUI2.style.borderRadius='5px'; |
7 |
controlUI2.style.margin='10px'; |
8 |
controlUI2.style.paddingTop='2px'; |
9 |
controlUI2.style.paddingBottom='2px'; |
10 |
controlUI2.style.paddingLeft='2px'; |
11 |
controlUI2.style.paddingRight='5px'; |
12 |
controlUI2.style.textAlign='center'; |
13 |
controlUI2.style.width='148px'; |
14 |
controlUI2.style.height='31px'; |
15 |
controlUI2.innerHTML = '<div onClick="handelRequests(\'reset\')" OnMouseOver="this.style.cursor=\'pointer\';" OnMouseOut="this.style.cursor=\'default\';" ><img src="icons/button_reset.png" width="148" height="31" border="0"/></div>'; |
16 |
resetButtonDiv.appendChild(controlUI2); |
17 |
} |
Langkah 5
Fungsi handelRequests
melakukan beberapa hal - lihat komentar di kode.
1 |
//Function that is called when either the 'smaller events', unbrella or the 'reset map' buttons are clicked. |
2 |
function handelRequests (buttonPressed) { |
3 |
if (buttonPressed === "reset"){ |
4 |
//Resets the zoom, map position and marker z-indexes back to their orignal position. Also closes all infoboxes currently open. |
5 |
festivalMap.setZoom(festivalMapZoom); |
6 |
festivalMap.setCenter(festivalMapCenter); |
7 |
resetZindexes(); |
8 |
//This is a function I've created that closes any info boxes that are open. |
9 |
closeAllInfoboxes(); |
10 |
} |
11 |
else if (buttonPressed === "small_events"){ |
12 |
alert("This button will do something useful in a later tutorial!"); |
13 |
} |
14 |
else if (buttonPressed === "rainfall"){ |
15 |
alert("This button will do something useful in a later tutorial!"); |
16 |
} |
17 |
} |
Anda bisa mendapatkan salinan lengkap dari file html untuk bagian tutorial ini dari bagian atas halaman ini, atau lihat contoh langsung. Hanya penanda peta Glastonbury yang 'aktif dalam contoh ini.
Apa Selanjutnya?
Itu saja untuk tutorial ini! Semoga Anda sekarang memiliki sesuatu yang bekerja yang secara samar menyerupai gambar di bagian atas halaman ini. Jika ada yang salah, lihat file yang dapat diunduh yang tersedia di GitHub. Saya telah memasukkan kode dalam file terpisah untuk setiap bagian dari tutorial ini, jadi Anda harus dapat mengetahui di mana semua kesalahan itu terjadi.
Tutorial berikutnya akan melihat bagaimana Anda dapat menggunakan Google Maps API untuk membawa peta Anda sendiri (misalnya peta yang digambar atau bersejarah) ke kehidupan, menjadikannya dapat diperbesar dan interaktif.
Image Credits
Foto-foto yang digunakan dalam tutorial ini semuanya telah dirilis di bawah lisensi Creative Commons.
- Isle of Wight - diambil oleh Tiggy
- Reading - diambil oleh Chris Ford
- Glastonbury - diambil oleh Stig Nygaard
- Glastonbury (gambar dalam bentuk pop-up) - diambil oleh Wonker
- Secret Garden - diambil oleh Joanne Pinkney
- Latitude - diambil oleh Mike Mantin
- Leeds - diambil oleh Ian Wilson
- T in the Park - diambil oleh Ian Oldham
- Rockness - diambil oleh Phil dan Pam Gradwell
- Glasgowbury - diambil oleh Ben Andrews
- Gambar Backgroung - diambil oleh Wonker