1

私のチームと私は Cesium GeoserverTerrainProvider プラグインを使用していますが、数値標高モデルが読み込まれると正しく表示されません:

  • 「styled」画像形式または「bil/dds」プラグインを使用すると、2 つの地形タイルが結合している場所で、地形の高度値に鋭いカットがほとんどありません。

  • 「変換された」画像形式(下記参照)を使用すると、地形に高度のピークがあります

理解を深めるために、次のリンクを参照してください: http://matteodipaolo.bitbucket.org/Geoserver/ 左上のボタンを使用すると、地形を (3 つの形式のいずれかで - 以下を参照) タイルを分割しながら読み込むことができます。スペインの関心のある地域に描かれた白い線で強調されています。

デジタル標高モデル データを操作および表示するためにたどる手順は、次のとおりです。

ソース データ: スペイン地理研究所の DEM データを使用します。

解像度 5 m の数値標高モデルを使用しています。ファイル形式は ESRI ASCII グリッド (asc) です。対応するゾーンでの測地基準系 ETRS89 UTM 投影。

データ処理: GDAL を使用して、関心のある領域の 2 つの ASC を処理しています。

元の ASC ファイルを 1 つの GeoTIFF にマージし、内部タイル、圧縮、および NODATA 値の割り当てを行います。

gdal_merge.py -o merged.tif -co "TILED=YES" -co "BLOCKXSIZE=512" -co "BLOCKYSIZE=512" -   co "COMPRESS=DEFLATE" -co "ZLEVEL=9" -init -999 -a_nodata -999 -n -999 -ot Int16 MDT05-1002-H30.asc MDT05-1003-H30.asc

正しい CRS を割り当てます。

gdal_translate -a_srs "EPSG:25830" -co "TILED=YES" -co "BLOCKXSIZE=512" -co "BLOCKYSIZE=512" -co "COMPRESS=DEFLATE" -co "ZLEVEL=9" merged.tif merged_CRS.tif

概要を作成します

gdaladdo -r nearest --config COMPRESS_OVERVIEW DEFLATE --config GDAL_TIFF_OVR_BLOCKSIZE 512 merged_CRS.tif 2 4 8 16 32 64

5 レベルのピラミッドを作成します

gdal_retile.py -v -r bilinear -levels 5 -ps 1024 1024 -co "TILED=YES" -co "BLOCKXSIZE=512" -co "BLOCKYSIZE=512" -co "COMPRESS=DEFLATE" -co "ZLEVEL=9" -targetDir pyramid/ merged_CRS.tif

Geoserver での提供: BIL/DDS プラグインを使用して、https : //github.com/kaktus40/Cesium-GeoserverTerrainProvider の指示に従いました。

Cesium および Javascript コード: viewer.scene.globe に新しい Terrain Provider を設定し、geoserver プラグインでサポートされている画像形式から選択できるようにしました。

1) スタイル:

var terrainProvider = new Cesium.GeoserverTerrainProvider({
            service: "WMS", 
            url : "http://geoserver.deimos-space.com/geoserver/elevation/wms",            
            xml: "http://geoserver.deimos-space.com/geoserver/elevation/wms?SERVICE=WMS&REQUEST=GetCapabilities&tiled=true",
            layerName: "IGN_22_July_DEM_Pyramid_Transparent_Int16",                               
            styleName: "mySLD",
            hasStyledImage: true,
            formatImage: {format : "image/png",extension: "png"},
            formatArray: {
                format : "image/bil",
                /**
                * bufferIn : buffer to process (switch byte order and check the data limitations)
                * size: defines the dimension of the array (size.height* size.width cells)
                * highest: defines the highest altitude (without offset) of the data. 
                * lowest: defines the lowest altitude (without offset) of the data. 
                * offset: defines the offset of the data in order to adjust the limitations
                */
                postProcessArray : function(bufferIn, size,highest,lowest,offset) {
                    var resultat;
                    var viewerIn = new DataView(bufferIn);
                    var littleEndianBuffer = new ArrayBuffer(size.height * size.width * 2);
                    var viewerOut = new DataView(littleEndianBuffer);
                    if (littleEndianBuffer.byteLength === bufferIn.byteLength) {
                        // time to switch bytes!!
                        var temp, goodCell = 0, somme = 0;
                        for (var i = 0; i < littleEndianBuffer.byteLength; i += 2) {
                            temp = viewerIn.getInt16(i, false)-offset;
                            if (temp > lowest && temp < highest) {
                                viewerOut.setInt16(i, temp, true);
                                somme += temp;
                                goodCell++;
                            } else {
                                var val = (goodCell == 0 ? 1 : somme / goodCell);
                                viewerOut.setInt16(i, val, true);
                            }
                        }
                        resultat = new Int16Array(littleEndianBuffer);
                    }
                    return resultat;
                }
            }               
});

