如何使用数据库(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?的主要内容,如果未能解决你的问题,请参考以下文章