Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用D3在地图上绘制点_Javascript_Svg_D3.js_Geo - Fatal编程技术网

Javascript 使用D3在地图上绘制点

Javascript 使用D3在地图上绘制点,javascript,svg,d3.js,geo,Javascript,Svg,D3.js,Geo,我正在尝试使用基于纬度和经度的D3地理库在地图上绘制一些点。但是,当我将这些值传递到我的投影函数中时,它会生成超出SVG图像边界的坐标。我的代码基于 我已经在以下位置抛出了当前代码: 我的源数据是一个简单的对象数组,格式如下 var places = [ { name: "Wollongong, Australia", location: { latitude: -34.42507, longitude: 150.89315 } },

我正在尝试使用基于纬度和经度的D3地理库在地图上绘制一些点。但是,当我将这些值传递到我的投影函数中时,它会生成超出SVG图像边界的坐标。我的代码基于

我已经在以下位置抛出了当前代码:

我的源数据是一个简单的对象数组,格式如下

var places = [
  {
    name: "Wollongong, Australia",
    location: {
      latitude: -34.42507,
      longitude: 150.89315
    }
  },
  {
    name: "Newcastle, Australia",
    location: {
      latitude: -32.92669,
      longitude: 151.77892
    }
  }
]
在此之后,我设置了一个板块Carrée投影,如下所示:

var width = 960,
height = 480

var projection = d3.geo.equirectangular()
    .scale(153)
    .translate([width / 2, height / 2])
    .precision(.1);

var path = d3.geo.path()
    .projection(projection)
从那里,我用与链接示例完全相同的代码绘制地图。在脚本末尾,我使用以下代码在此地图上绘制点:

svg.selectAll(".pin")
    .data(places)
  .enter().append("circle", ".pin")
    .attr("r", 5)
    .attr("transform", function(d) {
      return "translate(" + projection([
        d.location.latitude,
        d.location.longitude
      ]) + ")"
    })

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

代码中有一个简单的输入错误——坐标应该作为(经度、纬度)传递给投影,而不是相反。此代码应该可以正常工作:

 svg.selectAll(".pin")
  .data(places)
  .enter().append("circle", ".pin")
  .attr("r", 5)
  .attr("transform", function(d) {
    return "translate(" + projection([
      d.location.longitude,
      d.location.latitude
    ]) + ")";
  });

听起来像是投影的缩放/平移已关闭。可能会有帮助。看起来投影本身是正确的,因为实际的地图路径使用相同的投影,并且没有问题。非常感谢!这似乎有点违反直觉,因为我们说的是“纬度和经度”,但我们说的是反方向的经度是x坐标,纬度是y坐标,翻译要求参数的顺序是x,y。