D3 map - 将两个不相交的 SVG 多边形路径合并为一个路径
D3 map - combine two disjoint svg polygon paths into one path
这是我在带有工具提示的交互式地图上的第三个后续问题。
原始地图使用美国各州的坐标。我正在尝试构建欧洲地图(因此我之前的问题关于排除悬停中的某些多边形以绘制大陆的物理形状,但仅允许在欧盟成员国上方使用工具提示)。
在我的工作中,我最初受到彼得·科林里奇 svg 教程的启发,其中大多数国家多边形都用 svg paths
表示。对于SVG地图的来源,他正在为维基媒体提供建议,在那里我找到了一张Firefox Mozilla欧洲地图,其中有非常明确的国家路径。
一切都很顺利,直到我偶然发现了两个国家:俄罗斯和英国。
在原始的美国数据集中,即使是由多个多边形组成的状态(如马萨丘集)也用一个唯一的 d: 属性表示。
{id:"MA",n:"Massachusets", d:"M899.62349,(...), 153.35923L855.45082,152.06593Z"},
而上面提到的英国和俄罗斯用两个不同的 ds 表示:
<g id="ru" transform="matrix(1.43317, 0, 0, 1.43317, -2435.49, -1086.58)">
<path id="ru-main" d="M 9462.6109,(...),2763.2929 z "/>
<path id="ru-kgd" d="M 6989.6109,(...),3728.389 z "/>
</g>
另外还有这个属性transform = "matrix(...)"
尽管如此,我已经通过在Mozilla Firefox地图中应用此工具解决了这个问题 俄罗斯由两条路径组成,有两个单独的ID:id="ru-main"
和id="ru-kgd"
英国相同。
我想确保每当用户悬停在俄罗斯大陆或加里宁格勒地带上方时,俄罗斯的整个领土都会突出显示。
有没有办法做到这一点?
我想确保每当用户悬停在俄罗斯大陆或加里宁格勒地带上方时,俄罗斯的整个领土都会突出显示。
有没有办法做到这一点?
您要做的是在国家/地区(<g>
)级别观看鼠标事件,并将悬停效果应用于所有悬停<g>
子元素<path>
元素。
var countries= d3.selectAll('g')
countries.on('mouseenter', function(d, i) { //mouse starts hovering a country's shape
d3.select(this) // select the hovered country
.selectAll('path') // select all its children paths
.style('fill', '#75D9FA') // apply desired effect to the paths
})
countries.on('mouseleave', function(d, i) { //mouse stops hovering a country's shape
// follow same logic as above to reset original style
d3.select(this)
.selectAll('path')
.style('fill', '#24BDF0')
})
这是一个使用类似于问题中提出的数据结构的工作示例。
相关文章:
- Javascript:使用绝对路径设置img src
- 如何在d3.js中返回路径的y坐标
- 复制图像路径以单击它
- 从模块内部访问Express装载路径
- JS文件的路径正在消失
- 使用onclick绘制SVG路径
- jpm的默认Firefox路径没有'不起作用
- 如何在FF和IOS中使用剪辑路径多边形
- jQuery 使用 css 剪辑路径拖放到多边形形状上
- D3 map - 将两个不相交的 SVG 多边形路径合并为一个路径
- 将 Google 地图多边形路径转换为 SVG 路径
- 设置d3中多边形和路径的位置
- 调整多边形点路径(svg)内的图像大小并使其不被剪裁
- 转换SVG多边形点到路径
- GOOGLE MAP API v3,需要路径的多边形
- 转换SVG多边形路径到纬度和长坐标
- 哪个更轻:多边形还是路径
- 将svg路径转换为多边形,以便在Javascript Clipper中使用
- 如何在HTML中获取元素的形状/多边形/边界路径/框架
- 寻找闭合路径的多边形近似