2014-12-13 197 views
2

我正在從d3/crossfilter數據集(從CSV加載)向傳單地圖添加點。點添加後,我想縮放/平移,以便點在視圖中。什麼是最簡單的方法...我想我可以寫一些最小/最大經度/緯度函數,然後循環遍歷數據集來創建一個邊界框,以與map.fitBound一起使用,但是想知道是否存在更簡單的方法...如何計算d3中一組點的傳單的邊界框

代碼片段: -

function updateMapData() { 
    g.selectAll("*").remove(); 
    var feature = g.selectAll("circle") 
     .data(byID.top(Infinity)) 
     .enter() 
     .append("circle") 
      .style("stroke", "black") 
      .style("opacity", .95) 
      .style("fill", "black") 
      .attr("r", 4); 

    map.on("viewreset", updateMap); 
    updateMap(); 

    function updateMap() { 
     feature.attr("transform", 
     function(d) { 
      return "translate("+ 
       map.latLngToLayerPoint(d.LatLng).x +","+ 
       map.latLngToLayerPoint(d.LatLng).y +")"; 
      } 
     ) 
    }; 
}; 
+0

你可以從點構造一個多邊形,然後適合地圖。 – 2014-12-13 12:05:29

+0

最後,我只是運行以下(但我仍然想知道是否應該使用geoJSON或d3.geo,而不是...): - 'bounds = []; byID.top(Infinity).forEach(function(d){ bounds.push(d.LatLng); }); map.fitBounds(bounds);' – Murray 2014-12-14 04:11:52

回答

0

最後,我只是跑下面的(但我仍然不知道是否有更簡單的方法,或者我應該使用以GeoJSON或d3.geo,而不是...)

bounds = []; 
byID.top(Infinity).forEach(function (d) { 
    bounds.push(d.LatLng); 
}); 
map.fitBounds(bounds, {pan: {animate: true, duration: 1.5, easeLinearity: 0.25}});