2017-02-09 6 views
0

Ich habe Daten wie folgt aus:Iterieren durch Antwortdaten Google-Map erstellen Objekte

"meta":{"About thisdata"}, "objects": [{"beat": "1614", "block": "081XX W HIGGINS RD", "case_number": "JA100466", "classification": "/api/1.0-beta3/crimeclassification/83/", "community_area": "/api/1.0-beta3/communityarea/10/", "community_name": "Norwood Park", "community_number": 10, "community_slug": "norwood-park", "crime_date": "2016-12-30T18:00:00", "description": "$500 AND UNDER", "domestic": false, "fbi_code": "06", "id": "10801504", "iucr": "0820", "latitude": 41.985421498, "location_description": "STREET", "longitude": -87.829756604, "primary_type": "THEFT", "ward": 41, "year": 2016}, 

Insgesamt diese 500 Objekte haben unter „Objekte“

Ich versuche, 500 davon zu erstellen: new google.maps.LatLng(37.782551, -122.445368)

in einem Array wie folgt zu setzen:

function getPoints() { 
     return [ 
      new google.maps.LatLng(37.782551, -122.445368), 
      new google.maps.LatLng(37.782745, -122.444586), 
      new google.maps.LatLng(37.782842, -122.443688) 

     ] 
} 

zurückgegeben werden hier:

function initMap() { 
    map = new google.maps.Map(document.getElementById("map"), { 
    center: { lat: 41.881, lng: -87.629 }, 
    zoom: 12, 
    mapTypeId: 'satellite' 
    }); 

    heatmap = new google.maps.visualization.HeatmapLayer({ 
    data: makeMarkers(), <-- Here 
    map: map 
    }); 
} 

Der Code Ich habe versucht, sieht wie folgt aus:

var makeMarkers = function() { 
    var result = []; 
    var lat, lng = []; 
    resp.objects.forEach(function(objects) { 
    lat.objects.latitude; 
    lng = objects.longitude; 
    return [new google.maps.LatLng(lat, lng)] 
}) 
} 

, sondern eine ganze Reihe neuer Objekte zurückzugeben, gibt es 500 neue Arrays mit einem Google-Objekt, weil es im Inneren des forEach ist. Ich bin mir nicht sicher, wie ich bekommen soll, wonach ich suche. Ich kämpfe ziemlich viel mit Scopes und wiederhole Daten.

Vielen Dank!

Antwort

1

Ich nehme an, das resp Objekt ist das Objekt an der Spitze Ihres Beitrags. Zuallererst möchten Sie map für das Array verwenden, um ein Array zurück zu bekommen.

Karte

Karte arbeitet nach forEach ähnlich, da es auf jedem Element in dem Array wirkt. Der Unterschied besteht darin, dass Sie innerhalb des Callbacks an map ein aktualisiertes Element zurückgeben.

Ex:

[1, 2, 3, 4].map(function (element) { 
    return element * 2 
} 

Die oben mit ein Array wie folgt: [2, 4, 6, 8]. Beachten Sie die Rückgabe innerhalb der Callback-Methode.

Für Ihren Fall

Sie wollen das Array von objects von Ihrem resp und map jedes dieser Elemente auf die Google Maps-Objekt erhalten (dh google.maps.LatLng(lat, lng))

Wenn ich richtig verstehe, was du bist versuchen zu tun, sollte folgendes funktionieren. Ich würde vorschlagen, mit einfacheren Beispielen von map (auch filter, forEach und reduce (foldr in einigen Sprachen) sind gut zu wissen).

var makeMarkers = function() { 
    var result = []; 
    var lat, lng = []; 
    return resp.objects.map(function(element) { 
    lat = element.latitude; 
    lng = element.longitude; 
    return new google.maps.LatLng(lat, lng); 
    }) 
} 
+0

Hmm Ich bin mir nicht sicher, ob ich mich selbst gut genug erklärt habe. Ich werde präziser sein. Ich versuche, alle Lat und Lng aus den 500 Objekten herauszuziehen und ein Array von 500 Instanzen von 'new google.maps.LatLng (Latitude, Longitude)' wie googes Dokumentation hier -> https: // Entwickler zu erstellen .google.com/maps/documentation/javascript/examples/layer-heatmap – Quesofat

+0

In diesem Fall sollte das obige geschehen. Für jedes Element des Arrays "objects" wird das lat/lng herausgezogen und ein neues Google Maps-Objekt erstellt. Sie werden alle einem Array zugeordnet und zurückgegeben. –

+0

Err. Was ich schon hatte, meinen Sie? – Quesofat

Verwandte Themen