2) 変換:

var terrainProvider = new Cesium.GeoserverTerrainProvider({
            service: "WMS", 
            url : "http://geoserver.deimos-space.com/geoserver/elevation/wms",            
            xml: "http://geoserver.deimos-space.com/geoserver/elevation/wms?SERVICE=WMS&REQUEST=GetCapabilities&tiled=true",
            layerName: "IGN_22_July_DEM_pyramid_Transparent_Converted",
            hasStyledImage: false,         
            formatImage: {format : "image/png",extension: "png"},
            formatArray: {
                format : "image/bil",
                /**
                * bufferIn : buffer to process (switch byte order and check the data limitations)
                * size: defines the dimension of the array (size.height* size.width cells)
                * highest: defines the highest altitude (without offset) of the data. 
                * lowest: defines the lowest altitude (without offset) of the data. 
                * offset: defines the offset of the data in order to adjust the limitations
                */
                postProcessArray : function(bufferIn, size,highest,lowest,offset) {
                    var resultat;
                    var viewerIn = new DataView(bufferIn);
                    var littleEndianBuffer = new ArrayBuffer(size.height * size.width * 2);
                    var viewerOut = new DataView(littleEndianBuffer);
                    if (littleEndianBuffer.byteLength === bufferIn.byteLength) {
                        // time to switch bytes!!
                        var temp, goodCell = 0, somme = 0;
                        for (var i = 0; i < littleEndianBuffer.byteLength; i += 2) {
                            temp = viewerIn.getInt16(i, false)-offset;
                            if (temp > lowest && temp < highest) {
                                viewerOut.setInt16(i, temp, true);
                                somme += temp;
                                goodCell++;
                            } else {
                                var val = (goodCell == 0 ? 1 : somme / goodCell);
                                viewerOut.setInt16(i, val, true);
                            }
                        }
                        resultat = new Int16Array(littleEndianBuffer);
                    }
                    return resultat;
                }
            }               
});

3) BIL/DDS:

var terrainProvider = new Cesium.GeoserverTerrainProvider({
            service: "WMS", 
            url : "http://geoserver.deimos-space.com/geoserver/elevation/wms",            
            xml: "http://geoserver.deimos-space.com/geoserver/elevation/wms?SERVICE=WMS&REQUEST=GetCapabilities&tiled=true",
            layerName: "IGN_22_July_DEM_Pyramid_Transparent_Int16",     
            hasStyledImage: false,      
 });
4

3 に答える 3

0

セシウムSDkは初めてですが、使用例から:セシウム地形プロバイダーUsgae

そして例:セシウム地形プロバイダーの例

ファイル名(mySLD.Xml )ではなく、 mySLD.xmlの StyleName プロパティに StyleName プロパティを提供していることに気付きました。代わりに( Style FileName ) を使用したので、ファイル名自体ではなく、ファイルの StyleName を使用してみてください。

var terrainProvider = new Cesium.GeoserverTerrainProvider({
    url : "http://localhost:8080/geoserver/elevation/wms",
    layerName: "SRTM90",
    styleName:"grayToColor",
    waterMask:true
});

あなたのコードで:

styleName:"mySLD"

しかし、例では:

styleName:"grayToColor"

私はそれがとても些細なことだと知っていますが、それが役立つかもしれません.

于 2015-01-10T12:15:33.260 に答える
0

私の問題を解決したので、gdalコマンドを使用してみてください(あなたと同じ):

gdalwarp -ot Int16 -s_srs "EPSG:2154" -t_srs "EPSG:4326" -dstnodata -32762 -r cubicspline -multi -co "TILED=YES" -co "COMPRESS=DEFLATE" -co "ZLEVEL=6" *.asc outFolder/gray.tif

gdal_retile.py -v -r bilinear -levels 3 -ps 2048 2048 -ot Int16 -co "TILED=YES" -co "COMPRESS=DEFLATE" -co "ZLEVEL=6" -targetDir pyramidFolder outFolder/gray.tif

詳細については、 https://groups.google.com/d/msg/cesium-dev/6aR35AuZ0mM/mVWaeKsPqg8Jを参照してください。

于 2015-02-02T10:26:01.843 に答える