监控点排序核心算法

来源:互联网 发布:cms监控系统 编辑:程序博客网 时间:2024/06/07 01:11

解决思路及核心算法:

  1. 将在地图上所画的折线拆分成几个线段(直线),API中的Polyline对象提供了获取每个线段的接口:

    Flex API中的POLYLINE接口

    JavaScript API中的POLYLINE接口

    备注:一条polyline由多个线段组成。

  2. 计算视频点到折线的垂直点即投影点:

    核心算法如下:

/**

* 功能:根据线段的起点、终点和视频点坐标,计算视频点到直线垂直点

* point1:线段的起点

* point2:线段的终点

* point3:视频点

*/

privatefunction getVerticalPoint(point1:MapPoint,point2:MapPoint,point3:MapPoint):void{

                //一般式方程aX+bY+c=0

                var a:Number = point2.y - point1.y;

                var b:Number = point1.x - point2.x;

                var c:Number = point2.x*point1.y-point1.x*point2.y;

                

                //计算点到直线的垂直点坐标

                var vx:Number = (b*b*point3.x-a*b*point3.y-a*c)/(a*a+b*b);

                var vy:Number = (a*a*point3.y-a*b*point3.x-b*c)/(a*a+b*b);

                varverticalPoint:MapPoint = new MapPoint(vx,vy,map.spatialReference); //垂直点坐标

                

                var verticalGraphic:Graphic = new Graphic(verticalPoint);

                graphicsLayer.add(verticalGraphic); //添加到客户端图层

 

            }

  1. 判断垂直点是否在此线段上,具体可以使用几何服务或几何引擎(如果使用的是JavaScript API,提供了本地几何引擎操作),里面提供了两个几何之间的是否相交的接口:

    JavaScript API本地几何引擎的几何相交判断接口

  2. 如果垂直点和线段相交,那么再计算垂直点到线段起点的距离,并根据距离的长短来确定视频点的次序。
0 0