gpt4 book ai didi

javascript - 如何使用投影在 d3.js 中使我的绘图点平滑?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:24:56 25 4
gpt4 key购买 nike

我可以使用以下代码将一些天气数据绘制到 map 上。然而,这些点是矩形的,我想让它们更平滑。

Rectangles Plotted ,

我想将它们绘制得更平滑,类似于 Ideal plot points

我认为我需要研究插值、空间分析和/或 Choropleth map 。我认为它们在执行此操作时是不同的算法。我觉得我需要在现有的点之间填写更多点?这样就可以像点一样制作渐变吗?这在 D3 中可行吗?或者我应该考虑使用 three.js 或 WebGL 的东西吗?

var width = 960,
height = 960;

var map = {};
var projection = d3.geo.mercator()
.scale((width + 1) / 2 / Math.PI)
.translate([width / 2, height / 2])
.precision(.1);

var path = d3.geo.path()
.projection(projection);

var graticule = d3.geo.graticule();

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);

svg.append("path")
.datum(graticule)
.attr("class", "graticule")
.attr("d", path);

d3.json("world-50m.json", function(error, world) {
svg.insert("path", ".graticule")
.datum(topojson.feature(world, world.objects.land))
.attr("class", "land")
.attr("d", path);

svg.insert("path", ".graticule")
.datum(topojson.mesh(world, world.objects.countries, function(a, b) { return a !== b; }))
.attr("class", "boundary")
.attr("d", path);
});

map.plot_points = [];
map.max = 30;
map.min = -1;
var opacity = d3.scale.linear()
.domain([map.min, map.max])
.range([0,1]);
var rainbow = ["#CE0C82", "#800CCE", "#1F0CCE", "#0C5BCE", "#0C99CE", "#2ECE0C", "#BAE806", "#FEFF00", "#FFCD00", "#FF9A00", "#FF6000", "#FF0000"];
zs.forEach(function(zv,zi){
zv.forEach(function(zzv, zzi){
if(zzv != 999)
{
map.plot_points.push({lat: ys[zi], long:xs[zzi],value:zzv});
}

})
});
console.log(map);
var points = svg.selectAll("rects.points")
.data(map.plot_points)
.enter()
.append("rect")
.attr("class", "points")
.style("fill", function(d) {
var scale = d3.scale.linear().domain([map.min, map.max]).range([1, rainbow.length]);
return rainbow[Math.round(scale(d.value))];
}).attr("width", 8)
.attr("height", 8)
.style("fill-opacity", 1)
.attr("transform", function(d) {
return "translate(" + projection([d.long, d.lat]) + ")";
})

最佳答案

听起来你的问题是数据。您需要做的是获取原始数据并将其插入到更平滑的形式。为此,您可以使用 GIS 程序,例如 QGIS .具体如何操作取决于原始数据的格式。

获得更平滑的数据后,您可以在 D3 中再次绘制它。我的猜测是最终结果会与我所做的有些相似 here ,其中等高线的绘制效果与您的目标大致相同。

关于javascript - 如何使用投影在 d3.js 中使我的绘图点平滑?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20416388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com