Java程序中的位置计数问题

Posted

技术标签:

【中文标题】Java程序中的位置计数问题【英文标题】:Location Count issue in Java program 【发布时间】:2012-04-14 18:07:34 【问题描述】:

我正在研究 GPS 位置,我需要在相应地址中转换纬度和经度。我有一个包含所有纬度和经度的数据库(超过 1,50,000 个数据)及其实际地标,即一个主表中的地址。

我们已在许多穿越所有地理位置的车辆上安装了 GPS 设备。该设备每 2 分钟发送一次经纬度的实际位置,我得到这个纬度和经度并映射到我们的主表并检查我们主表的哪个地标附近。为了进行这个计算,我做了一些数学运算,将一些增量值添加到从车辆获取的纬度和经度上,然后从我的主表中找到最近的搜索,一旦我们发现我们显示车辆距离 XYZ 位置 5 公里,我们得到 XYZ 位置主表是最近的点。

这个程序基本上要花很多时间来计算位置,因为我们在 Vehicle 上安装了 10,000 个 GPS 设备,每个设备在 2 分钟内发送 GPS 数据,所以你可以想象我们得到了多少数据。

能否请您帮我解决这个问题,让它变得非常可扩展和快速。

提前致谢。

【问题讨论】:

把它分解成几个组成部分,看看什么花费的时间最长,把你的精力集中在那里。是数据发送回来吗?是计算吗?是该位置的 SQL 搜索吗?什么在花时间?您需要将其分解为 A-->B-->C-->D-->E-->F 等,并弄清楚每个步骤需要多长时间,并将时间集中在获得最大收益的地方降压。继续这样做,直到性能可以接受。如果您无法从 A-->F 跟踪时间,那么您需要构建它。 @xQbert 我们有一个表格,其中包含三列纬度、经度和位置 - 一旦我从设备中获得任何纬度和经度,我们将在纬度和经度列中插入,但我们不会在位置列中插入任何内容,通过发送纬度和经度对主表进行计算后,我们得到距离 XYZ 5 公里的位置,然后我们在第一个表的位置列中更新。实际上,将纬度和经度传递给主表以从主表中我们可用的地标获取最近的位置需要很多时间,我在这里寻求帮助来改进。谢谢 那么你有程序吗?功能?还是在 SQL Server 200X 中长期运行的东西?或 mysql,或 ORACLE 或 DB2 或......如果是这样,这将有助于查看实际长时间运行的 SQL 和执行计划,以帮助提高性能。或者您是否在反复尝试从 Java 到数据库以尝试找到“最近”的地标? @xQbert 是的,我反复尝试找到最近的位置,我使用的是 SQL Server 2005,我使用的是函数而不是过程。 从 SQL 切换到 MongoDB 会有帮助吗? 【参考方案1】:

如何在您的数据库上使用 GIS 图层?像 PostGIS 这样的东西为 sql 添加了一个具有这种功能的新层。来自FAQ:

3.7。找到另一个对象半径内的所有对象的最佳方法是什么?

为了最有效地使用数据库,最好做半径查询 将半径测试与边界框测试相结合:边界 盒子测试使用空间索引,可以快速访问 然后应用半径测试的数据。

ST_DWithin(geometry, geometry, distance) 函数很方便 执行索引距离搜索。它通过创建一个 搜索足够大以包围距离半径的矩形,然后 对索引的结果子集执行精确距离搜索。

例如,要查找所有具有 100 米 POINT(1000 1000) 的对象 以下查询可以正常工作:

SELECT * FROM geotable WHERE ST_DWithin(geocolumn, 'POINT(1000 1000)', 100.0);

【讨论】:

以上是关于Java程序中的位置计数问题的主要内容,如果未能解决你的问题,请参考以下文章

奇数序列替换为计数

java中的对象计数程序

使用 JDBC 的 Oracle 临时表计数错误

Java中如何使用科学计数法

我怎么知道计数器增量是不是在正确的位置以跟踪比较数~C++?

为计数器应用程序重置或制作连续运动布局