gpt4 book ai didi

javascript - d3 v4 geo 绘制边界反转

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

当我在 SVG 元素中绘制百慕大三 Angular 形时,比例不是我所期望的(三 Angular 形应该延伸到框的边缘)并且填充是向后的(而不是绘制三 Angular 形,它绘制了一个切掉三 Angular 形的正方形).

var geojson = {
"features": [
{
"type": "Feature",
"properties": {
"name": "Bermuda Triangle",
"area": 1150180
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-64.73, 32.31],
[-80.19, 25.76],
[-66.09, 18.43],
[-64.73, 32.31]
]
]
}
}
],
"type":"FeatureCollection"
};

var width = 480;
var height = 480;

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.attr("style", "border: 2px solid black");

var projection = d3.geoMercator().fitSize([width, height], geojson);
var path = d3.geoPath().projection(projection);

svg.selectAll('path')
.data(geojson.features)
.enter()
.append('path')
.attr('d', path)
.style("fill", "red")
.style("stroke-width", "1")
.style("stroke", "black");
<script src="//d3js.org/d3.v4.js"></script>

我做错了什么?

最佳答案

让我们改变一下:

[
[-64.73, 32.31],
[-80.19, 25.76],
[-66.09, 18.43],
[-64.73, 32.31]
]

对此:

[
[-64.73, 32.31],
[-66.09, 18.43],
[-80.19, 25.76],
[-64.73, 32.31]
]

这似乎是一个很小的变化,但却是一个重要的变化:D3 要求多边形顶点按顺时针顺序排列。

根据API :

Spherical polygons also require a winding order convention to determine which side of the polygon is the inside: the exterior ring for polygons smaller than a hemisphere must be clockwise, while the exterior ring for polygons larger than a hemisphere must be anticlockwise. (emphasis mine)

此外,这是 Bostock(D3 创建者)制作的一个有趣的 bl.ocks,从教学上解释了您的问题:https://bl.ocks.org/mbostock/a7bdfeb041e850799a8d3dce4d8c50c8

这是您进行了更改(并删除了 fitSize)的代码:

var geojson = {
"features": [{
"type": "Feature",
"properties": {
"name": "Bermuda Triangle",
"area": 1150180
},
"geometry": {
"type": "Polygon",
"coordinates": [
[
[-64.73, 32.31],
[-66.09, 18.43],
[-80.19, 25.76],
[-64.73, 32.31]
]
]
}
}],
"type": "FeatureCollection"
};

var width = 480;
var height = 480;

var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height)
.attr("style", "border: 2px solid black");

var projection = d3.geoMercator();
var path = d3.geoPath().projection(projection);

svg.selectAll('path')
.data(geojson.features)
.enter()
.append('path')
.attr('d', path)
.style("fill", "red")
.style("stroke-width", "1")
.style("stroke", "black");
<script src="//d3js.org/d3.v4.js"></script>

关于javascript - d3 v4 geo 绘制边界反转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47234805/

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