BAB 1. Ambisi
Akhir Februari 2018
Kami, sebagai penganut ideologi perangkat lunak bebas dan pasar bebas, percaya bahwa monopoli itu buruk.
Sejumlah besar orang membutuhkan navigasi yang mudah dan cepat di kereta bawah tanah. Sungguh aneh bahwa tidak ada satu pun pesaing yang layak untuk aplikasi Yandex.Metro. Kami memutuskan untuk membuatnya sendiri, melakukannya di waktu luang kami sebagai hobi.
Tim: pada waktu yang berbeda dari 2 hingga 4 orang.
Kisah ini hanya mencakup aplikasi Android, karena fakta bahwa itu diluncurkan terlebih dahulu dan semua mekanisme dasar dijalankan di sana. Tentu saja, versi iOS saat ini tersedia.
BAB 2. Rute dalam kegelapan
Maret - Juni 2018.Butuh peta. Kami mengambil SVG, mendorongnya dalam
SVGView , semuanya baik-baik saja. Berbohong sangat, tapi kami gembira. Bagaimana cara menggambar rute yang terpisah? Tidak ada yang tahu
Dalam format SVG, tidak ada informasi tentang pelapisan, apakah elemen milik garis apa pun, atau informasi lain yang sangat penting untuk membangun rute. Jadi kami sampai pada penggunaan database untuk menyimpan semua elemen untuk rendering.
Selain itu, kami membutuhkan aplikasi untuk berjalan secepat mungkin. Menggunakan
WebView segera menghilang, Anda membutuhkan permukaan-GL. Kami memutuskan untuk mencobanya dengan
SurfaceView (permukaan terbuka yang dapat digunakan sebagai kanvas) - bukan itu. Itu dapat membuat perubahan dalam dirinya sendiri, berkedip dalam warna hitam, karena hanya diimplementasikan dengan buruk dan tidak dapat menahan beban lebih dari rendering 20x20 kubus. Itu bisa meningkat, menghilang satu kali. Kami membutuhkan solusi yang berbeda, tetapi yang tidak jauh dari SurfaceView, karena itu benar-benar cocok untuk kita pada antarmuka.
Secara singkat tentang bug driver AndroidKami mencoba implementasi di
TextureView . Dan, oh tuhan, sebagian besar masalah hilang. Terlepas dari kenyataan bahwa TextureView adalah SurfaceView pada steroid, itu biasanya dilaksanakan tanpa bug ajaib dan serangan epilepsi adaptor video.
Kami masih memiliki kesalahan dalam menyinkronkan streaming dan menyesuaikan tampilan dalam bentuk kesalahan segmentasi yang tidak dapat dibaca, tetapi ini lebih baik daripada tempat berkedip hitam. Dengan demikian, setiap penggunaan View tidak sebagaimana mestinya, memaksa untuk mendefinisikan ulang hampir semua metode View itu sendiri. Ini terutama bermasalah dengan TextureView karena komponen ini terdiri dari 2 bagian: Tampilan dan Permukaan. Mereka tidak bisa hidup tanpa satu sama lain, tetapi pada saat yang sama mereka tidak bisa mengirim acara Surface Surface ke dalam View, itulah sebabnya Anda harus melakukan pemeriksaan manual setelah hampir setiap tindakan.
Masalahnya dimulai ketika kami harus meningkatkan tampilan. Kanvas menggambar semuanya piksel demi piksel, jadi jika kita menentukan ukuran 400x400, maka elemen dari 0 hingga 400 akan terlihat, tetapi tidak di luar. 400 sangat kecil, pada kenyataannya kita membutuhkan peta sekitar 5000x5600 piksel pada perangkat yang baik. Tetapi bagaimana cara memasangkan 5000x5600 pada layar 1920x1080 (16: 9)?
Kami membuat peta kanvas dengan ukuran dan skala yang akan meningkat dengan resolusi layar, dan berkurang dengan penurunan resolusi layar. Jadi, kami memecahkan masalah peta yang sangat besar dan bengkok pada perangkat dengan layar besar dan peta terlalu kecil pada layar kecil.
Ketika kami mulai menguji kartu, ternyata pada ponsel dengan resolusi yang sama, kartu ditampilkan berbeda. Yah, berbeda: pada yang ditampilkan, yang kedua putih / hitam. Log mengarah ke pelacak bug Qualcomm ke bug dengan chip Adreno 330/300 dengan status 'wontfix'. Bagus
Satu-satunya cara untuk mengalahkan bug ini adalah dengan meremehkan ukuran kartu pada ponsel dengan chip video tertentu sehingga tidak ada kotak putih selain kartu. Tapi bagaimana kita tahu model chip video? Kita perlu membuat GLSurfaceView dengan ukuran 1x1 piksel saat memulai aplikasi, mendapatkan informasi tentang chip video dari itu dan hanya kemudian menggambar peta.
"- Tapi itu penopang." Ya, ini penopang. Ini adalah penopang skala galaksi, tetapi lebih baik daripada memotong sejumlah besar perangkat dan berharap Qualcomm akan memperbaiki bug drivernya dan mengirimkan pembaruan ke semua OEM sehingga kami dapat menggunakan kartu pada ponsel dengan driver yang bengkok ini. Berkat pengguna kami, kami dapat menemukan solusi yang berfungsi pada semua perangkat.
Kami membangun, membangun, dan akhirnya membangun!Juga tugas yang sangat menarik adalah pelapisan elemen. Karena fakta bahwa cabang merah harus digambar di atas hijau, hijau di atas biru, kuning di atas merah, dll., Kami memasukkan nomor lapisan, dan aplikasi kami (sekilas sederhana) menjadi mirip dengan Adobe Photoshop :)
Memutuskan cara menggambar rute. Sekarang perlu memutuskan bagaimana menemukan yang terbaik di antara mereka. Untuk menemukan semua jalur antara simpul kita menggunakan algoritma Floyd-Warshall, untuk menemukan jalur terpendek kita menggunakan algoritma Dijkstra, untuk jalur alternatif algoritma Yen. Siapa pun yang tertarik dengan detailnya, ajukan pertanyaan dalam komentar.
BAB 3. Rute di bawah sinar matahari
Juni - Desember 2018Pada tahap ini, kami sudah tahu apa yang harus dilakukan. Tingkatkan produk. Kami membuat peta baru, menambahkan bahasa baru, bug diperbaiki, pekerjaan dipercepat, mengacaukan fitur, mengumpulkan umpan balik khusus dan tidak menghabiskan uang receh untuk mempromosikan aplikasi.
Pada 15 Juni, kami meluncurkan aplikasi kami ke rilis, melengkapi itu dengan peta metro St. Petersburg. Di peta ini kami memutuskan untuk menunjuk reservoir dan jembatan. Agak kemudian, Yandex menunjukkan desain ulang dengan tata letak kartu yang serupa. Tidak buruk, kami pikir.

