Uncaught TypeError: Невозможно прочитать свойство 'стран' из неопределенного - PullRequest
0 голосов
/ 02 мая 2018

Вот как я получаю доступ к своим данным:

$.getJSON("https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/meteorite-strike-data.json", 
  function(data){        
    console.log(data);
    states=topojson.feature(data,data.objects.countries).features;
  }
);

но выдает ошибку: Uncaught TypeError: Cannot read property 'countries' of undefined

Вот пример моих данных:

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "geometry": {
        "type": "Point",
        "coordinates": [
          6.08333,
          50.775
        ]
      },
      "properties": {
        "mass": "21",
        "name": "Aachen",
        "reclong": "6.083330",
        "geolocation_address": null,
        "geolocation_zip": null,
        "year": "1880-01-01T00:00:00.000",
        "geolocation_state": null,
        "fall": "Fell",
        "id": "1",
        "recclass": "L5",
        "reclat": "50.775000",
        "geolocation_city": null,
        "nametype": "Valid"
      }
    },

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вы используете topojson.js для файла geojson. Топойсон содержит свойство, называемое объектами, которое содержит элементы в файле. Топойсон всегда начинается с (или, по крайней мере, имеет тип «топология»):

{"type":"Topology",...

У вас есть geojson, geojson часто содержит наборы объектов (это или отдельный объект с типом «объект» или геометрия типа «полигон», «точка» и т. Д.):

{
  "type": "FeatureCollection",
  "features": [ ... ]
}

Поскольку коллекции объектов geojson (или отдельные объекты) не имеют свойства objects, вы получаете сообщение об ошибке, так как объекты не определены.

При использовании topojson, topojson.feature() возвращает коллекцию объектов geojson, но, поскольку у вас уже есть коллекция объектов geojson, если вы хотите получить доступ к функциям, просто используйте:

states = data.features;

Примечание : этот набор данных появился в другом недавнем вопросе , геоджон не совсем подходит для использования с d3, поскольку в точках отсутствуют координаты. Вам нужно будет отфильтровать эти точки с отсутствующими координатами перед их добавлением, см. Этот bl.ock и / или связанный вопрос.

0 голосов
/ 02 мая 2018

Нет элемента objects в JSON, возвращенного этим вызовом API (и нет элемента countries):

{
    "type": "FeatureCollection",
    "features": [
        {
            "type": "Feature",
            "geometry": {
                "type": "Point",
                "coordinates": [
                    6.08333,
                    50.775
                ]
            },
            "properties": {
                "mass": "21",
                "name": "Aachen",
                "reclong": "6.083330",
                "geolocation_address": null,
                "geolocation_zip": null,
                "year": "1880-01-01T00:00:00.000",
                "geolocation_state": null,
                "fall": "Fell",
                "id": "1",
                "recclass": "L5",
                "reclat": "50.775000",
                "geolocation_city": null,
                "nametype": "Valid"
            }
        }
        /* ... */
    ],
    "crs": {
        "type": "name",
        "properties": {
            "name": "urn:ogc:def:crs:OGC:1.3:CRS84"
        }
    }
}
...