Saya telah menggunakan leaflet.animatedmarker
dari openplans di GitHub untuk membuat marker yang bergerak di sepanjang garis. Saya juga telah menambahkan video yang akan muncul di atas garis. Ini berfungsi baik dengan marker bergerak.
Yang ingin saya lakukan adalah memiliki tombol yang dapat memulai dan menjeda video dan penanda pada saat yang sama. Saya juga ingin manfaat tambahan karena bisa bergerak mundur dan maju dalam video dan penanda di telepon. Saya hanya ingin tahu apakah ini mungkin, dan bagaimana saya bisa melakukannya?
Jawaban:
Meskipun Anda telah menulis kode dasar untuk
L.animatedMarker
, saya akan menjelaskannya untuk pendidikan lebih lanjut. Saya telah menggunakan beberapa referensi eksternal, seperti tutorial Mapbox GoPro dan JSFiddle di posting StackExchange yang menjelaskan peristiwa Vimeo.Anda dapat melihat hasil saya di JSFiddle berikut: http://jsfiddle.net/GFarkas/4mo8e9da/ . Sayangnya, Anda tidak dapat menguji "manfaat tambahan karena dapat bergerak maju dan mundur dalam video dan penanda di telepon". Namun, Anda dapat mengujinya di situs host lokal.
Pada 9 baris pertama kode Anda mengatur peta Mapbox dasar dengan Leaflet. Ini memiliki level zoom tengah dan standar. Mulai saat itu, Anda dapat melompat ke baris 638, kode panjang itu hanyalah kode GeoJSON yang disalin.
Bagian selanjutnya dari kode menjadikan garis GeoJSON ke peta sebagai fitur garis sederhana.
Pada bagian selanjutnya, saya harus mengekstrak koordinat dari array GeoJSON dan mengganti nilai lan / lot, karena format GeoJSON menggunakan urutan koordinat lon / lat. Saya telah menggunakan loop untuk tugas ini.
Sekarang saya memiliki susunan koordinat yang benar, saya bisa membuat fitur polyline, yang merupakan satu-satunya input yang valid
L.animatedMarker
sejauh yang saya tahu.The
distance
daninterval
pilihan menentukan kecepatan penanda pada baris. Anda harus menyetelnya dengan baik, sehingga video Anda akan berakhir pada saat yang sama dengan penanda Anda. Saya juga harus mengaturautoStart
opsifalse
, jadi nanti saya bisa memulai penanda dengan video.Mulai sekarang, inilah bagian "sihir". Jika Anda ingin memiliki kendali atas video dan marker Anda secara bersamaan, Anda harus menggunakan API situs favorit Anda selain dari Leaflet. Dalam contoh ini saya telah menggunakan kerangka Fimeog Vimeo. Jika Anda ingin menyematkan video dari YouTube, Anda harus melihat bagaimana Anda dapat menggunakan API untuk tugas ini. Pada langkah selanjutnya saya telah menambahkan
L.popup
layer dan mengikatnya ke marker.Opsi paling penting dalam objek ini adalah konten. Anda harus menambahkan ID ke
iframe
tag dan memasukkannya ke tautan video, juga sebagai permintaan&player_id=player1
. Anda juga harus memasukkan permintaan untuk menggunakan API Vimeo dengan&api=1
.Saya menggunakan kode sampel untuk menulis acara pendengar untuk video. Kode sampel menggunakan JQuery, begitu juga saya dan saya hanya akan merinci bagian kode yang dikustomisasi.
Kami akan membutuhkan empat acara dari video. Kita harus tahu apakah itu dijeda (
pause
), jika sudah selesai (finish
), apakah sedang diputar (play
) atau jika kita melompat di video (seek
). Perhatian: jangan gunakanplayProgress
acara untuk mengikatnyaanimatedMarker.start()
, itu akan menyebabkan marker berakselerasi tak terkendali. Sekarang untuk membuat fungsi yang tepat untuk acara tersebut.Tiga peristiwa pertama akan mengembalikan fungsi untuk memulai atau menghentikan penanda di telepon jika video telah dimulai atau dihentikan. Acara keempat sedikit berbeda. Untuk memindahkan penanda di peta dengan video, kita harus menggunakan rumus untuk mengatur tempat baru penanda di peta. Tempat penanda saat ini (simpul dalam polyline) disimpan dalam
marker._i
atribut jikaL.animatedMarker
variabel Anda dipanggilmarker
. Untungnya ituseek
event mengembalikan objek dengan durasi, posisi, dan persentase video yang diputar (dalam skala antara 0 dan 1). Jika kami mengembalikan titik terdekat ke jumlah titik dikalikan dengan persentase video yang diinginkan, dan membulatkannya ke bilangan bulat terdekat, kami mendapatkan posisi penanda di telepon pada momen video yang diinginkan dengan perkiraan yang baik. Anda dapat mengoptimalkan keakuratan metode ini dengan membuat durasi gerakan penanda selama video dan bekerja dengan banyak poin (tentu saja itu hanya berfungsi dengan baik jika simpul terdistribusi secara merata di garis).Saya harap jawaban ini akan membantu dan maaf untuk bahasa Inggris saya yang buruk.
MEMPERBARUI:
Jika Anda ingin penanda Anda mengikuti petunjuk Anda saat video dijeda, Anda tidak akan bisa menggunakannya
L.animatedMarker.update()
. Anda harus menggunakanL.animatedMarker.start()
danL.animatedMarker.stop()
yang akan menyebabkan penanda melompati titik. Sayangnya ini akan mengurangi akurasi animasi, tetapi ini adalah harga yang harus Anda bayar untuk peta interaktif (sampai penulis memperbaikiL.animatedMarker.update()
fungsinya).sumber