javascript – 用D3在地图上绘制点数

前端之家收集整理的这篇文章主要介绍了javascript – 用D3在地图上绘制点数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用基于纬度和经度的D3地理库绘制几个点到地图上.然而,当我将这些值传递到我的投影函数中时,它会导致我们的SVG图像边界之外的坐标.我的代码是基于 this example provided in the documentation.

我把当前的代码放在了:http://bl.ocks.org/rpowelll/8312317

我的源数据是像这样格式的简单的对象数组

  1. var places = [
  2. {
  3. name: "Wollongong,Australia",location: {
  4. latitude: -34.42507,longitude: 150.89315
  5. }
  6. },{
  7. name: "Newcastle,location: {
  8. latitude: -32.92669,longitude: 151.77892
  9. }
  10. }
  11. ]

在此之后,我设置了一个像这样的板卡雷投影:

  1. var width = 960,height = 480
  2.  
  3. var projection = d3.geo.equirectangular()
  4. .scale(153)
  5. .translate([width / 2,height / 2])
  6. .precision(.1);
  7.  
  8. var path = d3.geo.path()
  9. .projection(projection)

从那里我绘制的代码链接的例子有效地相同.在我的脚本结尾,我使用以下代码绘制这个地图上的点:

  1. svg.selectAll(".pin")
  2. .data(places)
  3. .enter().append("circle",".pin")
  4. .attr("r",5)
  5. .attr("transform",function(d) {
  6. return "translate(" + projection([
  7. d.location.latitude,d.location.longitude
  8. ]) + ")"
  9. })

但是,此代码导致SVG元素边界之外的点.这里有什么明显的错误吗?

解决方法

你的代码中有一个简单的打字错误 – 坐标应该以(经度,纬度)的形式传递给投影,而不是相反.这段代码应该可以正常运行
  1. svg.selectAll(".pin")
  2. .data(places)
  3. .enter().append("circle",".pin")
  4. .attr("r",5)
  5. .attr("transform",function(d) {
  6. return "translate(" + projection([
  7. d.location.longitude,d.location.latitude
  8. ]) + ")";
  9. });

猜你在找的JavaScript相关文章