2013-08-22 35 views
2

我有一个非常标准的代码,它读取一个GeoJSON文件并使用D3.js呈现其功能。它的工作原理相当不错,除了与本文件:https://github.com/regiskuckaertz/d3/blob/master/circonscriptions.json为什么GeoJSON功能看起来像是功能本身的负面照片?

文件看起来不怪异什么的,其实你可以预览它在GitHub或geojsonlint.com。但是,D3会绘制看起来像特征用作剪贴蒙版的路径,即所有形状都是特征本身的负片。该代码是非常标准的,但:

var proj = d3.geo.mercator() 
    .scale(25000) 
    .center([6.08642578125,49.777716951563754]) 
    .rotate([-.6, -.2, 0]); 

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

function ready(error, luxembourg) { 
    svg 
    .selectAll("path") 
    .data(luxembourg.features) 
    .enter().append("path") 
     .attr("d", path) 
     .attr("class", function(d) { return quantize(rateById.get(d.properties.name)); }) 
} 

你可以看看这里:http://jsfiddle.net/QWZXd/

相同的代码工作与另一个文件,它来自同一来源。

+0

我不知道你的意思 - 在的jsfiddle看起来不错给我吗? –

+0

不,OP是正确的 - 这些区域被解释为外部多边形,覆盖地球,而不是内部多边形。我的猜测是,这是因为多边形中的点顺序是逆时针而不是顺时针,但我无法证实这一点。 – nrabinowitz

回答

1

由于某些原因,这些多边形中的点是相反的顺序 - 它们应该是顺时针的,但是被定义为逆时针,并且d3遵循多边形解释的右侧规则。

要修复,扭转点,无论是在文件或JS:

luxembourg.features.forEach(function(feature) { 
    feature.geometry.coordinates[0].reverse(); 
}); 

固定小提琴:http://jsfiddle.net/nrabinowitz/QWZXd/1/

+0

是的!非常感谢@nrabinowitz,我从未*发现过这种情况。 –