AmCharts4:来自 GeoJSON 的自定义地图的 getPolygonById 方法?

Posted

技术标签:

【中文标题】AmCharts4:来自 GeoJSON 的自定义地图的 getPolygonById 方法?【英文标题】:AmCharts4: getPolygonById method for custom map from GeoJSON? 【发布时间】:2022-01-19 22:35:18 【问题描述】:

我正在尝试将 getPolygonById 方法与使用自定义 GeoJSON 数据创建的地图多边形系列一起使用(这是为了缩放到具有特定 ID 的多边形)。我已按照creating custom maps 提供的说明进行操作。

来自自定义 GeoJSON 数据的 Map Polygon Series 渲染和事件正常运行(例如,缩放到多边形或在“点击”时更改颜色)。

但是,当调用 customSeries.getPolygonById("ExampleID") 时,该方法返回“undefined”。请注意,customSeries 的 GeoJSON 源包含相应的 id 字段(即“id”:“ExampleID”)。

也就是说,尽管渲染正确,但以下代码返回“未定义”:

var customSeries = map.series.push(new am4maps.MapPolygonSeries());
customSeries.geodataSource.url = "/geojson/customSeries.geojson";
customSeries.useGeodata = true;
console.log(customSeries.getPolygonById("ExampleID"));

这与使用 Amcharts 地图模板时返回的带有指定地图多边形的 JSON 对象形成对比。例如,以下代码返回一个对应于“US”id 的 Map Polygon 的对象:

var worldLow = map.series.push(new am4maps.MapPolygonSeries();
worldLow.useGeodata = true;
worldLow.geodata = am4geodata_worldLow; 
console.log(worldLow.getPolygonById("US"));

这是我的数据的问题吗?或者从自定义 GeoJSON 调用地图多边形系列上的 getPolygonById 是否需要额外的东西?

【问题讨论】:

【参考方案1】:

通过 DataSource / GeoDataSource 对象加载数据是异步完成的,因此您的 getPolygonById 调用在数据被解析并加载到系列之前执行。您可以使用DataSource中的done事件或系列中的datavalidated事件在调用getPolygonById之前检查数据是否已加载

polygonSeries.geodataSource.events.on('done', function() 
  // timeout needed as the data isn't complately loaded at this point
  setTimeout(function() 
    console.log('done: ', polygonSeries.getPolygonById('BCH'))
  , 100)
)
// OR
polygonSeries.events.on('datavalidated', function() 
  // check if there's data loaded in the array before looking up
  // the polygon
  if (polygonSeries.data.length) 
    console.log('data loaded', polygonSeries.getPolygonById('BCH'))
  
)

Demo

【讨论】:

这很有帮助,感谢您的澄清! 三个后续问题:(1)是否有与geodataSource 和/或dataValidated 事件的事件监听器相关的AmCharts 文档? (2) 我知道“dataValidated”只记录数据的变化——因此如果数据已经验证,事件不会触发? (3) 可以使用 async/await 来等待添加地理数据吗? 1:是的,有几个:amcharts.com/docs/v4/concepts/event-listeners 和 amcharts.com/docs/v4/concepts/data/loading-external-data/… 以及参考部分中的特定于类的文档。 2:每当需要重新解析数据时触发,包括初始化和更改。 3.没有。

以上是关于AmCharts4:来自 GeoJSON 的自定义地图的 getPolygonById 方法?的主要内容,如果未能解决你的问题,请参考以下文章

来自 USGS geojson 数据的 jqGrid

来自具有 Geojson 系列的数据框的地理数据框

AmCharts4:导出菜单不提供 CSV、XLSX 和 JSON 选项

当值右对齐时,Amcharts4 图例标签不会被截断

没有得到谷歌图表和amcharts4之间相同的图表

删除饼图图例中名称和百分比之间的空格 (amcharts4)