Провайдер геосервера Terrain отображает шипы и вырезанное изображение

Я играю с cesiumjs и GeoServer. Я следовал ридми из этого репозитория GitHub — kaktus40/Cesium-GeoserverTerrainProvider: плагин для использования GeoServer в качестве поставщика ландшафта и возможности обслуживать данные из GeoServer в цезий, единственная проблема, с которой я сталкиваюсь, — это края шипов на изображении и черные промежутки между ними. плитка.
Вы можете увидеть на этом изображении https://ibb.co/yR9Jpr9

Я использовал этот сайт https://srtm.csi.cgiar.org/ для загрузки данных SRTM.

Я сделал из него пирамиду с помощью gdal_relite.py и загрузил с помощью плагина imagePyramid.
И я добавил плагин bil для GeoServer и сделал кодировку по умолчанию application/bil16.

Пример кода, который я использую

      
    const terrainProvider = new Cesium.GeoserverTerrainProvider({
    service: ‘WMS’,
    url: ‘http://localhost:8080/geoserver/elevation/wms’,
    layerName: ‘newp’,
    xml: ‘http://localhost:8080/geoserver/elevation/wms?SERVICE=WMS&REQUEST=GetCapabilities&tiled=true’,
    heightMapWidth: 64,
    heightMapHeight: 64,
    offset: 0,
    highest: 12000,
    lowest: -500,
    hasStyledImage: false,
    waterMask: false,
    maxLevel: 11,
    formatImage: { format: ‘image/png’, extension: ‘png’ },
    formatArray: {
    format: ‘image/bil’,
    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;
    },
    },
    });

Кто-нибудь знает, как я могу решить эту проблему?

0 ответов

Другие вопросы по тегам