Hi, you have issue when building svg:circle, so it doesn't work in Firefox and all spots has wrong coordinates(because of padding inside the svg element). I forked your gist and made changes so you can take a look and make changes in your code if you want. http://bl.ocks.org/1125458

Console log shows the geo function is pulling six lat/lon figures. The problem is that it is not attaching each lat/long to each marker, even though the transform function (should be) passed the right data.

Is it the case the the geo function is running 6 times, then passing the final amount to a single marker? If so, how can this be changed?

I am developing my JS skills as the code probably shows, much appreciation in advance of any help.

How might I size each dot based on a value in the json? If I added another key : value pair to each object, how can this be selected for binding to the circle elements?

Me example data is below. I'm having some difficulty binding this data in lieu of the set used to create the example. What I'm trying to do is use the lat/long for location as the example does, but bind the value for all "in" values to the size of each circle.

@mickdee: Sounds like you have two questions here so I'll answer them separately.

First, to do data binding for your sample set instead of

var marker = layer.selectAll("svg")
.data(d3.entries(data))

you'll want to do

var marker = layer.selectAll("svg")
.data(data.stations)

because you have an array of objects where Mike had everything as properties of a top-level object. (NB: this also assumes that your data is in a separate "stations.json" file in your root directory; there are a few more lines to change if you have it somewhere else.) You will also need to change the line

d = new google.maps.LatLng(d.value[1], d.value[0])

but with your current layout I can't think of a way to do it that doesn't seem ugly and computationally wasteful. If your objects were instead something like

As for making the radius correspond to the data, you should be able to swap out

.attr("r", 4.5)

with something like

.attr("r", function(d) {return d.in / 10000;})

(the 10000 is an arbitrary number to make the circles reasonable; tweak as needed).
I'm doing something similar and running into a problem with circles not showing up until I zoom in or out -- still trying to figure out what's going on there. But hopefully this gets you pointed in the right direction.

This is a great example, but I really want to make it interactive and I can't figure out how to register click events with this. I'm not sure if the google map is eating them or something, but I'm stuck. My d3 approach was

marker.on('click', function(d,i){
console.log('clicked');
});

inside overlay.onAdd, but I'm getting nothing in the console when I click. Similar results setting up listeners with google.maps.events or jQuery.

My next task is getting tooltips to work. I've tried just about every way I can think of but can't successfully get mouseover events to work properly on the svg circles either with d3 or plain ol' css.

I am new here so please accept my apologizes in advance if I am asking something wrongly. If possible I would like to ask you for help, I am using the code above in this article to plot two set of circles in a google map with some variations, so I am getting the two sets from two different files, for that I am using 2 overlays, that are added to the map separately, but it is plotting only the first set of circles, if possible could I post my code and the two files anywhere to get any help with that?

I copied it (didn't fork) and made some changes for my own purposes so that I could use a single SVG instead of one per map marker and like several others mentioned so I could have my markers get mouse events (using overlayMouseTarget instead of overlayLayer.