Java程序中的位置计数问题

时间:2012-04-14 18:07:35

标签: java sql java-ee

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

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

该程序基本上需要花费大量时间来计算位置,因为我们在车上安装了10,000个GPS设备,并且每台设备在2分钟内发送GPS数据,因此您可以想象我们获得了多少数据。

请您帮我解决这个问题并使其具有可扩展性和快速性。

提前致谢。

1 个答案:

答案 0 :(得分:1)

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

  

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

     

要最有效地使用数据库,最好进行半径查询   它将半径测试与边界框测试结合起来:边界   box test使用空间索引,可以快速访问子集   然后应用半径测试的数据。

     

ST_DWithin(几何,几何,距离)函数是一种方便的方法   执行索引距离搜索。它通过创建一个   搜索矩形足够大,以包围距离半径,然后   在索引的结果子集上执行精确的距离搜索。

     

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

     

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