Javascript KineticJS-获取路径形状的宽度/高度?

Javascript KineticJS-获取路径形状的宽度/高度?,javascript,canvas,svg,kineticjs,Javascript,Canvas,Svg,Kineticjs,目前这对我来说是个大问题 我正在通过路径形状渲染世界地图。。。问题是路径形状不提供宽度或高度, 因此,缓存或其他简单操作变得非常困难 e、 g.我给path.toImage的x/y高度/宽度是多少 你知道我该如何解决这个问题吗?如果世界地图路径是由一系列直线组成的(通常是这样),你可以通过在路径数据中查找minX/minY和maxX/maxY坐标来获得路径的边界框。我必须用Kinetic JS解决同样的问题 下面的代码查看一些包含(x,y)坐标的随机画布绘制代码,将坐标提取到数组中,查找x和y

目前这对我来说是个大问题

我正在通过路径形状渲染世界地图。。。问题是路径形状不提供宽度或高度, 因此,缓存或其他简单操作变得非常困难

e、 g.我给
path.toImage
的x/y高度/宽度是多少



你知道我该如何解决这个问题吗?

如果世界地图路径是由一系列直线组成的(通常是这样),你可以通过在路径数据中查找minX/minY和maxX/maxY坐标来获得路径的边界框。

我必须用Kinetic JS解决同样的问题

下面的代码查看一些包含(x,y)坐标的随机画布绘制代码,将坐标提取到数组中,查找x和y的最小值和最大值,并显示形状的宽度和高度

由此,您应该有一个边界框

var regex = /[+-]?\d+\.\d+/g;

var str = 'ctx.bezierCurveTo(30.1, 220.7, 82.8, 233.0, 147.8, 233.0); ctx.bezierCurveTo(213.1, 233.0, 266.6, 220.8, 266.6, 205.7); ctx.bezierCurveTo(266.6, 205.3, 267.0, 205.1, 267.0, 204.7);';

var floats = str.match(regex).map(function(v) { return parseFloat(v); });

console.log(floats);

      var minX = 99999;
      var maxX = -99999;
      var minY = 99999;
      var maxY = -99999;


      for ( var i = 0; i < floats.length; i++ ) {

          if ( isOdd(i) ) { // the array of numbers is in the form (x,y,x,y,x,y,x...)

              // Check Y values
              if ( floats[i] < minY ) { minY = floats[i]; }
              if ( floats[i] > maxY ) { maxY = floats[i]; }

          } else {

              // Check X values
              if ( floats[i] < minX ) { minX = floats[i]; }
              if ( floats[i] > maxX ) { maxX = floats[i]; }

          }

      }



       console.log('minX = ' + minX + ', minY = ' + minY + ', maxX = ' + maxX + ', maxY = ' + maxY);


function isOdd(num) { return num % 2;}
var regex=/[+-]?\d+\.\d+/g;
var str='ctx.bezierCurveTo(30.1220.7,82.8233.01247.8233.0);比塞尔曲线(213.12333.0266.6220.8266.6205.7);ctx.bezierCurveTo(266.62005.3267.0205.1267.0204.7);';
var floats=str.match(regex).map(函数(v){return parseFloat(v);});
控制台日志(浮动);
var minX=99999;
var maxX=-99999;
var minY=99999;
变量maxY=-99999;
对于(变量i=0;imaxY){maxY=floats[i];}
}否则{
//检查X值
如果(floats[i]maxX){maxX=floats[i];}
}
}
log('minX='+minX+',minY='+minY+',maxX='+maxX+',maxY='+maxY+);
函数isOdd(num){返回num%2;}

不幸的是,在这种情况下创建的图像非常大,即整个屏幕。重新绘制图层需要4秒的时间。通过提供x/y/宽度/高度,图像更小,重绘需要2ms!:)作为记录,我有500个SVG路径需要重新绘制,显然500个相互重叠的大型图像似乎很有问题:)好的,备选方案…请参阅我编辑的答案!顺便说一句,如果您的路径来自SVG,请查看Erik Dahlström关于获取SVG路径的边界框的文章:看起来除了手动操作之外,别无选择。谢谢@markE