Bagaimana saya mencoba memperbaiki pencarian peta untuk driver. Bagian 3 (final)

Jadi, ini adalah bagian ketiga dari upaya saya untuk memikirkan kembali pencarian peta yang biasa. Bagian pertama ada di sini , dan yang kedua di sini - mereka lebih teknis, tetapi Anda dapat berlari melalui mata Anda untuk pemahaman yang lebih baik. Singkatnya, kedengarannya seperti ini: Saya lelah melihat-lihat peta saat mengemudi, mencoba menemukan pompa bensin terdekat di antara ikon dan iklan kecil. Sebaliknya, saya hanya ingin melihat layar aplikasi. Agar dapat menyortir tempat terdekat dengan waktu mengemudi, itu akan menunjukkan kepada mereka dengan daftar, menjelaskan yang mana dari mereka yang sedang dalam perjalanan dan lalu lintas apa yang menuju mereka. Gagasan seperti itu.



Sebenarnya, dengan versi 3.0 dari aplikasi itu akhirnya mungkin untuk mengimplementasikan semua fungsi dasar yang saya inginkan. Setelah artikel terakhir dalam seri ini, sejumlah orang mengunduhnya, dan bahkan menulis ulasan - terima kasih, saya mendengarkan semua orang. Saya bekerja secara intensif pada versi baru bulan ini selama dua bulan, saya tidak bisa mencantumkan semua perubahan kecil - bahkan ini adalah aplikasi baru 80%. Dengan antarmuka yang ditingkatkan secara radikal, 2 kali lebih cepat dan jauh lebih stabil. Sekali lagi, saya mengundang simpatisan untuk mengevaluasi dan memarahi. Dan di bawah poin teknis dipotong lagi.

Berikut ini tautan ke iPhone dan Android

Kemacetan lalu lintas


Salah satu keluhan utama tentang versi aplikasi sebelumnya adalah perhitungan waktu yang tidak tepat - saya mengimplementasikannya sendiri melalui Open Source Routing Machine, dan dia menganggap waktu bersih jalan. Selama periode lalu lintas minimal (misalnya, pada malam hari), nomor saya bertepatan dengan kenyataan bahwa mereka mengeluarkan kartu Google yang sama, tetapi dalam kebanyakan kasus perkiraan itu setidaknya sangat optimis. Ini meratakan arti dari aplikasi itu sendiri, dan itu perlu untuk datang dengan sesuatu.

Ada dua cara untuk mengatasi ini: beralih ke api pihak ketiga atau mencoba untuk memompa bobot lalu lintas dari suatu tempat dan impor ke diri Anda sendiri. Saya benar-benar tidak ingin bergantung pada siapa pun, jadi saya meluangkan waktu mencari solusi kedua. Hasilnya mengecewakan: Saya tidak pernah menemukan database bobot lalu lintas dengan cakupan global yang akan kompatibel dengan OpenStreetMap. Ada beberapa pangkalan terbuka untuk bagian Eropa dan Amerika, yang secara teori dapat dijahit dengan OSM melalui lompatan dengan rebana - tetapi pada akhirnya, setelah refleksi, saya memutuskan untuk tidak terlibat. Tentu saja, kesempatan untuk menjadi tuan rumah navigasi dengan lalu lintas menarik, tetapi mereka takut dengan cakupan yang tidak lengkap, kesulitan dengan integrasi, kesalahan dan fakta bahwa lalu lintas di-cache, dan tidak dalam waktu nyata. Singkatnya, kembali menghabiskan banyak waktu dan mendapatkan sangat kecil pada akhirnya.

Menyadari bahwa di zaman kita tanpa api, seorang paman besar tidak ada di mana-mana, saya mulai mencari seorang paman yang memadai dan murah. Setelah tersandung, saya memilih untuk layanan DI SINI - ini adalah kartu Nokia bekas, kemudian Microsoft membawanya kepada saya, meninggalkan mereka sebagai unit yang terpisah. Seperti yang saya pahami, mereka sekarang terutama bekerja dengan klien korporat (misalnya, pada logistik) dan memiliki api yang cukup waras dan bersih. Dan yang paling penting, mereka memiliki lalu lintas real-time global dan kuota yang cukup murah hati. Pilihan yang tidak jelas, tetapi saya memutuskan untuk mencobanya.

