D3.js 如何使用D3从GeoJSON数据集中获取投影路径定义字符串(而不是SVG元素)?

D3.js 如何使用D3从GeoJSON数据集中获取投影路径定义字符串(而不是SVG元素)?,d3.js,geospatial,geojson,topojson,D3.js,Geospatial,Geojson,Topojson,有很多使用D3的路径投影工具从D3地理数据绘制SVG路径的示例。举个例子,下面是一个例子 它们看起来都是这样的: svg.append("path") .data(topojson.feature(datafile, datafile.objects.featureOfInterest)) .attr("class", "land") .attr("d", pathDefinitionObject); …在读取数据文件并将其与某些SVG关联的情况下,创建

有很多使用D3的路径投影工具从D3地理数据绘制SVG路径的示例。举个例子,下面是一个例子

它们看起来都是这样的:

  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显然能够定义这些字符串,但我看不到一种明显的方法可以让path definition对象在不链接到DOM SVG元素的情况下输出字符串

在页面上没有任何SVG的情况下,如何获取字符串



我正在尝试使用一组最小的参数来解决这个问题,因此,对于一个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>

var projection=d3.geoAlbers()
.比例尺(1280)
.翻译([500500]);
var path=d3.geoPath()
.投影(投影)
.点半径(1.5);
d3.json(“https://gist.githubusercontent.com/mbostock/4090846/raw/d534aba169207548a8a3d670c9c2cc719ff05c47/us.json,函数(错误,美国){
如果(错误)抛出错误;
var topo=topojson.feature(us,us.objects.land);
日志(路径(拓扑));
});

如果您没有使用
d3.json
,您可以删除
d3请求
d3调度
d3集合
库。

太好了!真不敢相信我所要做的就是将geojson对象传递给path对象!这将输出featureCollection中每个功能的一个大字符串,组合成一个
M…ZM…ZM…Z
复合字符串,但只需运行
for
循环
topo.features
即可将其分离出来