2

我正在制作纽约市行政区的地图,但我似乎无法正确投影:我唯一得到的是一张小地图。

我尝试重新创建这个示例,它只会让控制台因错误而发疯,我怀疑是因为等式有问题。

当我试图让阿尔伯斯工作时,我尝试了这个问题的答案,但我仍然无法让地图工作。

  With 960/500 height and width, I used: var projection = d3.geo.albers().center([40.71, 73.98]).parallels([29.5, 45.5]).scale(10000).translate([(width) / 2, (height)/2]);

现在,我正在使用横​​向墨卡托,代码如下,以及我使用这些文件之一创建的 topojson。

  var width = 960,
   height = 500;

  var svg = d3.select("body").append("svg")
    .attr("width", width)
    .attr("height", height);

  d3.json("nyc-borough.json", function(error, nyb) {

  var boroughs = topojson.feature(nyb, nyb.objects["nyc-borough-boundaries-polygon"]).features;

  var projection = d3.geo.transverseMercator()
.scale(1600)
.rotate([73 + 58 / 60, -48 - 47 / 60]);

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

var g = svg.append("g");

g.append("g")
.attr("id", "boroughs")
.selectAll(".state")
.data(boroughs)
.enter().append("path")
.attr("class", function(d){ return d.properties.name; })
.attr("d", path);

});

请,请停下来:(

提前致谢!

4

1 回答 1

3

我在这里与纽约市的行政区创建了一个街区。您使用 WSG84/Mercator 走在正确的道路上,因为这就是原始数据所在的位置,正如 QGIS 中的快速检查所证明的那样。

QGIS也很好地检查了数据的中心,结果又是 [-73.94, 40.70]。请注意,这些与您的 lat 和 long 坐标相反,但 d3 需要 long 和 lat,如API中所述。另一件需要注意的是负面因素。北为正,因此北半球的纬度为正,南半球为负。对于东半球和西半球来说,东半球是积极的。当然,这只对美国阿尔伯斯不会对美国产生负面影响的全球预测很重要。哦,如果不看Jason Davies 的作品,关于 Projections 的讨论就不会完整。

如果您想对您的数据所在的投影使用不同的投影,我通常认为最好将您的数据预处理到该投影中,QGIS 是一个很好的工具,但还有许多其他工具,例如 gdal。

于 2013-09-21T03:43:33.050 回答