【发布时间】:2012-02-21 10:46:07
【问题描述】:
我正在制作一个实时更新用户位置和路径并将其显示在 Google 地图上的应用程序。我的功能允许使用每秒更新的对象同时跟踪多个用户。
现在,当用户在 Android 应用中按下按钮时,坐标会发送到数据库,并且每次位置发生变化时,都会在地图上更新一个标记(并形成一条折线)。
由于我有多个用户,我发送一个唯一且随机生成的字母数字字符串,以便我可以为每个用户显示单独的路径。当 JS 从数据库中提取这些数据时,它会检查用户是否存在,如果不存在,它会创建一个新键,其值为列表。它看起来像这样:
loc = {f096012e-2497-485d-8adb-7ec0b9352c52: [new google.maps.LatLng(39, -86),
new google.maps.LatLng(38, -87),
new google.maps.LatLng(37, -88)],
44ed0662-1a9e-4c0e-9920-106258dcc3e7: [new google.maps.LatLng(40, -83),
new google.maps.LatLng(41, -82),
new google.maps.LatLng(42, -81)]}
我正在做的是将坐标列表存储为键的值,即用户的 ID。每次通过添加到列表中更改位置时,我的程序都会不断更新此列表(这可以正常工作)。
我需要做的是每次位置更改时更新标记的位置。我想通过选择数组中的最后一项来做到这一点,因为那将是最后一个已知位置。现在,每次更改位置时,都会向地图添加一个新标记(示例中的每个点都会在该位置显示一个标记),因此会继续添加标记。
每次位置更新时,我都会使用“for (x in loc)”语句从列表中获取最后一个位置并使用它来更新标记。如何从哈希中的数组中选择最后一个元素?
【问题讨论】:
-
@tomdemuyt:
loc不是 OP 询问的数组。loc['f096012e-2497-485d-8adb-7ec0b9352c52'](或loc['f096012e-2497-485d-8adb-7ec0b9352c52'])是。 -
以相反的顺序存储您的位置并调用 loc[0] 怎么样?
-
@Christophe 我也想过这个问题,但如果他跟踪它们一段时间,他将轻松获得超过 1,000 个位置,性能可能会成为问题。追加到末尾比将它们向下移动要快得多。
-
@LeviMorrison:如果可以选择更改数组,那么您可以简单地使用
unshift(),这应该比手动“移动”元素快得多。要在数组中只有 1000 个元素,并将它们添加到开头,只需使用以下命令(其中arr是存储要存储的元素的数组):arr.unshift(new_element); arr.splice(1000);。unshift()在数组的开头添加元素,splice(1000)删除前 1000 个元素之后的所有内容(如果数组更短,则不会删除任何内容)。它符合您的需求吗? -
使用
.length-1将是the fastest 它看起来像。
标签: javascript arrays google-maps google-maps-markers