经纬度合法性判断
来源:互联网 发布:初级网络优化工程师 编辑:程序博客网 时间:2024/06/07 01:23
经纬度点位未落在所规定的包围圈内,则判定经纬度不合法。说明:该脚本计算点与适量图像的关系/* * nbMap为不同地区所形成的经纬度包围圈,在包围圈内的经纬度才算合法 */var nbMap = {'地区A':'119.817056,29.672356,119.809077,29.669017,119.802907,29.661541,119.797706,29.660926','地区B':'119.256496,29.162391,119.259813,29.160785,119.258277,29.147438,119.27259,29.141696','地区C':'119.857109,29.339346,119.850753,29.338165,119.844806,29.33209,119.833737,29.33016' } g_calculate = { // 判断点是否在矩形框内 isPointInRect:function(pt,rectStr){ var rect = rectStr.split(","); var minx = rect[0]; var miny = rect[1]; var maxx = rect[2]; var maxy = rect[3]; if(pt.x<=maxx && t.x>=minx && pt.y<=maxy && pt.y>=miny){ return true; }else return false; }, // 判断点是否在多边形内 isPointInPolygon:function(pt,polygonStr){ var poly = []; var polygonArr = polygonStr.split(","); // 构造多边形坐标数组 for(var x = 0;x<polygonArr.length;x=x+2){ poly.push({ x:parseFloat(polygonArr[x]), y:parseFloat(polygonArr[x+1]) }); } // 形成闭包点串 poly.push({ x:parseFloat(polygonArr[0]), y:parseFloat(polygonArr[1]) }); for (var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i) ((poly[i].y <= pt.y && pt.y < poly[j].y) || (poly[j].y <= pt.y && pt.y < poly[i].y))&&(pt.x < (poly[j].x - poly[i].x) * (pt.y - poly[i].y) / (poly[j].y - poly[i].y) + poly[i].x)&& (c = !c); return c; }, // 判断点是否在圆内 isPointInCircle:function(pt,circleStr){ var centerX = parseFloat(circleStr.split(",")[0]); var centerY = parseFloat(circleStr.split(",")[1]); var radius = parseFloat(circleStr.split(",")[2]); return (Math.pow((centerX-pt.x),2)+Math.pow((centerY-pt.y),2))>Math.pow(radius,2)?false:true; }, /** * 判断点是否在线缓冲区内 */ isPointInLineBuffer:function(pt,lineStr,radius){ /** * 构造折现中线段数组 */ var linePointArr = lineStr.split(","); var lineArr = []; for(var i=0;i<linePointArr.length-2;i=i+2){ lineArr.push([{ x:parseFloat(linePointArr[i]), y:parseFloat(linePointArr[i+1]) },{ x:parseFloat(linePointArr[i+2]), y:parseFloat(linePointArr[i+3]) }]); } /** * 判断点是否在线的缓冲区内:1.点是否在线段上 2.点距离各条线段的垂直距离是否小于缓冲半径 */ var mindistance = radius; for(var j=0;j<lineArr.length;j++){ // 根据两点求出直线方程 var k=(lineArr[j][0].y-lineArr[j][1].y)/(lineArr[j][0].x-lineArr[j][1].x); var b = lineArr[j][0].y-k*lineArr[j][0].x; // 判断点是否在线上 var minX = Math.min(lineArr[j][0].x,lineArr[j][1].x); var maxX = Math.max(lineArr[j][0].x,lineArr[j][1].x); if(pt.y==(k*pt.x+b)){ if(pt.x<maxX&&pt.x>minX){ return true; }else{ var dis_start = Math.sqrt(Math.pow((pt.x-lineArr[j][0].x),2)+Math.pow((pt.y-lineArr[j][0].y),2)); var dis_end = Math.sqrt(Math.pow((pt.x-lineArr[j][1].x),2)+Math.pow((pt.y-lineArr[j][1].y),2)); mindistance = mindistance>Math.min(dis_start,dis_end)?Math.min(dis_start,dis_end):mindistance; } }else{ // 求垂线常量b var b_cx = (1/k)*pt.x+pt.y; // 求垂点 var x_cd = (b_cx - b)/(k+1/k); var y_cd = k * x_cd + b; // 如果垂点落在线段内,点到线段最短距离为垂线段距离 if(x_cd<maxX&&x_cd>minX){ var cx_dis = Math.sqrt(Math.pow((pt.x-x_cd),2)+Math.pow((pt.y-y_cd),2)); mindistance = mindistance<cx_dis?mindistance:cx_dis; }else{ // 否则计算点到线段两端点的最短距离 var dis_start = Math.sqrt(Math.pow((pt.x-lineArr[j][0].x),2)+Math.pow((pt.y-lineArr[j][0].y),2)); var dis_end = Math.sqrt(Math.pow((pt.x-lineArr[j][1].x),2)+Math.pow((pt.y-lineArr[j][1].y),2)); mindistance = mindistance>Math.min(dis_start,dis_end)?Math.min(dis_start,dis_end):mindistance; } } } return mindistance<radius?true:false; }}
0 0
- 经纬度合法性判断
- 判断日期合法性
- 判断邮箱的合法性
- 判断手机号合法性 (C#)
- 手机号码合法性判断
- 手机号码合法性判断
- 身份证号码的合法性判断
- 判断身份证号码的合法性
- java 《判断身份证合法性》
- JS判断IP合法性
- 判断域名格式合法性
- 手机号码合法性判断
- 判断手机号码合法性
- 身份证号码合法性判断
- Android判断电话号码合法性
- Oracle判断字符串合法性
- 手机号码合法性判断
- 身份证号码合法性判断
- CentOS VNCServer安装
- 斜线表头
- YAHOO 35条前端优化建议
- 一个字符串常量实验引发的思考
- strcpy,strcat,memcpy和memmove的实现
- 经纬度合法性判断
- iOS开发--Kiwi使用进阶 Mock, Stub, 参数捕获和异步测试
- CNN一些知识点
- 在Centos 中将zookeeper设置成开机启动
- 872 开会【排列组合】
- 快速排序
- Visual Studio插件Visual AssistX的使用
- jquery中 css样式操作
- unix/linux编程实践教程------学习笔记