Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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_Google Maps_Leaflet_Leaflet.draw - Fatal编程技术网

Javascript 如何获取两点多段线之间的所有坐标

Javascript 如何获取两点多段线之间的所有坐标,javascript,google-maps,leaflet,leaflet.draw,Javascript,Google Maps,Leaflet,Leaflet.draw,我如何才能找到多边形线上两点之间的所有坐标。 我不需要距离,也不需要中点 假设我有两点 点A(左)纬度:39.091868长:-9.263187 点B(右)纬度:39.089815长:-9.261857 点A到点B获取屏幕截图下方的所有坐标 正如我在评论中提到的,不可能把所有的点都放在一条线上,因为数字是无限的 但是,您可以返回固定数量的积分。这个数字很大程度上取决于您想要达到的精度水平 Point=函数(x,y){ 这个.x=x; 这个。y=y; } var pointA=新点(39.091

我如何才能找到多边形线上两点之间的所有坐标。 我不需要距离,也不需要中点

假设我有两点

  • 点A(左)纬度:39.091868长:-9.263187
  • 点B(右)纬度:39.089815长:-9.261857
  • 点A到点B获取屏幕截图下方的所有坐标


    正如我在评论中提到的,不可能把所有的点都放在一条线上,因为数字是无限的

    但是,您可以返回固定数量的积分。这个数字很大程度上取决于您想要达到的精度水平

    Point=函数(x,y){
    这个.x=x;
    这个。y=y;
    }
    var pointA=新点(39.091868,-9.263187);
    var pointB=新点(39.089815,-9.261857);
    var numberOfPoints=20;
    var points=新数组();
    对于(变量i=0;i控制台日志(点)是,这是可能的。我们得到两点之间的距离,并检查距离是否小于3米或任何值。在结果返回true之后,我们调用递归函数。PHP代码

    global $array;
    $array = array();
    
    function recurCollectCoords($coords) {
    global $array;
    $coords = array(
        array(24.925274, 67.096988),
        array(24.924872, 67.097367),
        array(24.924946, 67.097481)
    );
    foreach ($coords as $key => $value) {
        if (isset($coords[$key + 1])) {
    $distance = distance($value[0], $value[1], $coords[$key + 1][0], $coords[$key + 1] 
    [1], "M");
    if ($distance > 3) { //Using each coordinate collect 3 meter distance 
    $coordinates = array(array($value[0], $value[1]), array($coords[$key + 1][0], 
    $coords[$key + 1][1]));
    $midpoint = getTwoPointMidCoord($coordinates);
    $newCoord[] = array(array($value[0], $value[1]), array($midpoint[0], 
    $midpoint[1]), array($coords[$key + 1][0], $coords[$key + 1][1]));
    recurCollectCoords(call_user_func_array('array_merge', $newCoord));
    } else {
    array_push($array, array((string) $value[0], (string) $value[1]));
            }
        }
    array_push($array, array((string) $value[0], (string) $value[1]));
    }
    $uniqueCoords = array_values(array_map("unserialize", 
    array_unique(array_map("serialize", $array))));
    return $uniqueCoords;
    }
    
    function distance($lat1, $lon1, $lat2, $lon2, $unit) {
    if (($lat1 == $lat2) && ($lon1 == $lon2)) {
        return 0;
    } else {
        $theta = $lon1 - $lon2;
        $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * 
    cos(deg2rad($lat2)) * cos(deg2rad($theta));
        $dist = acos($dist);
        $dist = rad2deg($dist);
        $miles = $dist * 60 * 1.1515;
        $unit = strtoupper($unit);
    
        if ($unit == "K") {
            return ($miles * 1.609344);
        } else if ($unit == "N") {
            return ($miles * 0.8684);
        } else if ($unit == "M") {
            return ($miles * 1.609344) * 1000;
        } else {
            return $miles;
        }
    }
    
    }


    我们得到两点之间的距离,并检查距离是否小于3米或任何值。在结果返回true之后,我们调用递归函数。 函数gettwointmidcoord($coordinates){


    你知道两点之间有无限多的点吗?你说的“所有坐标”是什么意思?您是否有一些数据要针对这两点进行验证?另外,您尝试了什么来解决此问题?@模糊我们需要两个顶点之间的多边形线上存在的所有坐标…@SebastianGaweda不,我们没有坐标..我们需要两个顶点之间的多边形线上存在的谷歌地图坐标vertex@RafiUllahPatel我只是想说,你需要限制点的数量,因为理论上它是无限的。因为你说的是一条多段线,你想得到这些点的全像素整数值吗?也许你应该添加你所指的屏幕截图。数组x和y中缺少的lat都显示长值0:点x:-9.261857 y:-9.261857原型:对象1:点x:-9.261790499998 y:-9.2617904999998原型:对象2:点抱歉,点定义中有一个小类型。我修复了上面的示例!请注意,这对平面上的欧几里德几何有效,但不适用于大地测量计算-大地测量解决方案将涉及计算大cir的弧包含两个点的cle。
    function getTwoPointMidCoord($coordinates) {
    
    $num_coords = count($coordinates);
    
    $sumY = 0;
    $sumZ = 0;
    $LATIDX = 0;
    $LNGIDX = 1;
    $sumX = 0;
    $sumY = 0;
    $sumZ = 0;
    
    foreach ($coordinates as $key => $value) {
        $lat = deg2rad($value[0]);
        $lng = deg2rad($value[1]);
        $sumX += cos($lat) * cos($lng);
        $sumY += cos($lat) * sin($lng);
        $sumZ += sin($lat);
    }
    
    $avgX = $sumX / 2;
    $avgY = $sumY / 2;
    $avgZ = $sumZ / 2;
    
    $lng = atan2($avgY, $avgX);
    $hyp = sqrt($avgX * $avgX + $avgY * $avgY);
    $lat = atan2($avgZ, $hyp);
    return ([rad2deg($lat), rad2deg($lng)]);
    }
    
    $num_coords = count($coordinates);
    
    $sumY = 0;
    $sumZ = 0;
    $LATIDX = 0;
    $LNGIDX = 1;
    $sumX = 0;
    $sumY = 0;
    $sumZ = 0;
    
    foreach ($coordinates as $key => $value) {
    $lat = deg2rad($value[0]);
    $lng = deg2rad($value[1]);
    $sumX += cos($lat) * cos($lng);
    $sumY += cos($lat) * sin($lng);
    $sumZ += sin($lat);
    }
    
    $avgX = $sumX / 2;
    $avgY = $sumY / 2;
    $avgZ = $sumZ / 2;
    
    $lng = atan2($avgY, $avgX);
    $hyp = sqrt($avgX * $avgX + $avgY * $avgY);
    $lat = atan2($avgZ, $hyp);
    return ([rad2deg($lat), rad2deg($lng)]);
    }