Integrasi akhirnya menjadi sangat sederhana. Peran penting di sini dimainkan oleh fleksibilitas umum arsitektur, yang telah saya ilhami. Jika diinginkan, sekarang mudah untuk mengintegrasikan setidaknya Google, setidaknya Yandex macet ke dalamnya. Saya membuat SINI lalu lintas terputus dari fallback ke navigasi lama saya. Akhirnya, membandingkan nilai tanpa lalu lintas (milik saya) dan dengan lalu lintas, Anda dapat memperoleh perkiraan umum - jalan kosong, lalu lintas ringan, rata-rata, dan sebagainya.

Peta - Daftar


Peta adalah klaim utama kedua untuk aplikasi tersebut. Saya menghabiskan banyak waktu menggambar preview saya sendiri tentang rute dan peta umum, dan bahkan berhasil - tetapi menghasilkan ubin raster dengan desain modis secara drastis menyia-nyiakan server. Jika dalam mode uji, gambar muncul dalam setengah detik, kemudian dengan audiens sungguhan (bahkan yang kecil), orang bisa menunggu hingga lima atau bahkan sepuluh (!!!!) detik. Terutama jika potongan peta itu besar - maka kode saya mengunyah dan memberikan banyak data vektor. Selain itu, proses ini tidak terlalu paralel: ada hambatan, dan semua jalur dengan cepat tersumbat. Secara umum, kesedihan.

Apa yang harus dilakukan, itu jelas - membuang thumbnail kartu ke neraka. Saya berjuang dengan diri saya sendiri untuk waktu yang lama (semua yang saya lakukan begitu lama), tetapi pada akhirnya saya membuat keputusan yang berkemauan keras dan, secara umum, melakukan hal yang benar. Ketika gambar besar dan sering tidak dimuat kiri, menjadi lebih tenang dan banyak ruang di layar dibebaskan. Bahkan mengisinya dengan data baru dan menambah label, saya dapat menekan ke layar dua kali lebih banyak hasil seperti sebelumnya.



Peta - Mode Baru


Tetapi dengan kartu biasa, saya bertindak berbeda. Tidak seorang pun (termasuk saya) yang dapat memahami mengapa, pada kenyataannya, itu diperlukan. Itu dibuat sendiri, canggung, dimuat selamanya dan secara umum pada awalnya dibuat untuk debug. Namun, gambar visual isochron untuk beberapa alasan terus menghangatkan jiwaku dan sebagai hasilnya, tetap menempati tempat di antarmuka. Lalu saya memutuskan: mari kita coba membuat mode tampilan alternatif lengkap dari gambar yang tidak berarti ini. Jika seseorang tidak menyukai daftar dan membaca peta dengan lebih mudah - mengapa tidak? Selain itu, saya masih memiliki beberapa ide yang tidak dapat ditemukan di tempat lain.

Dengan enggan, saya membuang gambar saya (server mengerang karena beban bersyukur untuk ini). Sebagai gantinya, saya membuat peta lengkap melalui plugin flutter_map - saya mengambil ubin latar belakang dari Mapbox - dan mulai menunjukkan pada saya posisi saya dan titik-titik hasil di sekitar. Kebutuhan untuk mengelompokkan titik-titik ini muncul segera, dan saya dengan cepat membuat sketsa kode pengelompokan berbasis jarak. Ini cukup primitif, tetapi mencakup 90% kasus. Di bawah semua ini, saya sekali lagi menanam bercak isokron hijau tercinta. Akhirnya, legenda peta juga menjadi interaktif: ketuk dengan jumlah hasil yang memfokuskan peta pada titik, dan ketuk waktu - pada isochron. Cukup nyaman.



Salah satu ide di mana saya merasakan nilainya, tetapi tidak dapat memformulasikannya dengan cara apa pun, adalah untuk menampilkan rute saat ini dan vektor gerak kendaraan. Saya mencoba memasukkannya ke kartu rute dengan cara yang berbeda, tetapi tidak terlihat organik dan di tempatnya. Dan akhirnya, hampir putus asa, saya menyadari: mode peta baru sangat ideal untuk chip ini. Karena dalam mode daftar, saya menulis langsung dengan teks, di sepanjang jalan entah di mana atau tidak - tetapi di peta ini selalu tidak bisa dipahami. Bahkan di Google atau Apple, Anda mengamati sektor yang terus berputar dari kompas dan untuk waktu yang lama Anda tidak mengerti ke arah mana Anda akan pergi.

