topojson数据无法在openlayers中呈现

时间:2018-04-05 13:36:44

标签: openlayers openlayers-3 topojson

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

我使用https://github.com/deldersveld/topojson/tree/master/continents

中的topojson文件

当我画南美时,它确实有效:

https://codepen.io/pixelatorz/pen/LdJwzQ?&editors=1010

var raster = new ol.layer.Tile({
  source: new ol.source.TileJSON({
    url: 'https://api.tiles.mapbox.com/v3/mapbox.world-dark.json?secure'
  })
});

var style = new ol.style.Style({
  fill: new ol.style.Fill({
    color: 'rgba(255, 255, 255, 0.6)'
  }),
  stroke: new ol.style.Stroke({
    color: '#319FD3',
    width: 1
  })
});

var vector = new ol.layer.Vector({
  source: new ol.source.Vector({
    url: 'https://raw.githubusercontent.com/deldersveld/topojson/master/continents/south-america.json',
    format: new ol.format.TopoJSON(),
    overlaps: false
  }),
  style: style
});

var map = new ol.Map({
  layers: [raster, vector],
  target: 'map',
  view: new ol.View({
    center: [0, 0],
    zoom: 1
  })
});

然而,当我将源网址更改为北美或欧洲的网址时,它不起作用,例如大洋洲就可以工作

例如: https://codepen.io/pixelatorz/pen/MVqqqJ?editors=1010

我从其他来源测试了一些其他topojson文件,有些人确实得到了其他人的胜利,但是我没有看到文件之间的差异,也无法找到问题所在。

1 个答案:

答案 0 :(得分:1)

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

  

VM1668 ol-debug.js:52808 Uncaught TypeError:geometryReader不是函数

     

在Function.ol.format.TopoJSON.readFeatureFromGeometry_(VM52 ol-debug.js:52808)

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

正如您在OL TopoJson format source code中看到的那样,它会尝试使用list of geometryReaders将其转换为几何体。由于几何类型null没有读取器,因此失败。

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

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