【发布时间】:2021-01-28 11:21:27
【问题描述】:
我有以下 d3js 代码,通过 d3.json 和 renderMap 函数绘制基于 geojson 的国家地图。我想将城市添加到地图中,以圆圈表示。城市将在与国家地图相同的 svg 中。
城市在ua_cities_admin.csv 中,通过renderCity 函数渲染。
我不明白的是如何将来自renderCity 的数据数组放在svg 组件中,以及如何将城市坐标映射到国家地图。
我们将不胜感激。
<!DOCTYPE html>
<meta charset="utf-8">
<head>
<title>geoPath measures</title>
</head>
<body>
<div align="center">
<svg id="my_dataviz"></svg>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.9.1/d3.min.js"></script>
<script>
var height = window.innerHeight - 100;
var width = window.innerWidth - 100;
var svg = d3.select('#my_dataviz')
.attr("width", width)
.attr("height", height);
function renderMap(data) {
var projection = d3.geoIdentity().reflectY(true).fitSize([width, height], data)
var geoGenerator = d3.geoPath().projection(projection);
svg.append("g")
.selectAll("path")
.data(data.features)
.enter()
.append('path')
.attr('d', geoGenerator)
.attr('fill', 'steelblue');
};
function renderCity(data) {
var projection = d3.geoIdentity().reflectY(true).fitSize([width, height], data)
console.log(data)
svg.selectAll("circle")
.data(data)
.enter()
.append("circle")
.attr("cx", 50)
.attr("cy", 50)
.attr("r", 3);
};
d3.json('https://raw.githubusercontent.com/EugeneBorshch/ukraine_geojson/master/Ukraine.json', renderMap);
d3.csv('ua_cities_admin.csv', renderCity);
</script>
</body>
</html>
ua_cities_admin.csv 文件有以下字段:
Citylatlng
【问题讨论】:
标签: javascript html d3.js