Terinspirasi, saya duduk untuk bekerja. Saya harus memperbaiki sejumlah kode di sepanjang jalan, tetapi setelah beberapa hari logika sudah siap. Saya memutuskan untuk memperbarui posisi tidak setiap 200 meter, sebagai hasilnya, tetapi lebih sering melalui 10 meter. Setiap pembaruan saya menghitung ulang vektor gerak, dan ternyata sangat akurat, karena itu tidak tergantung pada accelerometer, tetapi pada posisi sebelumnya. Rute (yaitu, array sejarah koordinat kami) saya menggambar pada peta dengan garis, dan arah gerakan - dengan panah. Semua ini diperbarui hampir secara real time, dan Anda bahkan tidak bisa membayangkan seberapa banyak peta telah berubah dan menjadi lebih nyaman.



Nuansa terpisah adalah kenyataan bahwa pada detik-detik pertama menerima lokasi, gps masih dikalibrasi. Pernahkah Anda memperhatikan bagaimana titik merayap di peta untuk sementara waktu di awal? Dengan logika saya, gerakan-gerakan hantu ini akan segera memberikan kesimpulan yang salah tentang arah gerakan. Dan dengan mempertimbangkan fakta bahwa pembaruan selanjutnya dari hasil sudah setelah 200 meter, ini dengan dingin akan memberi informasi yang salah pada pengemudi. Saya memecahkan masalah ini dengan sangat sederhana: berpura-pura kita berdiri sebelum pembaruan pertama. Artinya, jangan perlihatkan di peta baik panah (meskipun titik masih merinding), atau rute. Dan untuk membuka kunci data ini setelah itu, ketika kami memindahkan beberapa jarak yang signifikan, 5 detik berlalu dan kemungkinan mendapatkan informasi palsu praktis nol.

Saya juga menambahkan kartu yang macet ketika saya memilih hasil di peta. Sebenarnya, ini adalah data yang sama seperti dalam daftar, tetapi pratinjau rute ditambahkan kepada mereka (ya, masih dikembalikan) dan tombol yang memulai navigasi.



Antarmuka


Secara umum, antarmuka telah digambar ulang secara menyeluruh. Saya tidak akan menjelaskan bagaimana saya menulis ulang menu, membangun kembali palet warna dan semua itu. Saya akan fokus pada poin yang paling menarik. Semua prasasti diperbesar secara proporsional (penglihatan saya yang jatuh berguna di sini - meningkat sampai saya sendiri melihatnya dari kursi pengemudi). Mengganti font menjadi SF Pro Rounded - ini adalah variasi bulat Apple San Francisco. Unduh di sini , font yang masuk akal. Saya sangat menyarankan dalam kasus di mana Anda tidak memiliki teks padat, tetapi mati besar yang harus dibaca dari jauh.

Setelah beberapa pemikiran, saya membuat keputusan yang tidak jelas untuk menghapus filter "Sepanjang Jalan". Seperti filter berdasarkan waktu, pada awalnya sepertinya hampir fungsi utama aplikasi. Namun, pada titik tertentu saya menyadari bahwa saya tidak menggunakannya. Dalam mode daftar, Anda dapat dengan jelas melihat tempat mana yang sedang dalam perjalanan, dan dalam mode peta, itu benar-benar membingungkan. Untuk beberapa waktu saya menyeret switch ini tanpa tujuan di antarmuka, setelah itu saya hanya menyembunyikannya dan tidak kehilangan apa pun. Ditambah lagi, murni secara teknis, ia menghasilkan nuansa yang suram dan sepenuhnya opsional.

Data


Sebenarnya, masalah utama pada saat aplikasi adalah data. Saya masih mengambilnya dari OSM dengan semua masalah yang menyertainya: jangkauan yang tidak merata, banyak data yang ketinggalan zaman, kurangnya jam, telepon, dan sebagainya. Backend saya dibuat sedemikian rupa sehingga sangat mudah untuk mengintegrasikan api pihak ketiga ke dalamnya - hanya di sini di mana mendapatkannya? Kandidat pertama (dan terbaik) adalah Google Places, tetapi setelah kenaikan harga baru-baru ini 1400% (Tuhan) saya masih tidak mampu membelinya. Semua yang lain - TripAdvisor, Foursquare, dan sejenisnya - mahal atau dengan api yang canggung. Beberapa layanan (Mapbox yang sama atau DI SINI), dengan kedok data mereka, menyediakan tempat OSM yang saya miliki.

