Проблемы с доступом к гео-координатам во вложенном JSON для использования в d3 - PullRequest
0 голосов
/ 02 февраля 2019

Я удалил некоторые геоданные с веб-сайта, поместил их в json, а затем пытаюсь отобразить их в листовке / d3.

Вот необработанный JSON (только образец):

var SFEvents = [[{"startDate": "2019-01-27", "performer": {"url": "https://www.bandsintown.com/a/1682883-schuster?came_from=244", "image": "", "@type": "MusicGroup", "name": "schuster"}, "endDate": "2019-01-27", "name": "schuster", "url": "https://www.bandsintown.com/e/1013085690-schuster-at-aqus-cafe?came_from=244", "image": "", "location": {"address": "Petaluma, CA", "geo": {"latitude": 38.2325, "@type": "GeoCoordinates", "longitude": -122.6355556}, "@type": "Place", "name": "Aqus Cafe"},

Сначала я загружаю в JSON:

d3.queue()
.defer(d3.csv, "data/SFEvents.json", function(cw) { 
})
.await(ready);

function ready(error) {
console.log(SFEvents)

//concatenate two separate arrays into one
var allSFEvents = SFEvents[0].concat(SFEvents[1]);

запись в консоль allSFEvents, я вижуего структура выглядит следующим образом:

@context: "http://schema.org"
@type: "MusicEvent"
endDate: "2019-01-27"
image: ""
location:
    @type: "Place"
    address: "San Francisco, CA"
    geo:
        @type: "GeoCoordinates"
        latitude: 37.775
        longitude: -122.4183333
        __proto__: Object
    name: "Natoma Cabana"
    __proto__: Object
    name: "Winter Olympics"
    performer: {url: "https://www.bandsintown.com/a/217960- 
    winter-olympics?came_from=244", image: "", @type: "MusicGroup", name: "Winter Olympics"}
startDate: "2019-01-27"
url: "https://www.bandsintown.com/e/1013280443-winter-olympics-at-natoma-cabana?came_from=244"
__proto__: Object

Затем я преобразую allSFEvents в GeoJSON, поскольку я хочу отобразить координаты.

    var outGeoJson = {}
    outGeoJson['properties'] = allSFEvents
    outGeoJson['type']= "Feature"
    outGeoJson['geometry']= {"type": "Point", "coordinates":
    [allSFEvents['latitude'], allSFEvents['longitude']]} // this is where I think the problem is, I'm not accessing "latitude" and "longitude" correctly here.

Если я console.log outGeoJson, я получаю то, чтобыть функциональным geoJSON:

{properties: Array(36), type: "Feature", geometry: {…}}
    geometry: {type: "Point", coordinates: Array(2)}
    properties: Array(36)
    0: {startDate: "2019-01-27", performer: {…}, endDate: "2019- 
    01-27", name: "schuster", url: 
    "https://www.bandsintown.com/e/1013085690-schuster-at-aqus- 
    cafe?came_from=244", …}
    1: {startDate: "2019-01-27", performer: {…}, endDate: "2019- 
    01-27", name: "Winter Olympics", url: 
    "https://www.bandsintown.com/e/1013280443-winter-olympics- 
    at-natoma-cabana?came_from=244", …}
   2: {startDate: "2019-01-27", performer: {…}, endDate: "2019- 
   01-

Но когда я пытаюсь прочитать в координатах следующее:

outGeoJson.forEach(function(d) {
        var coords = d.geometry.coordinates
        console.log(coords)
     }

Я получаю сообщение об ошибке, говоря, что forEach не является функцией.

Аналогично, это работает, но дает мне неопределенные координаты:

Object.keys(outGeoJson).forEach(function (key){
console.log(outGeoJson[key]);
});

Итак, два моих вопроса: 1) как я могу получить доступ к координатам, используя нотацию d.properties, чтобы я мог отобразитьих, и 2) я не должен работать forEach на geoJSON?

Спасибо.

...