【发布时间】:2020-02-13 21:17:03
【问题描述】:
我是 d3 新手,在我的 SVG 地图中添加点时遇到了一些麻烦。我正在加载 SVG 地图,然后尝试从我的数据中附加坐标,这是一个对象数组,格式如下:
{schoolName: "Harvard University", gpa: 4, state: "MA", city: "Cambridge", longitude: -71.10973349999999, latitude: 42.3736158}
下面代码的结果是,我在 SVG 标记下方附加了一组圆圈,但地图上没有出现任何圆圈,并且我收到了看起来像我在代码中看不到的语法错误。
我在这里做错了什么?
var coords = require('./data/coordinates')
document.addEventListener("DOMContentLoaded", () => {
// loads svg map
d3.xml('src/data/usa2.svg', function(data){
document.body.append(data.documentElement)
})
// adjusts data to include coordinates for each city
cities = cities.default
let schoolData = []
d3.json("src/data/schoolInfo.json", function(schools){
schools.map(el => {
let currentCity = cities.filter(function(cities){return cities.city === el.city})
el["hs-gpa-avg"] !== null && currentCity.length > 0 ? schoolData.push({"schoolName": el["displayName"], "gpa": el["hs-gpa-avg"], "state": el["state"], "city": el["city"], "longitude": currentCity[0]["longitude"], "latitude": currentCity[0]["latitude"]}) : ''
})
var width = 1200,
height = 720;
var albersProjection = d3.geoAlbers()
.scale(1000)
.rotate([70, 0])
.center([-15, 35])
.translate([width/2, height/2]);
var svg = d3.select('svg')
svg.selectAll("circle")
.data(schoolData).enter()
.append("circle")
.attr("transform", function(d) {
let coords = albersProjection([ d.longitude, d.latitude ]);
return `translate(${coords[0]}px, ${coords[1]}px)`
})
.attr("r", "8px")
.attr("fill", "red")
})
})
在解决与翻译相关的错误时,我的圈子仍然放错了位置,正如answer 中所预测的那样:
【问题讨论】:
-
我已经调整了问题以保留最初的问题 - 否则我的答案的第一部分不再相关,并且问题的意图将发生很大变化。问题应该是捕捉到现在最初存在的两个问题。如果您觉得它不能同时捕获两者,请随时更改我的编辑。
标签: javascript d3.js svg