如何使用数据库(mysql)中的gps位置在两个地理点之间找到pople?

Posted

技术标签:

【中文标题】如何使用数据库(mysql)中的gps位置在两个地理点之间找到pople?【英文标题】:how can i find pople between two geo points using gps locations from database(mysql)? 【发布时间】:2012-10-31 07:54:04 【问题描述】:

我想在 android 中创建一个应用程序,用户可以在其中输入两个地理点(纬度和经度),并且通过这两个点我想在数据库表(mysql)中进行查询,其中人们的信息已经与他们的 gps 位置(纬度)一起存储和长)通过使用上述查询,我​​想在输入的起点和终点之间搜索人。

例如:用户 A 输入了起点:德里和终点:孟买,现在他将点击搜索按钮,所有的人都会来到孟买和德里之间的 gps 位置。如果可以的话。所有人员都将显示为列表视图。

希望我已经解释得很好,你理解.. 请有人告诉我如何实现这一目标?我使用 php mysql 作为后端。

【问题讨论】:

【参考方案1】:

如果你想知道谁在由两点分隔的正方形区域中,你必须检查人的位置是否在两个点的纬度和经度之间。示例:

//Delimiting points:
    Dehli:    28°36′36″N 77°13′48″E
    Mumbai:   18°58′30″N 72°49′33″E

//People:
    Person A: 28°40′52″N 73°21′47″E
    Person B: 22°03′44″N 75°56′11″E

Person A is OUTSIDE the square area between Dehli and Mumbai because the latitude
he is on is greater than the greatest latitude of both points:
    Mumbai lat. < Dehli lat. < Person A lat.

Person B is INSIDE the square area between Dehli and Mumbai because the latitude
and longitude he is on is between both points latitude and longitude:
    Mumbai lat. < Person B lat. < Dehli lat.
    Mumbai lon. < Person B lon. < Dehli lon.

如果你想计算距离,你可以依靠Great Circle Formula。这可用于查找半径 X 英里左右的人员。

【讨论】:

看到我使用过这个查询:$sql=mysql_query("select * from locations t // where // t.lat 在 21.6300 和 22.3000 之间,t.lont 在 69.6000 和 73.1900 之间 // order by // sqrt((t.lat - 21.6300)*(t.lat - 22.3000) + (t.lont - 69.6000)*(t.lont - 73.1900)) desc"); 但是在这个查询上面的问题咏叹调 试试$sql=mysql_query("select t.*, sqrt((t.lat - 21.6300)*(t.lat - 22.3000) + (t.lont - 69.6000)*(t.lont - 73.1900)) as d from locations t // where // t.lat between 21.6300 and 22.3000 and t.lont between 69.6000 and 73.1900 // order by // d desc"); 但我个人不鼓励使用勾股定理进行地理距离计算。由于地球的曲线,这在长距离操作时并不精确。改用大循环公式。

以上是关于如何使用数据库(mysql)中的gps位置在两个地理点之间找到pople?的主要内容,如果未能解决你的问题,请参考以下文章

如何更好地处理 GPS 位置和 android

给定两点在特定时间找到gps位置?

如何忽略 android 中的 irelevent gps 位置更新?

将 GPS 位置存储在数据库 varchar 字段中

如何在Android中使用GPS服务

在 android 中获取更新位置和禁用 GPS 后如何获取?