Javascript 使用D3在地图上绘制点
我正在尝试使用基于纬度和经度的D3地理库在地图上绘制一些点。但是,当我将这些值传递到我的投影函数中时,它会生成超出SVG图像边界的坐标。我的代码基于 我已经在以下位置抛出了当前代码: 我的源数据是一个简单的对象数组,格式如下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 } },
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。