当前位置: 首页 > 知识库问答 >
问题:

d3。地图上的鱼眼失真

暴才俊
2023-03-14

我试图扭曲d3.geo.path()地图与fisheye.js插件(https://github.com/d3/d3-plugins/tree/master/fisheye)。

要扭曲一个对象,插件需要x

在d3中。它说:

投影函数采用表示位置坐标的两元素数字数组[经度,纬度],并返回表示投影像素位置[x,y]的类似两元素数字数组。例如,基本的球面墨卡托投影:

https://github.com/mbostock/d3/wiki/Geo-Paths

所以失真应该是可能的,我只是无法理解它。

我用的是世界50米。json用于我的投影。加载后,arcs阵列中会出现一个。我想这些是我需要操纵的坐标。但这只是猜测。。。

谢谢

基姆

共有1个答案

孟俊发
2023-03-14

我发现你的帖子在寻找答案,但它似乎不在网上。但是,就像你说的,这是可能的!

遵循fisheye的文档。js(https://github.com/d3/d3-plugins/tree/master/fisheye),在mousemove回调中,您需要在坐标上使用鱼眼。

因为fisheye使用。x。yattributes,我修改了鱼眼代码,只使用两对[x,y],以避免每次在回调中生成中间数据结构。

然后你可以这样做:

canvas.on("mousemove", function() {
    // console.log("mouse:");
    // console.log(d3.mouse(this));
    var here = d3.mouse(this);
    // console.log(here); // [1030, 125]
    // console.log(projection.invert(here)); // [-72.4713375653601, 45.14035261565636]
    var inverted = projection.invert([here[0],here[1]]); // [-72.4713375653601, 45.14035261565636]
    // console.log(inverted); // [-72.4713375653601, 45.14035261565636]
    // burlington is lat 44, lon -73
    fisheye.focus(inverted);

    // of course, the path function takes [longitude, latitude], so -72, 44 for burlington
    // https://github.com/mbostock/d3/wiki/Geo-Paths
    // (so that's what it gives back)

    states.attr("d",null)
        .attr("d", function(d) {
            // console.log("original:");
            // console.log(d.geometry);

            if (d.geometry.type === "Polygon") {
                var b = d.geometry.coordinates.map(function(d) { return d.map(function(f) { return fisheye(f);}); });
            }
            else {
                var b = d.geometry.coordinates.map(function(d) { return d.map(function(f) { return f.map(function(g) { return fisheye(g); }); }); });
            }
            // console.log(b);
            var c = {type: d.geometry.type, coordinates: b};

            // console.log("new:");
            // console.log(c);

            return path(c);
    });

您可以在此处查看实时版本:http://panometer.org/instruments/teletherms/?window=25

 类似资料:
  • 我正在尝试用D3创建一个时间线。js。我将在时间轴上绘制事件,我希望在悬停时间轴时具有鱼眼效果。 我的时间表如下:http://codepen.io/fabianmossberg/pen/gaRwXG 参考:第三张图表http://bost.ocks.org/mike/fisheye/但仅限于X轴。 我还希望鱼眼效果在退出timline时变得平滑,就像在上一样http://www.nytimes.

  • 我已经成功地为一个示例数据集实现了codeflower视图。用于实现这一目标的代码是: 我现在希望添加鱼眼扭曲到这个可视化,不知道如何去做。我已经研究了鱼眼的留档,但当我使用codeflower.js我不确定如何访问svg元素了。任何帮助都很感激。谢谢你。

  • 嗨,我想使用鱼眼失真插件为我的力定向图在d3。但当我想应用这个插件时,graph的行为很奇怪。我是d3新手。而且不擅长计算机图形学。 在jsfiddle中完成示例 奇怪的行为我的意思是图的节点在鼠标悬停后消失(隐藏)。

  • 鹰眼图在Gis中是个比较基本的功能,在鹰眼图上可以看到整个地图的全貌以及主视图在全貌中的位置,这里我试着实现一下鹰眼图和主视图的同步 首先在地图右下角放一个div,给蓝色的边界,方便区分 <div id="eye"></div> #eye { position: absolute; width: 20%; height: 20%; bottom: 0; r

  • 我有下面的地图地图,并想过滤它的基础上的一个值。结果应分配回同一地图。请告诉我什么是最好的方法。 我尝试了如下操作,但无法访问employee对象

  • 问题内容: 我正在寻找创建鱼眼镜头效果的方法,查看了openCV的文档,看起来它包含针对像鱼眼这样的径向变形的“相机校准”功能。是否可以通过openCV模拟鱼眼失真? 如果与openGL相比,openCV可以做到,哪一个会产生更好的结果?谢谢。 问题答案: 我使用opencv创建了此应用。这是您所指的效果吗?我基本上编码了维基百科“ Distortion(optics)”上显示的公式,如果需要,我