如何在距离点X点处找到经度和纬度?

时间:2014-01-30 11:34:11

标签: c# php mysql windows-phone-8 geolocation

我正在开发一个位置跟踪应用程序,我正试图找出我当前位置1000 mtr半径内所有朋友的位置。做这个的最好方式是什么?

我能想到的一种方法是计算我的位置与我朋友所有位置之间的距离,看看它是否小于1000 mtr。但这需要更多时间来浏览数据库中的每个条目并计算每个条目,其中大部分可能来自很远的地方。

我还在考虑其他事情。我想要在圆形区域内的位置。如果我可以得到包围圆的正方形的坐标,我可以将我的结果集过滤到该正方形内的坐标(在一个特定的一组特征和经度之间)然后我可以计算到每个条目的距离。我该怎么做呢? 如何获得最大纬度和经度?我的SQL查询也会像 min< (each.location.degree)<最大

如果有更好的选择,请告诉我。我并不担心极端准确性而是性能。我正在使用WP8,因此坐标的格式为 Lat:47.626,Long:-121.989

3 个答案:

答案 0 :(得分:2)

是的,最好从一个矩形开始。 坐标mylat周围的最小/最大纬度和经度,距离dist(km)的mylon可以计算如下:

set lon1 = mylon-dist/abs(cos(radians(mylat)) * 111);
set lon2 = mylon+dist/abs(cos(radians(mylat)) * 111);
set lat1 = mylat-(dist/111); 
set lat2 = mylat+(dist/111);

该矩形内所有点的确切距离可以通过以下公式计算:

6367 * 2 * ASIN(SQRT( POWER(SIN((origin.latitude -destination.latitude) * pi()/180 / 2), 2) +   COS(origin.latitude * pi()/180) * COS(destination.latitude * pi()/180) * POWER(SIN((origin.longitude -destination.longitude) * pi()/180 / 2), 2) )) as distance

答案 1 :(得分:0)

实际上你的帖子提出了几个问题。

  1. 如何计算两个GPS位置之间的距离。
  2. 当选择基于二维数据(例如位置)时,如何从数据库中有效地检索数据选择。
  3. 一个好的解决方案可能同时解决这两个问题:空间数据库。如果您有一个支持2-dim位置的数据库(通常称为地理数据),那么该数据库将允许您查询两个位置之间的距离,并将根据该位置提供选择。我使用过ORACLE空间数据,但现在大多数数据库系统都应该支持空间数据。

    关于替代(不太精确)方法的一些提示: LAT / LON格式的GPS位置难以处理。如果您不想确定到世界另一端的其他位置的距离,但是在一个小半径内,您可以将位置转换为简单的2d格式(提示map projection)。 然后你的数据库就可以存储那些X / Y坐标并进行简单的查询,例如像你暗示的那样“在x / y位置的方块中获取所有位置”。

    我希望有所帮助。

答案 2 :(得分:0)

正如您已经猜到的那样,您将获得更高的性能来计算您所在位置周围的矩形,并检测其中的所有对象,而不是更复杂的半径搜索。

请查看此页面上的“目的地点给定距离和起点承载”一节: http://www.movable-type.co.uk/scripts/latlong.html