Cesium中将wkt数据转化为geoJSON格式后渲染至地球上

Cesium中将wkt数据转化为geoJSON格式后渲染至地球上,第1张

实现目标:点击显示按钮,调用后端传递来的接口接收wkt数据,在vscode中将wkt数据转化为geoJSON格式,并渲染至地球上。点击关闭按钮,渲染效果移除。

实现方法:

一.调用后端接口

1.后端Swagger中:

2.api的js文件中:

export function getAllData() {
    return request({
        url: '/xxxx/xxxx/all',
        method: 'get',
    });
}

3.vue文件中:

import { getAllDemolition } from '@/api/xxxx/xxxx.js'
// 点击显示按钮处,该按钮再次点击变成关闭
openAdd() {
			this.showAll = !this.showAll
			if (this.showAll == true) {
				getAllData().then((res) => {
					if (res.data.code == 200) {
					}
				})
			} 
		}

二、将后端传来的wkt数据转化为GeoJSON并渲染至地球上

1.vue文件中:在接口调用处,直接将传来的数据传递给js中的方法,前提是已引入js中的方法

import { addGeoJson, removeGeoJson } from '@/earth/xxxx/xxxx.js'
openAdd() {
			this.showAll = !this.showAll
			if (this.showAll == true) {
				getAllData().then((res) => {
					if (res.data.code == 200) {
						addGeoJSON(res.data.data)
					}
				})
			} else {
				removeGeoJson() // 移除渲染效果
			}
		}

2.写数据转换及渲染的js文件中:

import * as turf from '@turf/turf'
let WKT = require('terraformer-wkt-parser'); // 需安装

// let geojson = WKT.parse('LINESTRING (30 10, 10 30, 40 40)');
let addGeoJsonData = []
let labelsData = [];



function addGeoJSON(arr) {
    arr.forEach(item => {
        if (item.geo) {
            let geo = WKT.parse(item.geo)
                // let center = turf.pointOnFeature(geo).geometry.coordinates; // 找中心点
            switch (item.status) {
                case 'XXX':
                    addGeoJson(geo, '#ead980')
                    break
                case 'XXXX':
                    addGeoJson(geo, '#eef237')
                    break
            }
        }

    })

}

function addGeoJson(urlStr, colorStr, callback) {
    let entity = null
    if (!urlStr) return
    Cesium.GeoJsonDataSource.load(urlStr).then((dataSource) => {
        let color = Cesium.Color.fromCssColorString(colorStr).withAlpha(0.7)
        for (let i = 0; i < dataSource.entities.values.length; ++i) {
            entity = dataSource.entities.values[i]

            if (entity) {
                // 形状总体
                if (entity._polygon) {
                    entity._polygon = new Cesium.PolygonGraphics({
                        hierarchy: entity._polygon._hierarchy._value,
                        outline: false,
                        material: color,
                        classificationType: Cesium.ClassificationType.TERRAIN,
                        zIndex: 10,
                        outlineColor: color,
                        outlineWidth: 2,
                        extrudedHeight: 10,
                        show: true
                    })
                }

                // if (entity._polyline) {
                //     entity._polyline = new Cesium.PolylineGraphics({
                //         positions: entity._polyline._positions,
                //         width: 2,
                //         material: color,
                //         clampToGround: true,
                //         classificationType: Cesium.ClassificationType.TERRAIN,
                //         show: true
                //     })
                // }
            }
            entity.cursor = true
        }
        addGeoJsonData.push(dataSource)
        viewer.dataSources.add(dataSource)
        callback(dataSource.entities.values)
    })
}

// 清除拆迁数据
function removeGeoJson() {
    for (let i = 0; i < addGeoJsonData.length; ++i) {
        viewer.dataSources.remove(addGeoJsonData[i])
    }
    addGeoJsonData.length = 0
    addGeoJsonData = []
    for (let j = 0; j < labelsData.length; j++) {
        viewer.entities.remove(labelsData[j])
    }
    labelsData = []
}

export {addGeoJson, removeGeoJson }

 这样就实现了上述目标。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/946791.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-18
下一篇 2022-05-18

发表评论

登录后才能评论

评论列表(0条)

保存