我如何尝试修复地图搜索驱动程序。 第三部分(最终)

因此,这是我重新思考常规地图搜索的第三部分。 第一部分在这里 ,第二部分 这里 -它们是技术性更高的,但是您可以通过自己的眼睛来获得更好的理解。 简而言之,这听起来像是:我厌倦了开车时在地图上闲逛,试图在小图标和广告中找到最近的加油站。 相反,我只想查看应用程序屏幕。 为了让它根据行车时间对最近的地点进行排序,它会向他们显示一个列表,并说明其中哪些正在行驶中以及对他们的交通流量。 这样的主意。



实际上,通过该应用程序的3.0版,终于可以实现我想要的所有基本功能。 在本系列的最后一篇文章之后,许多人下载了它,甚至发表了评论-谢谢,我听了所有人的话。 我花了两个月的时间专门研究本月的新版本,但我无法列出所有较小的更改-实际上,这是80%的新应用程序。 通过彻底改进的界面,速度提高了2倍,并且更加稳定。 我再次邀请同情者进行评估和责骂。 并根据再次削减技术要点。

这是iPhone和Android的链接

交通堵塞


关于该应用程序先前版本的主要抱怨之一是时间的计算不正确-我自己通过开放源代码路由机器实现了它,而他考虑了道路的净时间。 在流量最小的时段(例如晚上),我的数字恰好与他们发行相同的Google卡的事实相吻合,但是在大多数情况下,估计至少是非常乐观的。 这拉平了应用程序本身的含义,因此有必要提出一些建议。

解决此问题的方法有两种:使用第三方api或尝试从某处抽出流量权重并导入自己。 我真的不想依靠任何人,所以我花了一些时间寻找第二个解决方案。 结果令人失望:我从未找到过具有与OpenStreetMap兼容的全局覆盖率的流量权重数据库。 在欧洲和美洲有一些开放的基地,理论上可以通过手鼓跳将它们与OSM缝合在一起-但最终,经过反思,我决定不参与。 当然,利用流量进行主持导航的机会吸引了,但是它们避免了覆盖范围不完整,集成困难,错误以及流量被缓存的事实,而不是实时的。 简而言之,再次花费大量时间并最终获得微小的成果。

意识到在没有api的时代,无处不在的大叔,我开始寻找一个足够便宜的叔叔。 迷迷糊糊后,我选择了HERE服务-这些是以前的诺基亚卡,然后微软将它们带给我,将它们作为一个单独的单元出售。 据我了解,他们现在主要与企业客户合作(例如在物流方面),并且拥有相当健全和干净的api。 最重要的是,它们具有全球实时流量和相当慷慨的配额。 一个显而易见的选择,但我决定尝试一下。

集成最终变得非常简单。 我启发了建筑的一般灵活性,在这里发挥了重要作用。 如果您愿意的话,现在至少可以轻松集成至少Google,至少可以将Yandex流量塞入其中。 我将此处的流量从后备导航断开,不再连接到旧导航。 最后,将没有交通(矿井)和有交通的值进行比较,您可以得出一般估算值-空路,轻型交通,平均等。

地图-清单


地图是该应用程序的第二大主张。 我花了一些不可思议的时间来绘制自己的路线和总图预览,它甚至起作用了-但是生成具有时尚设计的栅格图块极大地浪费了服务器。 如果在测试模式下图片在半秒内出现,那么在真正的观众(甚至是很小的观众)下,人们最多可以等待五秒甚至十秒钟(!!!!)。 尤其是如果地图很大,那么我的代码就会嚼碎并渲染一堆矢量数据。 而且,这个过程并没有特别并行:存在瓶颈,而且所有生产线都很快被阻塞了。 一般来说,悲伤。

很明显,该怎么做-将卡片的缩略图丢到地狱。 我与自己奋斗了很长时间(我做了这么长时间),但最终我做出了一个坚定的决定,总的来说,做对了事。 当留下巨大且通常未加载的图片时,它变得更加平静,并且释放了屏幕上的许多空间。 即使用新数据填充并增加标签,我也可以挤入屏幕,结果是以前的两倍。



地图-新模式


但是,使用普通卡,我的行为有所不同。 没有人(包括我自己)无法理解为什么实际上需要它。 它是自制的,笨拙的,可以永久加载,并且通常最初是为调试而创建的。 但是,由于某些原因,等时线的视觉图像继续温暖着我的灵魂,因此,它仍然占据了界面中的位置。 然后我决定:让我们尝试从这张毫无意义的图片中创建一个完整的替代观看模式。 如果有人不喜欢该列表并且更轻松地阅读地图-为什么不呢? 而且,我还有一些其他地方找不到的想法。

我很不情愿地抛出了我的照片(服务器从负载中吟起来对此表示感谢)。 相反,我通过flutter_map插件构建了完整的地图-我从Mapbox中获取了背景图块-并开始在其上显示我的位置和周围的结果。 对这些点进行聚类的需求几乎立刻出现了,我很快草绘了基于距离的聚类代码。 这很原始,但涵盖了90%的情况。 在这一切之下,我再次种下了我心爱的异黄酮绿色印迹。 最终,地图图例也变得具有交互性:按结果数进行点击可将地图聚焦于点上,而可按时间(等时点)进行。 很舒服



我能感觉到价值但无法以任何方式表达价值的想法之一是显示当前路线和车辆的运动矢量。 我试图以不同的方式将其放入路线卡,但看上去没有地方看起来有机而已。 最后,我几乎绝望地意识到:新的映射模式非常适合该芯片。 因为在列表模式下,我直接用文本书写,沿某处或不经过某处书写-但是在地图上,这始终令人难以理解。 即使在Google或Apple上,您也会观察到指南针不断旋转的扇区,并且很长一段时间内您都不知道要朝哪个方向前进。

