d3 - svg path标签:超级重要
访问量: 1305
普通SVG(基础)
svg 可以画的有: Circle, Line, Polygon, Path ... 指定起始位置就好(通过数字)
D3 GEO SVG (进阶)
参考:https://stackoverflow.com/questions/10261992/d3-js-add-a-circle-in-d3-geo-path
d3 geo svg 则是通过 地理坐标来指定,可以画的有:
支持的类型: Point, LineString, Polygon, MultiPoint, MultiLineString, and MultiPolygon
通过经纬度来画多边形:
1. 手动创建geojson: https://gis.stackexchange.com/questions/49114/d3-geo-path-to-draw-a-path-from-gis-coordinates (我可以帮他补充答案)
2. 创建geojson小部分格式的对象,然后传递进去(满足要求了) :http://bl.ocks.org/erikhazzard/6201948
links = [];
for(var i=0, len=data.length-1; i < len; i++){
// (note: loop until length - 1 since we're getting the next
// item with i+1)
links.push({
type: "LineString",
coordinates: [
[ data[i].lon, data[i].lat ],
[ data[i+1].lon, data[i+1].lat ]
]
});
}
// Standard enter / update
var pathArcs = arcGroup.selectAll(".arc")
.data(links);
3. 不考虑geojson 的格式,直接使用程序中的变量, 参考:https://observablehq.com/@d3/testing-projection-visibility?collection=@d3/d3-geo
3.1 定义好一个数组(本质上跟2是一样的)
points = Array(2980) [
0: Array(2) [
0: -158.617996216
1: 59.2826004028
]
1: Array(2) [160.054992675781, -9.42800045013428]
2: Array(2) [157.263000488281, -8.32796955108643]
3: Array(2) [-113.305864334, 31.351621252]
4: Array(2) [166.919006, -0.547458]
然后,在下面代码中使用:
path({type: "MultiPoint", coordinates: points});
下面是一个例子: 读取CSV(中国机场),显示在中国地图上:
84 d3.json(map_geo_json).then((geojson) => {
85 svg.append("path")
86 .attr("d", path(geojson))
87 .attr('fill', 'white')
88 .attr("stroke", "red")
89 .attr("stroke-width", 1)
90 }).then( () => {
91
92 // read and print all the airports
93 let airports = []
94 d3.csv('static/china_airports.csv').then( (csv_line) => {
95
96 let airports = csv_line.map(function(x){
97 return [x.longitude, x.latitude]
98 })
99
100 let final_geo_points = { type: "MultiPoint", coordinates: airports}
101
102 svg.append("path")
103 .attr("d", path(final_geo_points))
104 .attr('fill', 'transparent')
105 .attr("stroke", "blue")
106 .attr("stroke-width", 1)
107 })
108 })
需要给这个人的文章 增加我的答案: (现有答案我觉得嗯。。。)
https://stackoverflow.com/questions/10261992/d3-js-add-a-circle-in-d3-geo-path