使用D3的路径投影工具从D3地理数据绘制SVG路径的例子很多。例如,这是我之前写的(D3 v3),这是最近使用D3 v4的示例。
它们看起来都是这样的:
svg.append("path")
.data(topojson.feature(datafile, datafile.objects.featureOfInterest))
.attr("class", "land")
.attr("d", pathDefinitionObject);
...读取数据文件并将其与某些SVG关联,创建链接的空路径,然后与某个投影关联的D3路径定义对象查看该数据,并使用它将SVG路径定义字符串添加到d
这些路径的属性中。
我想要的是那些路径定义字符串,但是作为字符串,而不涉及任何SVG。我想将这些字符串与Raphael一起使用,以便可以在不支持SVG的浏览器上绘制路径,因为特定项目需要支持机构客户,这些机构客户由于遗留软件需求和公司政策尚未从IE8升级(我知道,我知道...)。
D3显然能够定义这些字符串,但是我看不到一种显而易见的方法,即在不链接到DOM SVG元素的情况下,获取路径定义对象来输出字符串。
如何仅在页面上没有任何SVG的情况下获取字符串?
为此,我尝试使用最少的D3 v4的“微库”,因此,对于具有最少D3依赖关系的答案,要加分(特别是如果它可以避免D3-selection.js很大的话-理想情况下,我想仅使用D3的数据处理,而完全不对该项目使用其DOM操作)。
构建您的链接v4
示例,只需获取陆地路径d
属性的极简代码将是:
<!DOCTYPE html>
<meta charset="utf-8">
<script src="//d3js.org/d3-array.v1.min.js"></script>
<script src="//d3js.org/d3-geo.v1.min.js"></script>
<script src="//d3js.org/d3-request.v1.min.js"></script>
<script src="//d3js.org/d3-dispatch.v1.min.js"></script>
<script src="//d3js.org/d3-collection.v1.min.js"></script>
<script src="//d3js.org/topojson.v1.min.js"></script>
<script>
var projection = d3.geoAlbers()
.scale(1280)
.translate([500, 500]);
var path = d3.geoPath()
.projection(projection)
.pointRadius(1.5);
d3.json("https://gist.githubusercontent.com/mbostock/4090846/raw/d534aba169207548a8a3d670c9c2cc719ff05c47/us.json", function(error, us){
if (error) throw error;
var topo = topojson.feature(us, us.objects.land);
console.log(path(topo));
});
</script>
如果你没有使用d3.json
,你可以删除d3-request
,d3-dispatch
和d3-collection
图书馆。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句