最近再做緩沖區的繪制,然后在網上各種查資料,最后決定用turf來實現;
剛開始這樣寫的,然后不出現緩沖區
var line = turf.lineString([[8940117.74537665,5936319.233970245],[10407708.688452033,5740640.441560194],[10466412.326175049,5359066.796360594]]); var buffered = turf.buffer(line , val, {units: 'kilometers'}); //創建數據geojson對象和數據源對象 var format = new GeoJSON(); var source = new VectorSource({ wrapX: false }); // //讀取geojson數據 var lineFeature = format.readFeature(line); var bufferFeature = format.readFeature(buffered); // //將數據添加數據源的 source.addFeature(lineFeature); source.addFeature(bufferFeature); var test = new VectorLayer({ source: source }) this.map.addLayer(test)
並且還如下得錯誤

然后開始在網上查資料后,知道turf緩沖區不能用EPSG:3857的坐標系,需要轉成EPSG:4326(關於坐標系不清楚得,可以看
這里)
然后我轉過后再試驗
let coordinates = '[[8940117.74537665,5936319.233970245],[10407708.688452033,5740640.441560194],[10466412.326175049,5359066.796360594]]'; let bufferCoordinates = [],pointTransform=[]; for (var i = 0; i < coordinates.length; i++) { pointTransform = transform(coordinates[i], "EPSG:3857", "EPSG:4326"); bufferCoordinates.push(pointTransform); } var line = turf.lineString(bufferCoordinates); var buffered = turf.buffer(line , val, {units: 'kilometers'}); //創建數據geojson對象和數據源對象 var format = new GeoJSON(); var source = new VectorSource({ wrapX: false }); // //讀取geojson數據 var lineFeature = format.readFeature(line); var bufferFeature = format.readFeature(buffered); // //將數據添加數據源的 source.addFeature(lineFeature); source.addFeature(bufferFeature); var test = new VectorLayer({ source: source }) this.map.addLayer(test)
到了這里發現雖然不報錯了,但是結果還是不出來,然后這樣看來代碼沒問題,我這個時候就開始寫
demo,然后在demo中查看發現運行是沒問題得;
那就奇了怪了,到底是哪里還有問題,最后又看了一遍官方文檔,然后加上了以下兩行代碼
lineFeature.getGeometry().transform('EPSG:4326', 'EPSG:3857');
bufferFeature.getGeometry().transform('EPSG:4326', 'EPSG:3857');
再次運行,成功出現緩沖區: