【问题标题】:d3js Force Layout on a Leaflet mapd3js 在传单地图上强制布局
【发布时间】:2019-01-08 02:47:47
【问题描述】:

我创建了一个力布局,并且由于这里的解决方案:d3js force layout on a map,我能够将一些节点放置在地图上的 lon 和 lat 位置。这是代码:(https://bl.ocks.org/pierreee1/85fcc11c8c1e230de510f15c255fbfe4)。

但地图不是很详细,所以我尝试使用插入的传单地图 (https://bl.ocks.org/pierreee1/cacba454f35e6be936abd4d6e5462ec0)。

现在我无法正确放置节点,并且单击和鼠标悬停功能不起作用。我错过了什么?有人有其他解决方案吗?

我在尝试放置传单地图时遵循了本教程:https://chewett.co.uk/blog/1030/overlaying-geo-data-leaflet-version-1-3-d3-js-version-4/

【问题讨论】:

标签: javascript html json d3.js


【解决方案1】:

好的,我不知道这是否是解决问题的最佳方法,但它对我有用:

我创建了一个更新节点位置并重新启动模拟的函数:

function drawAndUpdateCircles() {
        //si tiene lon y lat clavelos al punto en el mapa
        //gracias a Andrew Reid (user:7106086 en stackoverflow)
         graph.nodes.forEach(function(d) {
            if(d.lon && d.lat) { 
                p = new L.LatLng(d.lat, d.lon);             
                var layerPoint = map.latLngToLayerPoint(p);
                d.fx = layerPoint.x;
                d.fy = layerPoint.y;
            }
        })

        // reinicie la simulación para que los puntos puedan quedar en donde son si se hace zoom o drag
        fuerza
            .alpha(1)
            .restart()
        ;
    }

然后我调用该函数并将节点放置在地图中,当它移动时:

    drawAndUpdateCircles();
    map.on("moveend", drawAndUpdateCircles);

【讨论】:

    猜你喜欢
    • 2018-12-26
    • 2019-09-02
    • 2014-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 2015-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多