Проблема в том, что fitSize принимает геойсон объект , в то время как selectAll.data () принимает массив , вы используете один из этих двух для обоих в geoData
.Это оставляет два решения:
Решение 1:
Если мы используем
var geoData = topojson.feature(mapData, mapData.objects["cb_2015_new_york_county_20m"]).features
var projection = d3.geoMercator()
.fitSize([width, height], geoData)
Мы получаем ошибки NaN, потому что проекция неправильно установлена какмы не передаем объект geojson, просто массив объектов geojson.Мы могли бы решить эту проблему, создав коллекцию объектов с помощью geoData
и передав ее в fitSize:
var geoData = topojson.feature(mapData, mapData.objects["cb_2015_new_york_county_20m"]).features
var projection = d3.geoMercator()
.fitSize([width, height], {type:"FeatureCollection", features: geoData})
Теперь мы передаем коллекцию пространственных объектов geojson в fitSize, мы все продолжаем проецировать, и, посколькуgeoData
все еще является массивом, мы можем передать его в selectAll.data () без изменений.
Вот блок.
Решение 2:
Если мы используем:
var geoData = topojson.feature(mapData, {
type:"GeometryCollection",
geometries: mapData.objects["cb_2015_new_york_county_20m"].geometries,
})
Мы получаем объект geojson, projection.fitSize работает, но selectAll().data(geoData)
не добавляет никаких функций, так как это не массив -введите выбор пуст.Мы можем подставить selectAll().data(geoData.features)
, чтобы решить эту проблему, и ввести один путь для объекта (в качестве альтернативы мы могли бы использовать .data([geoData])
для ввода одного объекта для всех путей).
Вот блок.
Оба блока нарисованы в правильном масштабе - карта превышает границы блоков, так как я не изменил ваши размеры 800x800