arcgis开发 >> ArcGIS JS 计算两条相交线交点坐标

最后编辑时间:2021年06月18日 21:09:14

【内容简介】//ArcGIS JS 计算两条相交线交点坐标 intersect: function (geometry_r1, geometry_r2, func) { var path1 = geometry_r1.paths[0]; var path2 = geometry_r2.paths[0]; for (var i = 0; i path1.length - 1; i++) { for (var j = 0; j path2.length - 1; j++) { var a1 = path1[i][1] - path1[i + 1][1]; var b1 = path1[i + 1][0] - path1[i][0]; var c1 = a1 * path1[i + 1][0] + b1 * path1[i + 1][1]; //变成这样的式子: Ax+By = C var a2 = path2[j][1] - path2[j + 1][1]; var b2 = path2[j + 1][0] - path2[j][

//ArcGIS JS 计算两条相交线交点坐标
intersect: function (geometry_r1, geometry_r2, func) {
             var path1 = geometry_r1.paths[0];
             var path2 = geometry_r2.paths[0];
             for (var i = 0; i < path1.length - 1; i++) {
                 for (var j = 0; j < path2.length - 1; j++) {
                     var a1 = path1[i][1] - path1[i + 1][1];
                     var b1 = path1[i + 1][0] - path1[i][0];
                     var c1 = a1 * path1[i + 1][0] + b1 * path1[i + 1][1];
                     //变成这样的式子: Ax+By = C
                     var a2 = path2[j][1] - path2[j + 1][1];
                     var b2 = path2[j + 1][0] - path2[j][0];
                     var c2 = a2 * path2[j + 1][0] + b2 * path2[j + 1][1];
                     // 得到相交点坐标       
                     var d = a1 * b2 - a2 * b1;
                     // 两条线平行
                     if (d == 0) {
                         return false;
                     } else {
                         var x = (b2 * c1 - b1 * c2) / d;
                         var y = (a1 * c2 - a2 * c1) / d;
                         // 相交点在两条线之上吗
                         if ((isInBetween(path1[i + 1][0], x, path1[i][0]) || isInBetween(path1[i + 1][1], y, path1[i][1])) &&
                             (isInBetween(path2[j + 1][0], x, path2[j][0]) || isInBetween(path2[j + 1][1], y, path2[j][1]))) {
                             require(["esri/geometry/Point"], function (Point) {
                                 var pt = new Point(x, y, map2dBase.map.spatialReference);
                                 func(pt);
                             });
                         }
                     }
                 }
                 //当b位于ac间,则为true
                 //a==b或b==c,返回false
                 function isInBetween(a, b, c) {
                     //b接近于a或c,返回false。同时考虑浮点误差
                     if ((Math.abs(a - b) > 0.000001 || Math.abs(b - c) > 0.000001) && ((b > a && b < c) || (b < a && b > c)) || (a == b || b == c)) {
                         return true;
                     } else {
                         return false;
                     }
                 }
             }
         }

分享到: 豆瓣 新浪微博 百度贴吧 QQ空间 QQ好友
复制链接分享给好友或者自己收藏!这里会及时更新中。。。

相关推荐:
 
QQ
QQ:278325424
咨询热线
18191066384