Javascript JSON映射上项目的用户输入
我在这里有以下D3.js项目: 纬度和经度输入位于地图下方 它应该获取用户输入的纬度和经度数字,并在给定坐标处“投影”svg圆。问题是我要么得到的不是一个函数错误,要么开发工具没有抛出任何错误,但是这些圆永远不会被投影Javascript JSON映射上项目的用户输入,javascript,json,d3.js,Javascript,Json,D3.js,我在这里有以下D3.js项目: 纬度和经度输入位于地图下方 它应该获取用户输入的纬度和经度数字,并在给定坐标处“投影”svg圆。问题是我要么得到的不是一个函数错误,要么开发工具没有抛出任何错误,但是这些圆永远不会被投影 这是一个短文件,有人能解释一下为什么它没有按我的想法工作吗?你的更新功能没有任何意义 它接受两个输入,但您只能用一个来调用它 .selectAll(“圆圈”).enter()无效d3语法 您需要使用纬度和经度调用projection,通过0,这将导致它返回null,因为它在投影
这是一个短文件,有人能解释一下为什么它没有按我的想法工作吗?你的更新功能没有任何意义
.selectAll(“圆圈”).enter()无效d3
语法李>
您需要使用纬度和经度调用projection
,通过0
,这将导致它返回null
,因为它在投影之外
修复所有这些之后,您仍然会离开,因为您已按边距移动了路径,最好将它们放在按边距移动的g
中
综上所述,一个简单的重写将是:
var lat = d3.select("#latValue").on("input", function() {
update();
}).node();
var long = d3.select("#lonValue").on("input", function() {
update();
}).node();
function update() {
// lat/long to pixel
var coors = projection([long.value, lat.value]);
// if outside projection don't add circle
if (coors === null) return;
// add circle
container
.append("circle")
.attr("cx", coors[0])
.attr("cy", coors[1])
.attr("r", Math.sqrt(5) * 4)
.style("fill", "black")
.style("opacity", 0.85);
}
运行代码:
/*鼠标悬停时,亮显状态颜色*/
路径:悬停{
填充不透明度:.7;
}
//地图的宽度和高度
var宽度=960;
var高度=500;
变量边距={左:0,上:100,右:0,下:0};
//D3投影
var projection=d3.geo.albersUsa()
.translate([width/2,height/2])//平移到屏幕中心
.刻度([1000]);//缩小规模,让我们看到整个世界
//定义路径生成器
var path=d3.geo.path()//将GeoJSON转换为SVG路径的路径生成器
.投影(投影);//告诉路径生成器使用albersUsa投影
//定义输出的线性比例
var color=d3.scale.linear()
.范围([“#c3e2ff”、“#15198e”]);
//创建SVG元素并将映射附加到SVG
var svg=d3.选择(“主体”)
.append(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度+页边距.top);
append('text')
.text('坐标查询')
.attr('font-size','24px')
.attr('transform','translate('+30+','+70+'))
.attr('font-family','Calibri');
append('text')
.text(“截至2016年12月的数据”)
.attr('font-size','12px')
.attr('transform','translate('+35+','+100+'))
.attr('font-family','Calibri');
//加载我的状态数据!
color.domain([0100]);//设置输入数据的范围
//加载GeoJSON数据并与状态数据合并
d3.json(“https://jsonblob.com/api/573228c3-d068-11e6-b16a-b501dc8d2b08,函数(json){
//var坐标=d3.鼠标(此);
//将数据绑定到SVG,并为每个GeoJSON功能创建一个路径
var container=svg.append(“g”)
.attr('transform','translate('+margins.left+','+margins.top+'));
container.selectAll(“路径”)
.data(json.features)
.输入()
.append(“路径”)
.attr(“d”,路径)
.style(“笔划”、“fff”)
.style(“笔划线条连接”、“圆形”)
.样式(“笔划宽度”、“1.5”)
.样式(“填充”、“钢蓝”);
//修改Mike Bostock的图例代码:http://bl.ocks.org/mbostock/3888852
var lat=d3。选择(#latValue”)。打开(“输入”,函数(){
更新();
}).node();
var long=d3。选择(#lonValue”)。打开(“输入”,函数(){
更新();
}).node();
函数更新(){
//横向/纵向至像素
var coors=投影([长值,横向值]);
//如果外部投影不添加圆
如果(coors==null)返回;
//加圈
容器
.附加(“圆圈”)
.attr(“cx”,coors[0])
.attr(“cy”,coors[1])
.attr(“r”,数学sqrt(5)*4)
.样式(“填充”、“黑色”)
.样式(“不透明度”,0.85);
}
});
格度:
经度:
您的更新功能没有任何意义
它接受两个输入,但您只能用一个来调用它李>
.selectAll(“圆圈”).enter()无效d3
语法李>
您需要使用纬度和经度调用projection
,通过0
,这将导致它返回null
,因为它在投影之外
修复所有这些之后,您仍然会离开,因为您已按边距移动了路径,最好将它们放在按边距移动的g
中
综上所述,一个简单的重写将是:
var lat = d3.select("#latValue").on("input", function() {
update();
}).node();
var long = d3.select("#lonValue").on("input", function() {
update();
}).node();
function update() {
// lat/long to pixel
var coors = projection([long.value, lat.value]);
// if outside projection don't add circle
if (coors === null) return;
// add circle
container
.append("circle")
.attr("cx", coors[0])
.attr("cy", coors[1])
.attr("r", Math.sqrt(5) * 4)
.style("fill", "black")
.style("opacity", 0.85);
}
运行代码:
/*鼠标悬停时,亮显状态颜色*/
路径:悬停{
填充不透明度:.7;
}
//地图的宽度和高度
var宽度=960;
var高度=500;
变量边距={左:0,上:100,右:0,下:0};
//D3投影
var projection=d3.geo.albersUsa()
.translate([width/2,height/2])//平移到屏幕中心
.刻度([1000]);//缩小规模,让我们看到整个世界
//定义路径生成器
var path=d3.geo.path()//将GeoJSON转换为SVG路径的路径生成器
.投影(投影);//告诉路径生成器使用albersUsa投影
//定义输出的线性比例
var color=d3.scale.linear()
.范围([“#c3e2ff”、“#15198e”]);
//创建SVG元素并将映射附加到SVG
var svg=d3.选择(“主体”)
.append(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度+页边距.top);
append('text')
.text('坐标查询')
.attr('font-size','24px')
.attr('transform','translate('+30+','+70+'))
.attr('font-family','Calibri');
append('text')
.text(“截至2016年12月的数据”)
.attr('font-size','12px')
.attr('transform','translate('+35+','+100+'))
.attr('font-family','Calibri');
//加载我的状态数据!
color.domain([0100]);//设置输入数据的范围
//加载GeoJSON数据并与状态数据合并
d3.json(“https://jsonblob.com/api/573228c3-d068-11e6-b16a-b501dc8d2b08,函数(json){
//var坐标=d3.鼠标(此);
//将数据绑定到SVG,并为每个GeoJSON功能创建一个路径
var container=svg.append(“g”)
.attr('transform','translate('+margins.left+'),'+