topojson数据未在openlayers中呈现

topojson数据未在openlayers中呈现,openlayers,openlayers-3,topojson,Openlayers,Openlayers 3,Topojson,我正在尝试将topojson文件加载到openlayers中 我使用来自的topojson文件 当我画南美洲时,它确实起作用: 但是,当我将源url更改为北美或欧洲的url时,它不起作用,例如大洋洲就起作用 例如: 我测试了其他来源的一些topojson文件,有些确实被绘制了,有些则不会,我看不出这些文件之间有多大区别,也找不到哪里出了问题 在代码笔中查看控制台时可以看到错误。当您使用ol-debug.js而不是生产版本时,调试更容易: VM1668 ol debug.js:52808未捕获

我正在尝试将topojson文件加载到openlayers中

我使用来自的topojson文件

当我画南美洲时,它确实起作用:

但是,当我将源url更改为北美或欧洲的url时,它不起作用,例如大洋洲就起作用

例如:


我测试了其他来源的一些topojson文件,有些确实被绘制了,有些则不会,我看不出这些文件之间有多大区别,也找不到哪里出了问题

在代码笔中查看控制台时可以看到错误。当您使用ol-debug.js而不是生产版本时,调试更容易:

VM1668 ol debug.js:52808未捕获类型错误:geometryReader不是函数

位于Function.ol.format.TopoJSON.readFeatureFromGeometry_52;(vmol debug.js:52808)

错误背后的原因是,北美数据集的几何体没有类型(也没有任何实际的几何体数据)

正如您在OL中所看到的,它尝试使用。由于没有用于几何体类型
null
的读取器,因此会失败

但是有一个简单的解决方法:为类型
null
注册您自己的几何体转换函数

ol.format.TopoJSON.GEOMETRY_READERS_[null] = function(object, scale, translate){
  // convert into dummy point
  return new ol.geom.Point([0,0]);
}

对于想要上述代码的工作示例的人,请检查此处:
ol.format.TopoJSON.GEOMETRY_READERS_[null] = function(object, scale, translate){
  // convert into dummy point
  return new ol.geom.Point([0,0]);
}