繁体   English   中英

D3.js过滤topojson数据时出现问题

[英]D3.js Problems Filtering topojson data

我设置了一个示例来演示我遇到的问题:

简而言之,我正在使用d3渲染美国地图。 我将附加相关的数据属性以处理单击事件并确定单击了哪个状态。

在点击事件中,将执行以下操作:

  • 我正在抓取美国县topojson文件(其中包含所有美国县)。

    从数据中删除不相关的县,并将其呈现在单击状态的地图上。

我似乎无法弄清楚在幕后发生了什么事,导致某些县被划出,而另一些县则被忽略了。

当我记录从过滤列表返回的数据时,我正在显示准确的县数,但它们仅在地图上部分绘制。 有些州不返回任何州。 宾夕法尼亚州德克萨斯州部分工作。

我已经检查了数据和比较操作,但是我认为这可能与弧属性不匹​​配有关。

如果我使用Counties JSON文件来呈现美国的整个地图,它们全部都存在。

如果有人可以帮助您了解可能发生的情况,那将是很好的。

 svg { fill:#cccccc; height:100%; width:100%; } .subunit{ outline:#000000; stroke:#FFFFFF; stroke-width: 1px; } .subunit:hover{ fill:#ffffff; stroke:#FFFFFF; stroke-width="10"; } 
 <body> <script src="http://www.cleanandgreenfuels.org/jquery-1.11.3.min.js"></script> <script src="http://www.cleanandgreenfuels.org/d3.v3.min.js"></script> <script src="http://www.cleanandgreenfuels.org/topojson.v1.min.js"></script> <script> var width = window.innerWidth; height = window.innerHeight; var projection = d3.geo.albers() .scale(1500) .translate([width / 2, height / 2]); //d3.geo.transverseMercator() //.rotate([77 + 45 / 60, -39 - 20 / 60]); //.rotate([77+45/60,-40-10/60]) //.scale(500) //.translate([width / 2, height / 2]); var path = d3.geo.path() .projection(projection); var svg = d3.select("body").append("svg") .attr("width", width+"px") .attr("height", height+"px"); d3.json("http://www.cleanandgreenfuels.org/usstates2.json.php", function(error, us, init) { //svg.append("path") // .datum(topojson.feature(us, us.objects.counties)) //.attr("d", path); function init(){ $( document ).ready(function() { $('.subunit').on('click',function(){ var stateid = $(this).attr("data-stateid"); function clearStates(stateid){ d3.json("http://www.cleanandgreenfuels.org/uscounties2.json.php", function(error, us) { console.log(us); console.log("DATA CLICKED ID "+stateid); test = jQuery.grep(us.objects.counties.geometries, function(n){ return (n.properties.stateid == stateid); }); us.objects.counties.geometries = test; console.log(test.length); console.log(us.objects.counties.geometries.length); var test = topojson.feature(us, us.objects.counties).features; console.log(test); console.log(test.length); svg.selectAll(".subunit") .data(test) .enter().append("path") .attr("class", function(d) { return "subunit"; }) .attr("d", path) .attr("data-countyid", function(r){ return r.id; }); }); } clearStates(stateid); }); }); } svg.selectAll(".subunit") .data(topojson.feature(us, us.objects.us).features) .enter().append("path") .attr("class", function(d) { return "subunit"; }) .attr("d", path) .attr("data-stateid", function(r){ return r.id; }); init(); }); </script> </body> 

似乎我正在尝试利用一些过时的功能,使用topojson.mesh.datum()添加新数据已解决了此问题, 但引入了新的错误。

现在看来,好像渲染的多边形必须按顺序才能正确绘制。

我认为应该清理输入的数据以优化d3设计的功能,但我仍然想了解更多有关它如何呈现从数据集中获取的信息的信息。

function clearStates(stateid){


                        d3.json("http://www.cleanandgreenfuels.org/uscounties2.json.php", function(error, us) {


                            console.log(us);
                            console.log("DATA CLICKED ID "+stateid);

                            test = jQuery.grep(us.objects.counties.geometries, function(n){
                                return (n.properties.stateid == stateid);
                            });
                            us.objects.counties.geometries = test;

                                console.log(test.length);
                            console.log(us.objects.counties.geometries.length);

                            **var test = topojson.mesh(us, us.objects.counties);**


                            console.log(test);
                            console.log(test.length);

                                 **svg.append("path")
                                    .datum(test)
                                    .attr("class", function(d) { return "subunit"; })
                                    .attr("d", path)
                                    .attr("data-countyid", function(r){ return r.id; });**

                        });


                }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM