gpt4 book ai didi

android - 如何在mysql中存储一个gps坐标,然后在没有时间延迟的情况下检索它?

转载 作者:行者123 更新时间:2023-11-30 23:10:10 25 4
gpt4 key购买 nike

我已经完成了一个 phonegap 应用程序,它每 10 秒将 gps 坐标数据汇集到服务器。现在根据计算 8 小时的跟踪,它将为每个用户存储大约 8*60*6=2880 条记录。我目前的要求仅限于使用 20 个用户。 (基本上它跟踪用户的路线)

问题分为两部分:

  • 存储数据并尽快检索数据的最佳方式是什么。
  • 是否可以在 google maps API v3 上一次显示 2880 个坐标?如果不是,显示路线的最佳方式是什么?

我的一个演示获得了 90 分左右的好成绩,但让我担心的是每个用户每 8 小时 2880 条巨大的记录。

谢谢


编辑 1
虽然这是一个老问题,但我最近在做一个项目,我在 map 上显示了大约 10K 个点,希望我的观察对 future 的访问者有所帮助:

  • Google map 现在似乎对您可以在客户端显示的点数没有硬性限制。
  • 您可以在客户端显示的点数完全取决于客户端的“硬件”,使用 jpeg 或 gif 标记的点数越大,渲染速度越慢,四处移动或放大时出
  • 要在 map 上拥有大量指针且性能影响最小,预先计算平移或缩放发生前后需要渲染的点数将大有帮助。

最佳答案

所以这是一个可能的解决方案:

首先,您需要找出 Google Maps API 可以处理多少个点并仍然显示该线。我认为这只需要进行一些测试或研究。无论如何,一旦您找到要显示的神奇点数以绘制您的路径,然后取该数字并将其乘以 2/3

例如,如果一条好的路径需要有 90 个点,则计算 90*2/3

2/3 的原因是下面的循环将返回平均等于 3/2 的最大点数乘以我们使用的变量. 60 平均可以得到 90 个图。有一种情况,返回最多的图是 (2 * (magical number of points)) - 1 例如,假设我们想要平均 90 点,那么我们可以在极少数情况下有 (2*(90*2/3))-1 = 119 points 您只需在实现后进行一些测试,以确保您的魔法点数适用于具有 2/3 的魔法点数和 2 * 魔法点数 -1 的 map 。我希望这不会太困惑...我已尽力解释。

其余部分将是 sudo 代码。无论您使用哪种语言连接到 MySQL,您都必须对其进行调整:

//get the total number of rows returned
var total_rows = mysql->num_rows;
//calculate max to be 2/3 times your magic number for max plots, i.e. 90
var max_plots = 90*2/3;
//define empty plots array to fill with coordinates
var plots = array();
//check if total_rows is less than max_plots then:
if(total_rows > max_plots){
//find the quotient of the the divident total_rows and the divisor max_plots rounded down to the nearest whole int
var quotient = floor(total_rows/max_plots);
//define variable i to use in loop
var i = 1;
//loop through returned rows
while(row = mysql->fetch_row()){
//return only rows that are the first, last, or are dividable by the quotient evenly; Note: if your language supports it, use the Modulus operator like (i % quotient) == 0 for the last or statement.
if(i == 1 || 1 == total_rows || (i - (i * (floor(i/quotient)))) == 0){
//set plots to use on map
plots[] = array(
'lat' => row['lat'],
'lon' => row['lon'],
);
}
//increment counting variable
i++;
}
// else if total_rows less than or equal to max_plots retrieve all plots
} else {
while(row = mysql->fetch_row()){
plots[] = array(
'lat' => row['lat'],
'lon' => row['lon'],
);
}
}

这可能不是最好的方法,因为它仍然需要从数据库中检索所有行,但它确实解决了如何仅在 Google map 上均匀地打印选定的最大数量。

注意:请确保您的查询通过自动递增键或其他方式对行进行排序,以便图表按照输入数据库的顺序排列。

最详细的 map 将是带有 (2 * magic_plot_number) - 1 的 map ,而您最不详细的 map 将包含 magic_plot_number 或者如果更低,则 total_plots。也就是说,8 小时的跟踪将绘制一条路径,每 7 分 51 秒有一个点,在 8 小时内使用神奇的绘图编号 90 总共有 61 个点。图越多,点数越接近 2/3 * the magic plot number

我希望这对您有帮助。

关于android - 如何在mysql中存储一个gps坐标,然后在没有时间延迟的情况下检索它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152367/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com