1

我得到了一张纬度/经度投影的地图,考虑到更高的纬度,它变得相当平坦,例如:

在此处输入图像描述

为了让它看起来不错,我知道我可以将它垂直拉伸 140%,例如:

在此处输入图像描述

另外,我如何使用 D3 拉伸我的 SVG 元素及其内容?(我不能使用 CSS,因为底层 SVG 本身就不好。我需要拉伸 SVG 代码,允许下载)

注意:对于在线代码示例,我目前得到了印度(印度只需要 106% 的拉伸,但同样的想法)。

4

1 回答 1

1

在 SVG 中,可以通过设置一个 transform 属性来缩放元素。所以拿你的形状容器做

container.setAttribute("transform", "scale(1, 1.4)");

您需要有一个可变形的容器,例如一个<g>元素。元素在 SVG 1.1 中不可<svg>转换,但将在即将到来的 SVG 2 规范中。据我所知,目前只有 Firefox 和 Opera 支持 SVG 2 的这一部分。

如果您想使用 SVG 1.1 UA 在印度地图上进行这项工作,因为您没有可转换的容器,您可以在每个路径和文本元素上设置转换,例如

<svg>
  <path transform="scale(1, 1.4).../>
  <path transform="scale(1, 1.4).../>
  <text transform="scale(1, 1.4).../>
</svg>

你必须遍历元素的子<svg>元素才能做到这一点。

或者,您可以<g>在层次结构中插入一个元素,即

<svg>
  <path .../>
  <path .../>
</svg>

会成为

<svg>
  <g transform="scale(1, 1.4)">
    <path .../>
    <path .../>
  </g>
</svg>

您将遍历 的所有子元素<svg>并将它们重新设置为该<g>元素,然后在该<g>元素上设置一个变换。

于 2013-08-27T09:19:23.003 回答