Secara total, kami menambahkan 10 kota: St. Petersburg, Barcelona, ββPraha, Baku, Kazan, Kiev, Minsk, Nizhny Novgorod, Samara, Novosibirsk. Dalam mengembangkan peta metro Paris dan New York, rencananya - seluruh dunia.
Pada bulan Juli, sebuah backend dikerahkan untuk memperbarui informasi stasiun dan dengan cepat memperbarui peta.
Pada bulan September, kami sudah memiliki produk kuat yang dapat dibawa ke massa. Pada saat yang sama, kami bertemu dengan pengembang aplikasi "Metro dan MCC - diagram stasiun" Nikolai. Dalam aplikasinya, ia menyusun diagram stasiun yang memungkinkan Anda menavigasi dengan cepat dan menemukan jalan keluar yang diinginkan. Sangat keren, tetapi aplikasi ini tidak memungkinkan untuk membangun rute dan memiliki desain yang ketinggalan zaman. Dan oleh karena itu, untuk khalayak luas, ternyata lebih lemah dari Yandex.Metro.
Kami sepakat untuk menerapkan desain stasiun dalam aplikasi kami, dan manajemen perusahaan mendukung dan mendanai ide tersebut. Ini telah menjadi pembunuh fitur. Pengguna kami senang.
Januari - Maret 2019Setelah melakukan sekitar 10 percobaan dengan halaman aplikasi di google play dan menghabiskan 18 (!) Ribu rubel untuk pemasaran, kami membawa aplikasi ke top 3 google play atas permintaan "metro" dan "metro of Moscow".
Pada bulan Maret, aplikasi versi iOS diterbitkan, yang juga berhasil menduduki peringkat 5 toko aplikasi teratas atas permintaan Moscow Metro.
Unduh Android: Moscow Metro - diagram stasiun, rute, keluarUnduh iOS: diagram stasiun Metro Moskow +