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
正如我在评论中提到的,不可能把所有的点都放在一条线上,因为数字是无限的 但是,您可以返回固定数量的积分。这个数字很大程度上取决于您想要达到的精度水平
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)]);
}