Вы используете topojson.js для файла geojson. Топойсон содержит свойство, называемое объектами, которое содержит элементы в файле. Топойсон всегда начинается с (или, по крайней мере, имеет тип «топология»):
{"type":"Topology",...
У вас есть geojson, geojson часто содержит наборы объектов (это или отдельный объект с типом «объект» или геометрия типа «полигон», «точка» и т. Д.):
{
"type": "FeatureCollection",
"features": [ ... ]
}
Поскольку коллекции объектов geojson (или отдельные объекты) не имеют свойства objects, вы получаете сообщение об ошибке, так как объекты не определены.
При использовании topojson, topojson.feature()
возвращает коллекцию объектов geojson, но, поскольку у вас уже есть коллекция объектов geojson, если вы хотите получить доступ к функциям, просто используйте:
states = data.features;
Примечание : этот набор данных появился в другом недавнем вопросе , геоджон не совсем подходит для использования с d3, поскольку в точках отсутствуют координаты. Вам нужно будет отфильтровать эти точки с отсутствующими координатами перед их добавлением, см. Этот bl.ock и / или связанный вопрос.