受启发,我坐下来工作。 一路上我不得不重构一堆代码,但是几天后逻辑就准备好了。 结果我决定不每200米更新一次位置,而是每10米更新一次。每次更新时我都会重新计算运动矢量,因此结果非常准确,因为它不取决于加速度计,而是取决于先前的位置。 我在地图上用一条线绘制了路线(即坐标历史记录的数组),并用箭头绘制了运动方向。 所有这些几乎都是实时更新的,您甚至无法想象地图已经变了多少,变得更加便捷。



一个单独的细微差别是,在接收位置的最初几秒钟,gps仍会进行校准。 您是否注意到一开始点在地图上爬行了一段时间? 按照我的逻辑,这些幻影运动会立即给出有关运动方向的错误结论。 考虑到200米后结果的下一次更新,这很容易误告知驾驶员。 我非常简单地解决了这个问题:假装我们站在第一次更新之前。 也就是说,不要在地图上显示箭头(尽管该点仍在爬行)或路线。 然后在解锁这些数据时,当我们移动了一段较大的距离时,经过了5秒,获得错误信息的机会几乎为零。

我还添加了一张在地图上选择结果时会崩溃的卡片。 实际上,这是与列表中相同的数据,但是向其中添加了路线预览(是的,它仍然返回)和一个开始导航的按钮。



介面


通常,接口已被彻底重绘。 我不会描述如何重写菜单,重建调色板等。 我将重点介绍最有趣的点。 所有的铭文都按比例放大(我的视力下降在这里派上用场-直到我自己从驾驶座上看到为止)。 将字体更改为SF Pro Rounded-这是Apple San Francisco的圆形变体。 在这里下载明智的字体。 我强烈建议您在没有纯文本的情况下,但应该可以从远处读取较大的模具。

经过一番思考,我做出了一个不明显的决定,即删除了“ Along the Way”过滤器。 就像时间过滤器一样,一开始它似乎几乎是该应用程序的主要功能。 但是,有时我意识到我没有使用它。 在列表模式下,您可以清楚地看到正在行驶的地方,而在地图模式下,则完全令人困惑。 一段时间以来,我无意间在界面上拖动了此开关,此后我只是将其隐藏起来并没有丢失任何东西。 另外,从技术上讲,他产生的沉闷细微之处完全是可选项。

资料


实际上,应用程序中的主要问题是数据。 我仍然将它们从OSM中带走,伴随着所有伴随的问题:覆盖范围不均,大量过时的数据,工作时间不足,电话等等。 我的后端的构建方式很容易将任何第三方api集成到其中-仅在哪里可以得到它? 第一个(也是最好的)候选人是Google Places,但是在最近价格上涨1400%(上帝)之后,我仍然买不起。 所有其余的-TripAdvisor,Foursquare等-都很昂贵或带有笨拙的api。 一些服务(以相同的Mapbox或HERE)以其数据为幌子,提供了我本人从OSM中获得的咀嚼位置。

从所有的兄弟情谊中,我决定尝试拧Yelp-它似乎很便宜而且api看起来还不错。 我了解到,这是一个美国门户网站,世界其他地区的数据将最少,但至少会有所进展。 乍一看,一切看起来都不错:我在几个小时内整合了所有内容,甚至看到它们声称覆盖了世界近一半。 但是,当马戏团开始时,我没有时间高兴。 他们数据中的大量位置坐标不正确。 显然,他们不是通过点进入地点,而是通过地址进入地点-他们的地址解析器任意布置了坐标。 结果,我在正确的位置有一些加油站,但是除了地址外几乎没有数据。 并且具有评论,评分和开放时间-通常只有左手坐标。 可以减少数据的唯一属性是名称和地址。 而且经常两者兼有,并且会任意书写,带有错误,格式错误等。 我尝试通过我的地址解析器+模糊匹配对它们进行比较,但从原理上讲,它仍然有效-尽管我们仍然会丢失一定比例的位置。

但这只是第一个问题。 剩下的就落在他们身上:他们的半径搜索非常不稳定,一堆错误(如果您在他们的git中阅读了人们的评论,那么那里什么都没用)等等。 最后,我检查了品牌要求-事实证明,您必须使用其红色(!!!)星来对位置进行排名。 在看到界面中的外观后,我吐口水并关闭了整个展位。



结果,数据没有太多进展。 实际上,唯一(而且非常容易)要做的就是拧紧Google地方信息。 覆盖范围和坐标都很好。 只是现在它花了很多钱。 因此,我征求您的意见:您对付费订阅感觉如何? 在免费版本中,它就像现在一样,但是每月会有一些象征性的数量的Google数据或Yandex数据可用(您需要阅读它们的费用)。 所以我可能不会破产。

总结


总的来说,我最近弄清楚了:差不多一年半的时间,这个申请花了我很多时间。 当然,并不是我所有的空闲时间都花在上面,但是大部分都是可以肯定的。 我把它扔了一个月两次,有时似乎我永远都不会完成它,但还是做到了。 而且,原则上,现在看起来从一开始就完全符合我的要求。 一路上,我掌握了不止一种新技术,并获得了很多经验。 总的来说,这很有趣。 现在,如果结果对某人有用,我将感到高兴。

聚苯乙烯


关于自我促进的权利:在这段时间里,我为自己申请了另一个很小的申请-停车助理。 我没有将其翻译成俄语,但是有一个一键式界面。 也许有人会感兴趣。

Source: https://habr.com/ru/post/zh-CN459408/


All Articles