Ini adalah yang paling sederhana yang dapat saya kurangi menjadi:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<title>Google Maps Multiple Markers</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 500px; height: 400px;"></div>
<script type="text/javascript">
var locations = [
['Bondi Beach', -33.890542, 151.274856, 4],
['Coogee Beach', -33.923036, 151.259052, 5],
['Cronulla Beach', -34.028249, 151.157507, 3],
['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
['Maroubra Beach', -33.950198, 151.259302, 1]
];
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 10,
center: new google.maps.LatLng(-33.92, 151.25),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var infowindow = new google.maps.InfoWindow();
var marker, i;
for (i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][0]);
infowindow.open(map, marker);
}
})(marker, i));
}
</script>
</body>
</html>
👨‍💻 Edit / garpu pada Codepen →
SCREENSHOT
Ada beberapa sihir penutupan terjadi ketika melewati argumen callback ke addListener
metode. Ini bisa menjadi topik yang cukup rumit jika Anda tidak terbiasa dengan cara penutupan. Saya sarankan memeriksa artikel Mozilla berikut untuk pengantar singkat jika itu masalahnya:
❯ Pusat Pengembangan Mozilla: Bekerja dengan Penutupan
InfoWindow
properti Penanda dan kemudian memanggil.open()
InfoWindow dari dirinya sendiri. Saya akan memposting perubahan di sini, tetapi modifikasinya cukup besar sehingga saya memposting jawaban saya sendiri .new MarkerClusterer()
untuk bust kinerja besar? Lihat jawaban ChirsSwires.Berikut adalah contoh lain dari pemuatan banyak marker dengan teks
title
dan unikinfoWindow
. Diuji dengan google maps API V3.11 terbaru.Cuplikan layar 250 Penanda:
Ini akan secara otomatis mengacak Lat / Lng untuk membuatnya unik. Contoh ini akan sangat membantu jika Anda ingin menguji marker dan kinerja 500, 1000, xxx.
sumber
infoWindow
untuk setiap penanda dan tidak akan menyembunyikan yang laininfoWindow
jika saat ini ditampilkan. ini sangat membantu :)new MarkerClusterer()
untuk bust kinerja besar? Lihat jawaban ChirsSwires.Saya pikir saya akan meletakkan ini di sini karena tampaknya menjadi titik pendaratan yang populer bagi mereka yang mulai menggunakan Google Maps API. Beberapa penanda yang diberikan pada sisi klien mungkin adalah kejatuhan banyak aplikasi pemetaan dengan bijaksana. Sulit untuk membuat tolok ukur, memperbaiki dan dalam beberapa kasus bahkan menetapkan ada masalah (karena perbedaan implementasi browser, perangkat keras yang tersedia untuk klien, perangkat seluler, daftarnya terus berjalan).
Cara paling sederhana untuk mulai mengatasi masalah ini adalah dengan menggunakan solusi pengelompokan marker. Ide dasarnya adalah mengelompokkan lokasi yang mirip secara geografis ke dalam grup dengan jumlah poin yang ditampilkan. Saat pengguna memperbesar peta, grup ini membesar untuk mengungkap penanda individual di bawahnya.
Mungkin yang paling sederhana untuk diterapkan adalah perpustakaan markerclusterer . Implementasi dasar adalah sebagai berikut (setelah impor perpustakaan):
Marker alih-alih ditambahkan langsung ke peta ditambahkan ke array. Array ini kemudian diteruskan ke perpustakaan yang menangani perhitungan kompleks untuk Anda dan dilampirkan ke peta.
Implementasi ini tidak hanya secara besar-besaran meningkatkan kinerja sisi klien, tetapi mereka juga dalam banyak kasus menyebabkan UI yang lebih sederhana dan tidak berantakan dan lebih mudahnya penggalian data pada skala yang lebih besar.
Implementasi lain tersedia dari Google.
Semoga ini bisa membantu beberapa dari mereka yang lebih baru dengan nuansa pemetaan.
sumber
Versi asinkron:
sumber
Contoh kerja penuh. Anda bisa menyalin, menempel, dan menggunakan.
sumber
Dari sampel Google Map API :
sumber
Berikut adalah versi lain yang saya tulis untuk menyimpan peta real estat, yang menempatkan penunjuk infowindow pada lat aktual dan panjang marker, sementara menyembunyikan penanda sementara infowindow sedang ditampilkan.
Itu juga menghilangkan penugasan 'penanda' standar dan mempercepat pemrosesan dengan secara langsung menetapkan penanda baru ke larik penanda pada pembuatan marker. Namun perlu dicatat, bahwa properti tambahan telah ditambahkan ke marker dan infowindow, jadi pendekatan ini sedikit tidak konvensional ... tapi itu saya!
Tidak pernah disebutkan dalam pertanyaan infowindow ini, bahwa infowindow standar TIDAK ditempatkan pada lat dan lng pada titik marker, melainkan di bagian atas gambar marker. Visibilitas marker harus disembunyikan agar ini berfungsi, jika tidak, Maps API akan mendorong anchor infowindow kembali ke atas gambar marker.
Referensi ke penanda dalam larik 'penanda' dibuat segera setelah deklarasi penanda untuk setiap tugas pemrosesan tambahan yang mungkin diinginkan kemudian (menyembunyikan / menunjukkan, meraih coord, dll ...). Ini menyimpan langkah tambahan untuk menetapkan objek marker ke 'marker', dan kemudian mendorong 'marker' ke array marker ... banyak pemrosesan yang tidak perlu dalam buku saya.
Ngomong-ngomong, pandangan berbeda tentang arus masuk, dan harap ini membantu menginformasikan dan menginspirasi Anda.
Ini JSFiddle yang berfungsi
Catatan Tambahan
Anda akan melihat dalam data contoh Google yang diberikan ini tempat keempat dalam array 'lokasi' dengan angka. Diberikan ini dalam contoh, Anda juga bisa menggunakan nilai ini untuk id penanda menggantikan nilai loop saat ini, sehingga ...
sumber
Jawaban yang diterima, ditulis ulang dalam ES6:
sumber
Tautan Sumber
Demo Link
Kode HTML lengkap
sumber
closeOtherInfo
, saya tidak dapat menemukan solusi yang layak untuk bekerja dengan merkercluster sampai jawaban Anda. :)Menambahkan penanda di program Anda sangat mudah. Anda bisa menambahkan kode ini:
Bidang-bidang berikut ini sangat penting dan biasanya ditetapkan saat Anda membuat penanda:
position
(wajib) menentukan LatLng yang mengidentifikasi lokasi awal marker. Salah satu cara untuk mengambil LatLng adalah dengan menggunakan layanan Geocoding .map
(opsional) menentukan Peta tempat menempatkan penanda. Jika Anda tidak menentukan peta pada konstruksi marker, marker dibuat tetapi tidak dilampirkan pada (atau ditampilkan pada) peta. Anda dapat menambahkan marker nanti dengan memanggil metode marker itusetMap()
.Perhatikan , pada contoh, bidang judul mengatur judul penanda yang akan muncul sebagai tooltip.
Anda dapat berkonsultasi dengan dokumentasi api Google di sini .
Ini adalah contoh lengkap untuk menetapkan satu penanda di peta. Hati-hati penuh, Anda harus mengganti
YOUR_API_KEY
dengan kunci API Google Anda :Sekarang, jika Anda ingin plot penanda array di peta, Anda harus melakukan ini:
Contoh ini memberi saya hasil berikut:
Anda juga dapat menambahkan infoWindow di pin Anda. Anda hanya perlu kode ini:
Anda dapat memiliki dokumentasi Google tentang infoWindows di sini .
Sekarang, kita bisa membuka infoWindow ketika markernya adalah "clik" seperti ini:
Catatan , Anda dapat memiliki beberapa dokumentasi tentang di
Listener
sini di pengembang google.Dan, akhirnya, kita dapat memplot infoWindow di marker jika pengguna mengkliknya. Ini kode lengkap saya:
Biasanya, Anda harus mendapatkan hasil ini:
sumber
Mengikuti jawaban Daniel Vassallo , berikut adalah versi yang menangani masalah penutupan dengan cara yang lebih sederhana.
Sejak karena semua penanda akan memiliki individu InfoWindow dan karena JavaScript tidak peduli jika Anda menambahkan properti ekstra untuk sebuah objek, semua yang perlu Anda lakukan adalah menambahkan InfoWindow ke Marker properti dan kemudian memanggil
.open()
pada InfoWindow dari dirinya sendiri!Sunting: Dengan data yang cukup, pageload bisa memakan banyak waktu, jadi alih-alih membangun InfoWindow dengan marker, konstruksi seharusnya terjadi hanya jika diperlukan. Perhatikan bahwa data apa pun yang digunakan untuk membangun InfoWindow harus ditambahkan ke Marker sebagai properti (
data
). Perhatikan juga bahwa setelah acara klik pertama,infoWindow
akan tetap sebagai properti penanda itu sehingga browser tidak perlu merekonstruksi secara konstan.sumber
Berikut ini adalah contoh fungsi javascript yang hampir lengkap yang akan memungkinkan banyak penanda didefinisikan dalam suatu JSONObject.
Ini hanya akan menampilkan penanda yang ada di batas peta.
Ini penting agar Anda tidak melakukan pekerjaan ekstra.
Anda juga dapat menetapkan batas untuk marker sehingga Anda tidak menunjukkan jumlah marker yang ekstrem (jika ada kemungkinan sesuatu dalam penggunaan Anda);
itu juga tidak akan menampilkan spidol jika pusat peta tidak berubah lebih dari 500 meter.
Ini penting karena jika pengguna mengklik marker dan secara tidak sengaja menyeret peta saat melakukannya, Anda tidak ingin peta memuat ulang marker.
Saya melampirkan fungsi ini ke pendengar acara menganggur untuk peta sehingga penanda hanya akan ditampilkan ketika peta menganggur dan akan menampilkan kembali penanda setelah acara yang berbeda.
Dalam cuplikan layar tindakan, ada sedikit perubahan pada cuplikan layar yang menunjukkan lebih banyak konten di jendela depan. disisipkan dari pastbin.com
sumber
Berikut adalah contoh beberapa penanda di Reactjs .
Di bawah ini adalah komponen peta
sumber