首页 > 其他分享 >js判断坐标点是否在一个多边形坐标数组范围内

js判断坐标点是否在一个多边形坐标数组范围内

时间:2024-01-10 16:31:54浏览次数:26  
标签:yi 多边形 polygon point inside js 坐标 var

主要用到了射线法(Ray Casting Algorithm)来判断一个点是否在多边形的范围内。

下面是一个简单的JavaScript函数来实现这个功能:

function pointInPolygon(point, polygon) {
  var x = point[0];
  var y = point[1];
  var inside = false;
  for (var i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
    var xi = polygon[i][0];
    var yi = polygon[i][1];
    var xj = polygon[j][0];
    var yj = polygon[j][1];
    var intersect = ((yi > y) != (yj > y)) && (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
    if (intersect) inside = !inside;
  }
  return inside;
}

// 使用示例
var pointA = [11, 5];
var polygonB = [[2, 3], [9, 3], [11, 8], [4, 11]];
var result = pointInPolygon(pointA, polygonB);
console.log(result); // 输出 true 或 false

在这个函数中,point是一个包含经纬度坐标的数组,而polygon是一个包含多边形坐标点的数组。函数通过遍历多边形的每一条边,使用射线与边的交点数量来判断点是否在多边形内部。如果交点数量为奇数,则点在多边形内部,否则在外部。

标签:yi,多边形,polygon,point,inside,js,坐标,var
From: https://blog.51cto.com/u_15668841/9182507

相关文章

  • JOSN字符串字段遍历(json-path)
    官网https://github.com/json-path/JsonPath依赖<dependency><groupId>com.jayway.jsonpath</groupId><artifactId>json-path</artifactId><version>2.5.0</version></dependency>......
  • Node.js 多线程编程:优化性能的关键步骤
    在 Node.js多线程允许Node.js应用并行处理任务,以此来提高性能和响应速度。Node.js内置了如 worker_threads 这样的模块来支持多线程。通过分配任务给不同的线程,能够更好地利用多核处理器,缓解单线程应用可能出现的瓶颈。Node.js中多线程的适用场景在 Node.js 中,以下几种情......
  • js判断2个时间段是否有重叠(时分)
    原理:1天1440分钟,每个时间段都有对应的数值,生成2个数组,判断数组中是否有重叠数字isTimeOverlap(startA,endA,startB,endB){if(!startA||!endA||!startB||!endB)returnfalseletsA=this.dealTime(startA);letsB=this.dealTime(startB)......
  • Next.js 开发指南 路由篇 | 动态路由、路由组、平行路由和拦截路由
     前言实际项目开发的时候,有的路由场景会比较复杂,比如数据库里的文章有很多,我们不可能一一去定义路由,此时该怎么办?组织代码的时候,有的路由是用于移动端,有的路由是用于PC端,该如何组织?如何有条件的渲染页面,比如未授权的时候显示登录框?如何让同一个路由根据情况不同展示不同的内......
  • 使用nestjs和react快速搭建项目架子
    首先搭建前后端的项目架子搭建nestjs架子npx@nestjs/clinew项目名使用vite搭建一个react+ts的架子,vite地址:https://cn.vitejs.dev/guide/。搭建好后cd到项目中,然后安装依赖,尝试启动。npmcreatevite@latest项目名----templatereact-ts数据库使用postgresql,使用do......
  • HTML+CSS+JS 实现苹果手表表盘
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>仿苹果手表表盘</title><......
  • js判断字符串为纯ASCII字符串(仅有ASCI字符)
    functionisAscii(str){varpattern=/^[\x00-\x7F]+$/;//ASCII范围的Unicode编码returnpattern.test(str);}varstr1="Hello,_-";console.log(isAscii(str1));//truevarstr2="hello你好";console.log(isAscii(str2));//false......
  • GIS坐标系与投影
    GIS坐标系与投影笛卡尔坐标系空间直角坐标系空间直角坐标系是指坐标原点位于参考椭球的中心,Z轴指向参考椭球的北极,X轴指向起始子午面与赤道的交点,Y轴位于赤道面与X轴成90度夹角,并指向东,形成右手系。空间直角坐标系有右手系和左手系的区分:右手系右手系有两种表示方法,......
  • 根据两点坐标和半径返回圆点坐标
    GetCircleCenter(x1,y1,x2,y2,r){letc1=(x2*x2-x1*x1+y2*y2-y1*y1)/(2*(x2-x1));letc2=(y2-y1)/(x2-x1);letA=c2*c2+1;letB=(2*x1*c2-2*c1*c2-2*y1);letC=x1*x1......
  • js 静态分配与对象池
    为了提升JavaScript性能,最后要考虑的一点往往就是压榨浏览器了。此时,一个关键问题就是如13何减少浏览器执行垃圾回收的次数。开发者无法直接控制什么时候开始收集垃圾,但可以间接控制触发垃圾回收的条件。理论上,如果能够合理使用分配的内存,同时避免多余的垃圾回收,那就可以保住因......