d3.js墨卡托投影到纽约地图

时间:2013-09-20 15:21:37

标签: map d3.js map-projections mercator

我正在制作一张纽约市自治市镇的地图,我似乎无法正确投影:我得到的唯一一张小地图。

我尝试重新创建this示例,这只会让控制台因为错误而疯狂,我怀疑是因为关于这个等式的东西还有一些东西。

当我试图让相机工作时,我尝试了this问题的答案,但仍然无法让地图发挥作用。

  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]);

现在,我正在使用横​​向墨卡托,下面的代码,以及我使用these文件之一创建的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);

});

拜托,请停止:(

提前致谢!

1 个答案:

答案 0 :(得分:3)

我与纽约市区here创建了一个bl.ock。您正在使用WSG84 / Mercator的正确途径,因为这是原始数据所在,正如QGIS中的快速检查所示。

QGIS也很好地检查数据的中心,再次出现了[-73.94,40.70]。请注意,这些是与你的坐标相反的方式,即lat和long,但d3需要long和lat,如API中所述。要注意的另一件事是负面因素。北方是积极的,因此北半球的纬度在南半球是正的和负的。对于东半球和西半球,它的东部是积极的。当然,这只对美国阿尔伯斯不会对美国产生负面影响的全球预测产生影响。哦,如果不看Jason Davies work,就不会有关于预测的讨论。

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