我有一条折线对象,由几千条记录组成(1000到4000之间)。每次在“折线”上触发“鼠标悬停”事件时,我都需要获取边缘或顶点数。实际上我可以获得这些数据,但只有当我将折线属性'editable'设置为true时,要求是用户无法编辑行程(折线)。我需要这个的原因是因为当我得到顶点或边缘时,我使用该数字从数组中获取数据,其中所有位置复合折线路径和附加到每个位置的其他参数(自定义信息,描述,小时等) ),所以当折线部分被“鼠标移过”时,它会根据顶点/边数得到数组的信息,并显示带有数据的弹出窗口。
我尝试使用透明图像为每个位置添加标记,因此当鼠标悬停在标记上时会显示弹出窗口。它的问题是当我在超过1000个地点旅行时,物品的抽奖速度很慢(10或15秒钟就可以画出所有东西)。如果在'mouseover'事件中我获得了latLng属性并尝试与数组中的位置进行比较,也会发生同样的情况,因为在比较这些点时会有很多位置,在某些情况下(慢速浏览器)会卡住。
任何线索?
答案 0 :(得分:0)
尝试以下方法: 将由1000到4000个点组成的单个折线分成n个折线,这样第一个折线的端点就是第二个折线的起点,依此类推,直到绘制出与所有点绘制的单个折线相同的多条折线。
现在,当您将鼠标悬停在折线(由多条折线组成)上时,您只需迭代一条子折线的位置,而不是复合折线的所有位置(由n条折线组成)。
这有什么用?如果您选择n = 10,那么在上面的示例中,您只需要迭代100到400个点而不是1000到4000个点,以找到最佳匹配,即您正在悬停的位置。如果在某些浏览器上n = 10仍然太慢,则选择n = 20或n = 50。 Goolgle Maps API正在将其缩小到子折线,因此您可以跳过迭代其他n-1个子折线的位置。
我在我的应用程序中遇到了同样的问题,但我已经有很多单独的折线,需要像上面一样找到位置。这些折线无法编辑,因此我需要按照您在问题末尾描述的那样实现搜索部分,并将其作为我建议针对您的特定问题的解决方案的一部分。