Я пытаюсь создать карту с amCharts, в которой есть анимированные круги, как в примере, представленном на странице ниже. Если я добавляю данные в основную функцию (код ниже - на am4core.ready (..)), она работает нормально, но я хочу динамически добавлять данные на карту и сохранять анимацию.
У меня есть отдельная функция, которая опрашивает данные каждую секунду или около того (второй код приведен ниже) и обновляет imageSeries новыми данными. Это прекрасно работает и добавляет круг к моей карте, но не оживляет его.
Пример исходного кода: https://www.amcharts.com/demos/map-with-pulsating-bullets/
Мой код:
<script>
var colorSet = new am4core.ColorSet();
var imageSeriesData = [];
var chart;
var imageSeries;
am4core.ready(function() {
am4core.useTheme(am4themes_animated);
chart = am4core.create("mapcontainer", am4maps.MapChart);
chart.geodata = am4geodata_worldLow;
chart.projection = new am4maps.projections.Miller();
var polygonSeries = chart.series.push(new am4maps.MapPolygonSeries());
polygonSeries.exclude = ["AQ"];
polygonSeries.useGeodata = true;
var polygonTemplate = polygonSeries.mapPolygons.template;
polygonTemplate.tooltipText = "{name}";
polygonTemplate.polygon.fillOpacity = 0.6;
var hs = polygonTemplate.states.create("hover");
hs.properties.fill = chart.colors.getIndex(0);
imageSeries = chart.series.push(new am4maps.MapImageSeries());
imageSeries.mapImages.template.propertyFields.longitude = "longitude";
imageSeries.mapImages.template.propertyFields.latitude = "latitude";
imageSeries.mapImages.template.tooltipText = "{title}";
imageSeries.mapImages.template.propertyFields.url = "url";
var circle = imageSeries.mapImages.template.createChild(am4core.Circle);
circle.radius = 5;
circle.propertyFields.fill = "color";
var circle2 = imageSeries.mapImages.template.createChild(am4core.Circle);
circle2.radius = 5;
circle2.propertyFields.fill = "color";
circle2.propertyFields.scale = "scale";
circle2.events.on("inited", function(event) {
animateBullet(event.target);
});
function animateBullet(circle) {
var animation = circle.animate([{
property: "scale",
from: 1,
to: circle.scale
}, {
property: "opacity",
from: 1,
to: 0
}], 1000, am4core.ease.circleOut);
animation.events.on("animationended", function(event) {
animateBullet(event.target.object);
})
}
imageSeries.data = imageSeriesData;
});
</script>
Функция, которая отправляет данные в файл imageSeries.data и на карту:
imageSeriesData.push({
"title": data.country,
"latitude": latlong[data.country].latitude,
"longitude": latlong[data.country].longitude,
"color":colorSet.next()
});
imageSeries.data = imageSeriesData;
Этот код, приведенный выше, работает и обновляет карту. Но она не оживляет точку, как в приведенном ими примере.
Что мне здесь не хватает? Как я могу поместить данные sh на карту динамически, а также анимировать маленькие точки, как в приведенном ими примере? Я также попытался переместить функцию animateBullet (..) в глобальное местоположение, но ничего не вышло.
Есть идеи?
Понятия данных: https://www.amcharts.com/docs/v4/concepts/data/
К сожалению, прочитайте этот документ выше, и он не предоставляет ничего о картах мира.