【发布时间】:2014-01-26 01:47:16
【问题描述】:
我正在尝试使用基于纬度和经度的 D3 地理库在地图上绘制几个点。但是,当我将这些值传递给我的投影函数时,它会导致坐标超出我的 SVG 图像的范围。我的代码基于this example provided in the documentation。
我已将当前代码提交到:http://bl.ocks.org/rpowelll/8312317
我的源数据是一个简单的对象数组,格式如下
var places = [
{
name: "Wollongong, Australia",
location: {
latitude: -34.42507,
longitude: 150.89315
}
},
{
name: "Newcastle, Australia",
location: {
latitude: -32.92669,
longitude: 151.77892
}
}
]
在此之后,我设置了一个 Plate 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 元素的边界。有什么明显的我做错了吗?
【问题讨论】:
-
听起来您的投影比例/平移已关闭。 This question 可能会有所帮助。
-
投影本身似乎还不错,因为实际的地图路径使用相同的投影并且绘制没有问题。
标签: javascript svg d3.js geo