這段時間一直在研究這個問題,今天終于是解決了,受到了很多人的幫助,不然可能還要很久才能摸索出方法。
在開始之前,我們假設(shè)你已經(jīng)知道了cesium的最基礎(chǔ)的使用方法,比如下載cesium,啟動cesium等。
好了,步入正題。首先你除了需要準(zhǔn)備cesium的那些源碼文件外還需要:1、相應(yīng)的osgb文件和dwg文件(本篇文章以這種為例)。2、Qgis軟件。3、cesiumlab。4、arcmap軟件。
分為兩個部分進(jìn)行操作:
1、對dwg文件的處理:
使用你的arcmap打開dwg文件,將dwg格式轉(zhuǎn)換為shp文件(方法為:選中文件->右鍵->數(shù)據(jù)->導(dǎo)出數(shù)據(jù))。將導(dǎo)出的shp文件加載進(jìn)arcmap,此時你需要知道你要轉(zhuǎn)換的文件的初始坐標(biāo)系,我這里是CGCS2000 114E,于是將導(dǎo)入的shp文件定義投影為CGCS2000 114E,之后再使用工具箱中的投影,將該shp文件的投影修改為wgs 84(因為cesium的默認(rèn)坐標(biāo)系使它,如果你不想自己之后的json文件出現(xiàn)一些奇奇怪怪的問題,轉(zhuǎn)它就對了)。
轉(zhuǎn)換完成后,此時記得查看你的arcmap的右下角,看看數(shù)字是多大,如果還是很大的數(shù)字(上萬的那種),說明你只是定義了坐標(biāo)系但是沒有正確轉(zhuǎn)換,此時如果你用這個數(shù)據(jù)進(jìn)行后續(xù)的操作,你的cesium的結(jié)果應(yīng)該是這樣的。
如果正確轉(zhuǎn)換(很明顯的是地理經(jīng)緯度),那么此時記得查看你的shp的屬性,看看有沒有這個ZM,如果有的話,就需要先將三維的矢量數(shù)據(jù)轉(zhuǎn)換成二維的,再進(jìn)行下一步的操作。
?
?三維轉(zhuǎn)二維方法:1、打開arcmap菜單欄地理處理->環(huán)境->將M值和Z值都調(diào)整為Disabled,保存。2、打開工具欄,選擇要素轉(zhuǎn)為shapefile,不要像上文一樣使用數(shù)據(jù)導(dǎo)出。
?
?導(dǎo)出后發(fā)現(xiàn)ZM不見了就說明已經(jīng)轉(zhuǎn)換成功。
此時打開Qgis軟件,將剛剛處理完成的shp文件加載進(jìn)去,按照圖片方法選擇,之后選擇格式為Geojson,直接進(jìn)行導(dǎo)出即可。
?
導(dǎo)出數(shù)據(jù)后,記得刪除掉geojson中的name和crs屬性,然后將geojson的后綴名直接改為json,就可以在cesium的代碼中調(diào)用了。
好了,到此第一部分完成,下面開始第二部分。
2、對osgb文件進(jìn)行處理:
打開你下載好的cesiumlab(下載地址:Cesium實驗室官網(wǎng)),首頁的下載點擊即可,下載后完成安裝。之后打開cesiumlab,注冊一個賬號,就會進(jìn)入到該頁面。
點擊上圖中紅色框(傾斜模型切片),選擇你的文件,設(shè)置參數(shù),注意將存儲類型改為散列。然后點擊開始轉(zhuǎn)換,接下來就靜靜等待轉(zhuǎn)換即可。
轉(zhuǎn)換成功之后就會發(fā)現(xiàn)你的輸出路徑中存在一個tileset.json文件,這個就是你到使用cessium時url指向的文件。
完成上述兩步之后,就可以使用cesium進(jìn)行加載了。
附上加載的代碼:文章來源:http://www.zghlxwxcb.cn/news/detail-402135.html
// 這個就是你通過Qgis轉(zhuǎn)換出來的geojson文件
function load_shp3d() {
? var tileset = viewer.dataSources.add(Cesium.GeoJsonDataSource.load('xxx.json', {
? ? fill: Cesium.Color.PINK.withAlpha(0.5),
? ? clampToGround: true // 疊加就用它
? }))
? ?viewer.zoomTo(tileset); // 定位到你的數(shù)據(jù)
? ?viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) {
? ? e.cancel = true;
? ? viewer.zoomTo(tileset); // 重寫homebutton
? })
}
// 這個是你通過cessiumlab轉(zhuǎn)化的osgb文件
function load_tileset() {
? var tileset = new Cesium.Cesium3DTileset({ url: 'xxx.json' })
? viewer.scene.primitives.add(tileset);
? viewer.zoomTo(tileset); ?// 在初始化時定位至模型位置
? viewer.homeButton.viewModel.command.beforeExecute.addEventListener(function (e) {
? ? e.cancel = true;
? ? viewer.zoomTo(tileset);
? });
}
最后,為了防止Qgis下載速度慢,將我的Qgis安裝包分享給大家:鏈接:https://pan.baidu.com/s/1giG5jQxlcVZN1b8GiMWaUg?pwd=bsds?
提取碼:bsds文章來源地址http://www.zghlxwxcb.cn/news/detail-402135.html
到了這里,關(guān)于cesium加載3dtile并將geojson進(jìn)行疊加(保姆級教程)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!