Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何找到离给定坐标最近的点_Javascript_Trigonometry_Closest - Fatal编程技术网

Javascript 如何找到离给定坐标最近的点

Javascript 如何找到离给定坐标最近的点,javascript,trigonometry,closest,Javascript,Trigonometry,Closest,如何识别具有纬度、长坐标格式的点是否靠近其他点 假设我想找到靠近以下位置的所有点: -38.9086621,-68.082214 距离不到1公里。我已经知道如何在给定的象限中找到一个坐标,但不知道如何在一个点附近找到一个象限。您可以使用哈弗森公式来计算两个给定坐标之间的距离。计算的距离是给定坐标(直线)之间的直接连接 JavaScript示例(): 可以使用哈弗森公式计算两个给定坐标之间的距离。计算的距离是给定坐标(直线)之间的直接连接 JavaScript示例(): 请避免使用非拉丁字母作为

如何识别具有纬度、长坐标格式的点是否靠近其他点

假设我想找到靠近以下位置的所有点:

-38.9086621,-68.082214


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

您可以使用哈弗森公式来计算两个给定坐标之间的距离。计算的距离是给定坐标(直线)之间的直接连接

JavaScript示例():


可以使用哈弗森公式计算两个给定坐标之间的距离。计算的距离是给定坐标(直线)之间的直接连接

JavaScript示例():


请避免使用非拉丁字母作为变量名。可能会导致很多问题;)刚从源代码中复制,但现在已更正。谢谢,请避免使用非拉丁字母作为变量名。可能会导致很多问题;)刚从源代码中复制,但现在已更正。感谢如果您需要精度,您应该将地理坐标转换为公制参考系(如EPSG:3857),然后您可以使用简单的数学。你可以看看proj4js()。@marcompte在测量距离时,你达到了什么样的精度改进?在大地测量工程中,角度或距离测量、补偿、测量误差。。。最好在全局坐标系(如ECEF)中进行,以避免参考坐标系出现错误。@JoseHermosillaRodrigo我们谈论的是距离。两点之间的距离是平面上的度量。地理坐标是三维的。除了从三维转换到平面之外,没有其他方法可以计算公制距离。当然,你可以使用基本的三角学来实现这一点,但是你假设地球是一个完美的球体,而这很少像使用椭球体(地球三维形状的更复杂近似)那样精确。这就是为什么转换是实现高精度距离计算的关键,而不是使用激光测量。如果需要精度,应将地理坐标转换为公制参考系(如EPSG:3857),然后使用简单的数学。你可以看看proj4js()。@marcompte在测量距离时,你达到了什么样的精度改进?在大地测量工程中,角度或距离测量、补偿、测量误差。。。最好在全局坐标系(如ECEF)中进行,以避免参考坐标系出现错误。@JoseHermosillaRodrigo我们谈论的是距离。两点之间的距离是平面上的度量。地理坐标是三维的。除了从三维转换到平面之外,没有其他方法可以计算公制距离。当然,你可以使用基本的三角学来实现这一点,但是你假设地球是一个完美的球体,而这很少像使用椭球体(地球三维形状的更复杂近似)那样精确。这就是为什么转换是实现高精度距离计算的关键,而不是使用激光测量。
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;