Хотя шкалы могут показаться подходящим методом для построения географических точек: не используйте этот подход.
Вы теряете контроль над вращением проекции и не можете использовать нецилиндрическую проекцию (только не повернутые цилиндрические проекции могут строить широту и долготу независимо). Но также очень трудно выровнять объекты, расположенные по шкалам, с другими элементами карты, если они не используют тот же подход.
Вместо этого D3 имеет широкий диапазон встроенных проекций.
Проекции принимают пару [долгота, широта] и возвращают координату [x, y]. Широта и долгота должны быть в градусах, x и y в пикселях.
Для создания проекции вы можете использовать:
var projection = d3.geoMercator() // or geoAlbers, geoSupportedProjection, etc.
Чтобы использовать его, просто передайте ему координату:
projection([long,lat]) // [x,y]
В вашем случае это может выглядеть так (для cx, cy выглядит аналогично)
.attr("cx", function(d) { return projection([d.long,d.lat])[0] })
Теперь эта проекция отцентрирована по умолчанию на 0,0 градусов и настроена для карты 960x500 пикселей. Но вы можете изменить масштаб, центр и вращение, например:
var projection = d3.geoMercator().center([-100,35]).scale(1000)
Для более полного ознакомления с методами проецирования вам следует обратиться к документации по d3-geo.
В вашем случае есть специальная составная проекция, охватывающая США, d3.geoAlbersUsa, в которой есть место для Гавайев и Аляски. Но из-за его составной природы менее гибок, хотя вы все еще можете масштабировать его. Масштаб по умолчанию предполагает карту 960x600 пикселей (при настройке большего масштаба карты карта распространяется по большей области).