Javascript 如何在d3.js中输入鸟类计数数据,以便在谷歌地图上绘制条形图
我是d3.js新手,我参考了以下示例: 我将示例的映射更改为GoogleMap,并希望使用SVG来绘制工具栏 谷歌地图上的图表Javascript 如何在d3.js中输入鸟类计数数据,以便在谷歌地图上绘制条形图,javascript,google-maps,d3.js,svg,Javascript,Google Maps,D3.js,Svg,我是d3.js新手,我参考了以下示例: 我将示例的映射更改为GoogleMap,并希望使用SVG来绘制工具栏 谷歌地图上的图表 <!DOCTYPE html> <title>test</title> <meta charset="utf-8"> <style type="text/css"> .gmap{ display: block; width: 1000px; height: 800px; } .stations, .statio
<!DOCTYPE html>
<title>test</title>
<meta charset="utf-8">
<style type="text/css">
.gmap{ display: block; width: 1000px; height: 800px; }
.stations, .stations svg { position: absolute; }
.stations svg { width: 120px; height: 30px; padding-right: 100px; font: 12px sans-serif; }
.stations circle { fill: yellow; stroke: black; stroke-width: 1.5px; }
</style>
<body>
<div class="gmap" id="map-canvas"></div>
<script src="http://d3js.org/d3.v3.min.js"></script>
<script src="http://maps.googleapis.com/maps/api/js"></script>
<script></script>
<script>
var map;
function initialize() {
var mapOptions = { zoom: 8, center: new
google.maps.LatLng(23.7147979,120.7105502) };
map = new google.maps.Map( document.getElementById('map-canvas') , mapOptions);
}
initialize();
var width = 960, height = 960;
var svg = d3.select("body").append("svg")
.attr("width", width)
.attr("height", height);
d3.csv("223-loc.csv", function(data) {
var parse = d3.time.format("%Y/%m/%d").parse;
aaa = d3.nest()
.key(function(d){ return d.birdName;})
.entries(stocks = data);
aaa_copy = d3.nest()
.key(function(d){ return d.birdName;})
.entries(stocks = data);
var position2keep= new Array();
var i=0;
aaa.forEach(function(s)
{
for (nn=0; nn<selectAryy.length; nn++)
{
if (s.key == selectAryy[nn])
{ position2keep.push(i); break; }
}
i++;
});
position2keep.sort();
for (j=aaa_copy.length-1; j>=0; j--)
{
if ( position2keep.indexOf(j) == -1)
aaa_copy.splice(j,1);
}
aaa_copy.forEach(function(s) {
s.values.forEach(function(d) {
for (nn=0; nn<selectAryy.length; nn++){
if (d.birdName== selectAryy[nn]){
d.date = parse(d.date);
d.count = +d.count;
d.lat = +d.lat;
d.lng = +d.lng;
}
}
bars = svg.selectAll("g")
.data(s)
.enter()
.append("g")
.attr("class", "bars")
.attr("transform", function(d) {return "translate("+ d.lat +","+
d.lng+")";});
bars.append("rect")
.attr('height', function(d) {return d.count*1000})
.attr('width', 10)
.attr('y', function(d) {return -(d.count)})
.attr("class", "bars")
.style("fill", "green");
bars.append("text")
.text(function(d) {return d.location})
.attr("x", -10)
.attr("y", 18);
bars.setMap(map);
});
});
});
</script>
</body>
测试
.gmap{显示:块;宽度:1000px;高度:800px;}
.stations、.stations svg{位置:绝对;}
.svg{宽度:120px;高度:30px;右侧填充:100px;字体:12px无衬线;}
.stations圆{填充:黄色;笔划:黑色;笔划宽度:1.5px;}
var映射;
函数初始化(){
var mapOptions={缩放:8,中心:新建
google.maps.LatLng(23.7147979120.7105502)};
map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
}
初始化();
变量宽度=960,高度=960;
var svg=d3.选择(“正文”).追加(“svg”)
.attr(“宽度”,宽度)
.attr(“高度”,高度);
d3.csv(“223 loc.csv”,功能(数据){
var parse=d3.time.format(“%Y/%m/%d”).parse;
aaa=d3.nest()
.key(函数(d){返回d.birdName;})
.分录(股票=数据);
aaa_copy=d3.nest()
.key(函数(d){返回d.birdName;})
.分录(股票=数据);
var position2keep=新数组();
var i=0;
aaa.forEach(功能)
{
对于(nn=0;nn=0;j--)
{
if(位置2KEEP.indexOf(j)=-1)
aaa_拷贝拼接(j,1);
}
aaa_副本forEach(功能){
s、 forEach(函数(d){
对于(nn=0;nn,在提供的示例中存在一些问题:
selectary
未定义
- 最重要的是
bar.setMap(map);
似乎无效。你是说google.maps.OverlayView
对象的setMap
功能吗
为了在谷歌地图上创建条形图,我建议将其实现为
下面的示例演示了如何使用覆盖技术将svg
对象(条形图)添加到Google地图中:
示例
功能BarChartOverlay(图表数据、地图){
this.map=map;
this.chartData u=chartData;
this.div_979;=null;
这个.setMap(map);
}
BarChartOverlay.prototype=新的google.maps.OverlayView();
BarChartOverlay.prototype.onAdd=函数(){
var overlyprojection=this.getProjection();
var div=document.createElement('div');
setAttribute('id','chartDiv');
var chartArea=d3.select(div.append(“svg”);
此.chartData_uuu.forEach(函数(项){
var pos=OverlyProjection.fromLatLngToDivPixel(新的google.maps.LatLng(项目[0],项目[1]);
var bar=图表区域
.append(“rect”)
.attr(“x”,位置x)
.attr(“y”,位置y)
.attr(“宽度”,40)
.attr(“高度”,第[2]项)
.attr(“填充不透明度”,“0.5”)
.attr(“填充”、“紫色”);
});
this.div=div;
this.chartArea u=chartArea;
var panes=this.getPanes();
窗格。覆盖层。附属物(分区);
};
BarChartOverlay.prototype.draw=函数(){
var overlyprojection=this.getProjection();
var sw=overlayProjection.fromLatLngToDivPixel(this.map_u.getBounds().getSouthWest());
var ne=overlyprojection.fromLatLngToDivPixel(this.map_u.getBounds().getNorthEast());
var chartAreaSize=sw.x++'+ne.y++'+(ne.x-sw.x)+'+(sw.y-ne.y);
此.chartArea_uU2;.attr('viewBox',chartAreaSize);
};
BarChartOverlay.prototype.onRemove=函数(){
this.div\u.parentNode.removeChild(this.div\u);
this.div=null;
};
函数初始化(){
变量映射选项={
缩放:8,中心:新
google.maps.LatLng(23.7147979120.7105502)
};
var图表数据=[
[25.204757,121.6896172,100],
[22.7972447,121.0713702,130],
[24.254972,120.6011066,80]
];
var map=new google.maps.map(document.getElementById('map-canvas'),mapOptions);
var overlay=新的BarChartOverlay(图表数据、地图);
}
初始化();
.gmap{
显示:块;
宽度:1000px;
高度:800px;
}
它是如何“不工作”的?谷歌地图可以正常显示,但条形图不能在地图上绘制。它只是没有出现?或者发生了其他事情?是否有javascript错误?是否存在于DOM中?您是否尝试在调试器中逐步检查javascript并找出发生了什么?console.log没有y错误。数据放在数组aaa和aaa_副本中,但SVG没有绘制它。Gremyachev谢谢。现在可以工作了。但另一个问题是条形图不能与地图一起定位放大或缩小。你能给我举个例子吗?或者你能再帮我一次吗?