2017-02-09 2 views
0

у меня есть данные, как это:Итерация по данным отклика для создания карты Google объекты

"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}, 

В общей сложности это будет иметь 500 объектов под «объекты»

Я пытаюсь создать 500 из них: new google.maps.LatLng(37.782551, -122.445368)

поместить в массив так:

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) 

     ] 
} 

быть возвращены здесь:

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 
    }); 
} 

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

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)] 
}) 
} 

, но вместо того, чтобы возвратить массив новых объектов, он возвращает 500 новых массивов с одним объектом Google, потому что это внутри Foreach. Я не уверен, как получить то, что я ищу. Я борюсь со значительными объемами и просматриваю данные.

Спасибо!

ответ

1

Я буду считать объект resp объектом в верхней части вашего сообщения. Прежде всего, вы захотите использовать map на массиве, чтобы получить массив обратно.

Карта

Карта работает аналогично Foreach, так как он действует на каждый элемент массива. Разница в том, что в обратном вызове map вы возвращаете обновленный элемент.

Пример:

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

выше с возвратом массив следующим образом: [2, 4, 6, 8]. Обратите внимание на возврат внутри метода обратного вызова.

В вашем случае

Вы хотите получить массив objects от вашего resp и map каждый из этих элементов к объекту Google Maps (т.е. google.maps.LatLng(lat, lng))

Если я правильно понял, что вы пытаясь сделать, следующее должно работать. Я бы предложил играть с более простыми примерами map (также filter, forEach и reduce (foldr на некоторых языках).

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

Хмм, я не уверен, что объяснил себя достаточно хорошо. Я буду более кратким. Я пытаюсь вытащить все Lat и Lng из 500 объектов и создать массив из 500 экземпляров 'new google.maps.LatLng (Latitude, Longitude)' как документацию googe здесь -> https: // разработчики .google.com/maps/documentation/javascript/examples/layer-heatmap – Quesofat

+0

В этом случае это должно быть сделано. Для каждого элемента массива 'objects', lat/lng вытаскиваются и создается новый объект Google Maps. Все они отображаются в массив и возвращаются. –

+0

Err. Что я уже имел в виду? – Quesofat