Dari semua persaudaraan ini, saya memutuskan untuk mencoba mengacaukan Yelp - tampaknya tidak mahal dan apinya terlihat bagus. Saya mengerti bahwa ini adalah portal Amerika, masing-masing, akan ada minimum data di bagian lain dunia, tetapi setidaknya beberapa kemajuan. Dan pada awalnya semuanya terlihat cukup bagus: Saya mengintegrasikan semuanya dalam beberapa jam, dan bahkan membaca bahwa mereka mengklaim cakupan hampir setengah dari dunia. Namun, saya tidak punya waktu untuk bersukacita ketika sebuah sirkus dimulai. Sejumlah besar tempat dalam data mereka memiliki koordinat yang salah. Jelas, mereka memasuki tempat bukan melalui titik, tetapi melalui alamat - dan geocoder mereka mengatur koordinat secara sewenang-wenang. Akibatnya, saya memiliki beberapa pompa bensin di tempat yang tepat, tetapi kecuali untuk alamat itu hampir tidak ada data; dan mereka memiliki ulasan, peringkat, dan jam buka - hanya koordinat yang umumnya kidal. Satu-satunya properti dimana data kami dapat dikurangi adalah nama dan alamat. Dan seringkali keduanya itu, dan itu ditulis secara sewenang-wenang, dengan kesalahan, salah diformat, dll. Saya mencoba membandingkannya melalui geocoder + fuzzy matching, dan, pada prinsipnya, itu berhasil - walaupun kami masih kehilangan beberapa persentase tempat dengan cara ini.

Tapi ini hanya masalah pertama. Sisanya jatuh pada mereka: mereka memiliki pencarian radius yang sangat tidak stabil, banyak bug (jika Anda membaca komentar orang di git mereka, maka tidak ada yang bekerja sama sekali di sana) dan sebagainya. Pada akhirnya, saya memeriksa persyaratan untuk branding - ternyata Anda harus menggunakan bintang merah (!!!) mereka untuk memberi peringkat tempat. Setelah melihat tampilannya di antarmuka saya, saya meludah dan mematikan seluruh stan ini.



Akibatnya, tidak ada banyak kemajuan dengan data. Sebenarnya, satu-satunya hal yang dapat (dan sangat mudah) dilakukan adalah mengacaukan Google Places. Semuanya baik-baik saja di sana, baik dengan jangkauan dan koordinat. Hanya sekarang harganya banyak uang sekarang. Karena itu, saya meminta pendapat Anda: bagaimana perasaan Anda tentang langganan berbayar? Dalam versi gratis itu akan seperti sekarang, tetapi untuk beberapa jumlah simbolik per bulan data Google atau data Yandex akan tersedia (Anda perlu membaca berapa biayanya). Jadi saya mungkin tidak akan bangkrut.

Ringkasan


Secara umum, saya baru-baru ini tahu: selama hampir satu setengah tahun aplikasi ini membawa saya. Tentu saja, tidak semua waktu luang saya dihabiskan untuk itu, tetapi sebagian besar pasti. Saya melemparkannya beberapa kali selama sebulan, kadang-kadang sepertinya saya tidak akan pernah menyelesaikannya - tetapi saya masih melakukannya. Dan, pada prinsipnya, sekarang ini terlihat persis seperti yang saya inginkan sejak awal. Sepanjang jalan, saya menguasai lebih dari satu teknologi baru dan mendapatkan banyak pengalaman. Secara umum, itu menarik. Sekarang saya akan senang jika hasilnya bermanfaat bagi seseorang.

PS


Pada hak-hak promosi diri: dalam interval saya membuat aplikasi lain untuk diri saya sendiri, sangat kecil - asisten parkir. Saya tidak menerjemahkannya ke bahasa Rusia, tetapi ada antarmuka satu tombol. Mungkin seseorang akan tertarik.

Source: https://habr.com/ru/post/id459408/


All Articles