【问题标题】:How to find the nearest points to given coordinates如何找到给定坐标最近的点
【发布时间】:2016-06-14 04:47:55
【问题描述】:

我如何识别具有 LAT、LONG 坐标格式的点是否靠近其他点。

假设我想找到附近的所有点

-38.9086621 ,-68.082214

距离不到 1 公里。我已经知道如何在给定的象限中找到坐标,但不知道如何在点附近找到象限。

【问题讨论】:

  • 如果您需要精确度,您应该将地理坐标转换为公制参考系统(例如 EPSG:3857),然后您可以使用简单的数学运算。你可以看看 proj4js (proj4js.org)。
  • @MarcCompte 您在测量距离时达到了什么样的精度改进?在大地测量工作中,角度或距离测量、补偿、测量误差……最好在 ECEF 等全局坐标系中完成,以避免参考框架出现错误。
  • @JoseHermosillaRodrigo 我们谈论距离。两点之间的距离是平面上的度量。地理坐标是三维的。除了从 3D 转换为平面之外,没有其他方法可以计算公制距离。当然,您可以使用基本的三角学来做到这一点,但是您假设地球是一个完美的球体,这很少会像使用椭圆体(地球 3D 形状的更复杂近似)那样精确。这就是为什么变换是实现高精度距离计算的关键,而不是使用激光测量。

标签: javascript trigonometry closest


【解决方案1】:

您可以使用半正弦公式计算两个给定坐标之间的距离。计算出的距离是给定坐标之间的直接连接(直线)。

JavaScript 示例 (Source):

var R = 6371e3; // meters
var lat1Radians = lat1.toRadians();
var lat2Radians = lat2.toRadians();
var deltaLat = (lat2-lat1).toRadians();
var deltaLon = (lon2-lon1).toRadians();

var a = Math.sin(deltaLat/2) * Math.sin(deltaLat/2) +
        Math.cos(lat1Radians) * Math.cos(lat2Radians) *
        Math.sin(deltaLon/2) * Math.sin(deltaLon/2);
var c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));

var d = R * c;

【讨论】:

  • 请避免使用非拉丁字母作为变量名。可能会导致很多问题;)
  • 刚刚从源中复制了它,但现在已更正。谢谢
猜你喜欢
  • 2013-06-28
  • 1970-01-01
  • 2017-03-09
  • 2014-09-07
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多