2016-10-02 11 views
1

d3(d3投影プラグインを使用)でArmadillo投影を使用しようとしていますが、マップにレンダリングの問題があります。表示は、次のbl.ocksプロジェクトとまったく同じです:http://bl.ocks.org/mortenjohs/4739921(メニューのArmadilloを選択)。私も世界の110m.jsonを使いました。南地球の奇妙なラインがありD3のArmadillo投影

Armadillo projection in d3

です。私はJason Daviesの地図にこのようなレンダリングの問題がないことに気付きます:https://www.jasondavies.com/maps/armadillo/

どのように問題なくアルマジロ計画を使用できますか? mortenjohsマップとJason Davieの違いは何ですか?助けてくれてありがとう!

ディスプレイに使用されるコードは、他の投影よりも同じである、つまり:あなたはあなたの層のための「クリッピングパス」として球の背景を使用する必要が

var projection = d3.geoArmadillo(); 

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

d3.json("/d/4090846/world-110m.json", function(error, world) { 
    svg.insert("path", ".graticule") 
     .datum(topojson.object(world, world.objects.land)) 
     .attr("class", "land") 
     .attr("d", path); 

    svg.insert("path", ".graticule") 
     .datum(topojson.mesh(world, world.objects.countries, function(a, b) { return a.id !== b.id; })) 
     .attr("class", "boundary") 
     .attr("d", path); 

答えて

3

。 (ほとんどが中断したものとアルマジロをクリッピング必要と

 .attr("clip-path", "url(#clip)"); 

プロジェクション:そして、いつものようになく、追加の属性を使用してレイヤーを追加

defs = svg.append("defs"); 

    defs.append("path") 
     .datum({type: "Sphere"}) 
     .attr("id", "sphere") 
     .attr("d", path); 

    defs.append("clipPath") 
     .attr("id", "clip") 
     .append("use") 
     .attr("xlink:href", "#sphere"); 

前あなたの層のようなものを試してみてください追加します)はd3-geo-projectionの文書に記載されています。

その後、svg要素のDOMを変更する場合は、defsが最初の子に留まるように注意してください。

+0

ありがとう、それはたくさんの意味があります! –

+0

うれしかった! – mgc