【问题标题】:d3.js mercator projection to NYC mapd3.js 墨卡托投影到纽约地图
【发布时间】:2013-09-20 15:21:37
【问题描述】:

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

我尝试重新创建 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);

});

请,请停下来:(

提前致谢!

【问题讨论】:

标签: map d3.js map-projections mercator


【解决方案1】:

我创建了一个包含纽约市行政区 here 的区块。使用 WSG84/Mercator 时,您走在了正确的道路上,因为这是原始数据所在的位置,QGIS 中的快速检查证明了这一点。

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

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

【讨论】:

  • 哇,谢谢!我最终使用了新泽西州的示例,使用其相应的 JSON,并将地图移动到纽约的坐标。然后我打印出动态计算的比例和变换,但这当然会吐出不整齐的数字。无论如何,这最终都起作用了,但是您的回答更有帮助。 +1 也是因为我认为这方面的信息并不多!
  • 我不知道怎么做,对不起!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-05
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-01
相关资源
最近更新 更多