Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用moveTo函数在画布上定位D3路径?_Javascript_Html_Canvas_D3.js_Geojson - Fatal编程技术网

Javascript 如何使用moveTo函数在画布上定位D3路径?

Javascript 如何使用moveTo函数在画布上定位D3路径?,javascript,html,canvas,d3.js,geojson,Javascript,Html,Canvas,D3.js,Geojson,我正在使用D3.js解析一些geoJson文件,并将它们显示在画布上。然而,我正在努力使用moveTo()函数来定位它们,我希望在使用HTML5画布时使用这个函数 委员会: path.context([context]) 如果指定了上下文,则设置渲染上下文并返回路径 发电机。如果上下文为null,则路径生成器将返回 在给定功能上调用时的SVG路径字符串。如果上下文是 非null,则路径生成器将调用 指定要渲染几何体的上下文。上下文必须实现 以下方法: beginPath() 移动到(x,y) l

我正在使用D3.js解析一些geoJson文件,并将它们显示在画布上。然而,我正在努力使用moveTo()函数来定位它们,我希望在使用HTML5画布时使用这个函数

委员会:

path.context([context]) 如果指定了上下文,则设置渲染上下文并返回路径 发电机。如果上下文为null,则路径生成器将返回 在给定功能上调用时的SVG路径字符串。如果上下文是 非null,则路径生成器将调用 指定要渲染几何体的上下文。上下文必须实现 以下方法:

beginPath()
移动到(x,y)
lineTo(x,y)
圆弧(x,y,半径,星形,端角)
closePath()

请注意,这是画布的一个子集 元素的2D渲染上下文,因此可以创建画布上下文 传递给路径生成器,在这种情况下将渲染几何体 直接到画布。如果未指定上下文,则返回 当前渲染上下文,默认为null

因此,我知道我可以将画布的上下文传递到
路径
,但到目前为止我还没有取得任何成功-我的输出始终位于
0,0

我的代码如下:

var files = ["file-a.geojson", "file-b.geojson", "file-c.gpx.geojson"];

    var canvas = d3.select("body").append("canvas")
        .attr("style", "outline: thin solid red;")
        .attr("width", "1052")
        .attr("height", "1488");

    var context = canvas.node().getContext("2d");

    var routeWidth = 105,
        routeHeight = 105;

    for (var i=0;i<files.length;i++){
      d3.json("example-data/"+files[i], function(error, data) {

        var projection = d3.geo.mercator()
            .scale(1)
            .translate([0, 0]);

        var path = d3.geo.path()
            .projection(projection);

        var b = path.bounds(data),
            s = 0.95 / Math.max((b[1][0] - b[0][0]) / routeWidth, (b[1][1] - b[0][1]) / routeHeight),
            t = [(routeWidth - s * (b[1][0] + b[0][0])) / 2, (routeHeight - s * (b[1][1] + b[0][1])) / 2];

        projection
          .scale(s)
          .translate(t);

        context.beginPath();
        context.moveTo(300, 300);
        path.context(context)(data);
        context.stroke();
        context.closePath();
      });
    };
var files=[“file-a.geojson”、“file-b.geojson”、“file-c.gpx.geojson”];
var canvas=d3.选择(“主体”).追加(“画布”)
.attr(“样式”,“轮廓:薄实心红色;”)
.attr(“宽度”、“1052”)
.attr(“高度”、“1488”);
var context=canvas.node().getContext(“2d”);
var routeWidth=105,
路线高度=105;

对于(var i=0;i,D3画布路径生成器在被调用时会启动一个新路径,因此没有简单的方法来偏移起始位置。但是,您可以将多个重叠的
canvas
元素适当定位。这样,每个路径都从您希望它开始的位置开始。

而不是调用context.moveTo(300,300)在循环中,调用context.translate(300300)循环之前。

方法是将多个
canvas
元素放置在适当的位置。D3路径生成器会在您调用它时启动一个新路径。@Larskothoff感谢您为我指出了正确的方向。我不知道我可以将多个canvas元素“缝合”在一起。这是我采取的方法。如果您愿意的话我想补充一下你的建议作为答案,我很乐意把它标记为正确的。