Проблемы с передачей гео-координат в функцию latLngtoLayerPoint с использованием d3 и листовки? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь отобразить некоторые координаты широты / долготы, используя комбинацию d3 и листовки.

У меня есть вложенный JSON с гео-координатами, озаглавленный 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:

allSFEvents.forEach(function(d) {
  for (var key in allSFEvents) {
  d.latLong = new L.LatLng(allSFEvents[key].location.geo.latitude,
              allSFEvents[key].location.geo.longitude);
  console.log(d.latLong)
  }                 
    })

Всехорошо и хорошо;протоколирование консоли d.latLongs печатает каждую отдельную пару широта / длинна.

Я отображаю координаты, используя условные обозначения d3 и leaflet:

var events = mapG.selectAll("circle")
        .data(allSFEvents)
        .enter().append("circle")
        .style("stroke", "blue")
        .attr("class", 'events')
        .style("fill", 'blue')

Логирование консоли events дает отдельные круги сотдельные пары широта / длинна.

Итак, проблема, кажется, возникает на последнем шаге:

function drawAndUpdateEventCircles() {

    events.attr("transform",
        function(d) {
            var layerPoints = map.latLngToLayerPoint(d.latLong);
            console.log(d.latLong)//returns the same lat/long pair over and over
            return "translate("+ layerPoints.x +","+ layerPoints.y +")";
        }
    )
}
drawAndUpdateEventCircles();
      map.on("moveend", drawAndUpdateEventCircles);

Если я console.log d.latLong в функции drawAndUpdateEventCircles, он читает ту же пару lat / longснова и снова (последняя запись из allSFEvents) и, таким образом, он отображает только одну особую точку.Поэтому мне интересно, почему я не могу передать d.latLong в функции forEach функции drawAndUpdateEventCircles?Спасибо всем заранее.

...