Vector 通过指向一个方向来查找对象

Vector 通过指向一个方向来查找对象,vector,gps,location,Vector,Gps,Location,我有一个具体的问题,我发现很难找到解决办法 使用GPS设备我可以找到我目前在地球上的位置。我需要能够指向一个方向(iPhone或类似设备上的指南针),并找到该方向上的重要对象(位置)!假设我在数据库中存储了所有这些位置。假设您有一个位置和方向,您的目标是在适当的方向上查找数据库中与该位置相邻的项目 显然,您可以扫描数据库中的每个元素,并回答每个元素,“这是在该区域吗?”。真正的魔法是效率;如何为数据库中的数据编制索引,以便在不必检查每个记录的情况下回答该问题 这方面的一个很好的例子是。但是,它的

我有一个具体的问题,我发现很难找到解决办法


使用GPS设备我可以找到我目前在地球上的位置。我需要能够指向一个方向(iPhone或类似设备上的指南针),并找到该方向上的重要对象(位置)!假设我在数据库中存储了所有这些位置。

假设您有一个位置和方向,您的目标是在适当的方向上查找数据库中与该位置相邻的项目

显然,您可以扫描数据库中的每个元素,并回答每个元素,“这是在该区域吗?”。真正的魔法是效率;如何为数据库中的数据编制索引,以便在不必检查每个记录的情况下回答该问题

这方面的一个很好的例子是。但是,它的实现不处理方向,因此需要过滤结果。您将使用数据库获取距离您x范围内的所有对象,并将过滤掉不在适当方向的元素

如果不能将数据库引擎与本机地理空间索引一起使用,则必须自己实现。如评论中所述,哈弗森函数用于计算球体(本例中为地球)上的距离。与其计算每个点和你自己之间的距离,不如从消除任何严重超出范围的元素开始,例如(你的纬度+你的搜索距离)<(对象纬度)。然后用哈弗森进一步过滤。您还可以使用地理空间哈希函数提前完成大部分工作

一旦所有元素都在范围内,就可以将数据库中的x-y坐标转换为极坐标。简言之:

arctan((item_y - users_y) / (item_x - users_x)) = the angle between the item and the user
如果您为用户“范围”内的每个项目计算此值,并过滤掉不在指南针角度(例如+/-20度)某些范围内的任何元素,您将获得所需的元素

如果效率仍然是一个问题,您可以通过立即使任何元素无效(例如,位于用户错误一侧的元素)(如果用户面向西方,则任何x坐标高于用户的元素都不可能在其视图中)来变得更聪明。根据您的编程语言,使用精度较低的静态Arctan表也可能更有效


如果您特别聪明,还可以找到按角度索引数据的方法,这将进一步降低所需的计算量。

假设您有一个位置和方向,您的目标是在适当的方向上找到数据库中与该位置相邻的项

显然,您可以扫描数据库中的每个元素,并回答每个元素,“这是在该区域吗?”。真正的魔法是效率;如何为数据库中的数据编制索引,以便在不必检查每个记录的情况下回答该问题

这方面的一个很好的例子是。但是,它的实现不处理方向,因此需要过滤结果。您将使用数据库获取距离您x范围内的所有对象,并将过滤掉不在适当方向的元素

如果不能将数据库引擎与本机地理空间索引一起使用,则必须自己实现。如评论中所述,哈弗森函数用于计算球体(本例中为地球)上的距离。与其计算每个点和你自己之间的距离,不如从消除任何严重超出范围的元素开始,例如(你的纬度+你的搜索距离)<(对象纬度)。然后用哈弗森进一步过滤。您还可以使用地理空间哈希函数提前完成大部分工作

一旦所有元素都在范围内,就可以将数据库中的x-y坐标转换为极坐标。简言之:

arctan((item_y - users_y) / (item_x - users_x)) = the angle between the item and the user
如果您为用户“范围”内的每个项目计算此值,并过滤掉不在指南针角度(例如+/-20度)某些范围内的任何元素,您将获得所需的元素

如果效率仍然是一个问题,您可以通过立即使任何元素无效(例如,位于用户错误一侧的元素)(如果用户面向西方,则任何x坐标高于用户的元素都不可能在其视图中)来变得更聪明。根据您的编程语言,使用精度较低的静态Arctan表也可能更有效


如果您特别聪明,还可以找到按角度索引数据的方法,这将进一步降低所需的计算量。

您需要提供更多的信息。您是否通过一些API访问设备?在这种情况下,哪种API?或者你的应用程序是直接从设备上读取
$GPRMC
句子吗?我正在开发一个Android应用程序,它使用本地SQLite数据库,在那里存储有关我的城市中“地标”的信息。每个地标都有其纬度和经度。现在我想使用我的内置指南针,它会告诉我设备指向哪个方向,并告诉我那个方向有什么物体。所以Java或C#代码可能会有所帮助。当我想确定两个对象之间的距离时,我使用了Haversine。我认为答案是在三角学,虽然我在这方面的知识非常有限!你需要提供更多的信息。您是否通过一些API访问设备?在这种情况下,哪种API?或者你的应用程序是直接从设备上读取
$GPRMC
句子吗?我正在开发一个Android应用程序,它使用本地SQLite数据库,在那里它存储有关“我的城市”中“地标”的信息