cesium+ geoserverTerrainProvide+png展示3D高程图展示
一、发布png到geoserver的imagepyramid
// translate png to tif epsg:4326 File png = new File(pngPathStr); BufferedImage sourcePng = ImageIO.read(new FileInputStream(png)); int pngWidth = sourcePng.getWidth(); int pngHeight = sourcePng.getHeight(); String outGeoTiffFormTransName = pngPathStr + "out.tif"; String comdTransPngToGTifWith4326 = "gdal_translate -a_srs EPSG:4326 -gcp 0 0 "+ west +" "+ north +" -gcp " + pngWidth + " 0 "+ east +" "+ north +" -gcp "+ pngWidth +" " + pngHeight +" " + east +" "+ south +" "+ pngPathStr +" "+ outGeoTiffFormTransName; //gdal_translate -a_srs EPSG:4326 -gcp 0 0 -90 0 -gcp 256 0 -45 0 -gcp 256 256 -45 45 Lena.tif Lean.tiff System.out.println(comdTransPngToGTifWith4326); Process process1 = Runtime.getRuntime().exec(comdTransPngToGTifWith4326); process1.waitFor(); process1.destroy(); //warp tif to geotiff epsg:4326 String warpGeotiffName = outGeoTiffFormTransName + "warp.tiff"; String comdWarpGEOtiff = "gdalwarp -s_srs EPSG:4326 -t_srs EPSG:4326 " + outGeoTiffFormTransName +" "+ warpGeotiffName; //gdalwarp -s_srs EPSG:4326 -t_srs EPSG:4326 Lean.tiff System.out.println(comdWarpGEOtiff); Process process2 = Runtime.getRuntime().exec(comdWarpGEOtiff); process2.waitFor(); process2.destroy(); //retile geoTiff in 4 level String cutPngDirName = pngPathStr.substring(0, pngPathStr.lastIndexOf(".")); String addCutTiffDirCmd = "mkdir " +cutPngDirName; Process process3 = Runtime.getRuntime().exec(addCutTiffDirCmd); process3.waitFor(); process3.destroy(); String retileGeotiffCmd = "gdal_retile.py -v -r bilinear -levels 4 -ps 2048 2048 -co \"TILED=YES\" -targetDir "+ cutPngDirName +" "+warpGeotiffName; //gdal_retile.py -v -r bilinear -levels 4 -ps 2048 2048 -co "TILED=YES" -targetDir lean LEAN.tiff Process process4 = Runtime.getRuntime().exec(retileGeotiffCmd); process4.waitFor(); process4.destroy(); //use geoserver restapi to add a workspace String curlAddWorkSpanceCmd = "curl -v -u admin:geoserver -XPOST -H \"content-type: text/xml\" -d \"<workspace><name>toby</name></workspace>\" \"http://127.0.0.1:8090/geoserver/rest/workspaces\""; //curl -v -u admin geoserver -XPOST -H "content-type: text/xml" -d "<workspace><name>toby</name></workspace>" "http://127.0.0.1:8090/geoserver/rest/workspaces" Process process5 = Runtime.getRuntime().exec(curlAddWorkSpanceCmd); process5.waitFor(); process5.destroy(); //add a imagepyramid WMS String addImagepyramidCmd = "curl -v -u admin:geoserver -XPUT -H \"Context-type: text/plain\" -d \""+ cutPngDirName +"\" \"http://localhost:8090/geoserver/rest/workspaces/toby/coveragestores/poly-incremental/external.imagepyramid\""; //curl -v -u admin:geoserver -XPUT -H "Context-type: text/plain" -d "file:/home/xschen/Downloads/lean" "http://localhost:8090/geoserver/rest/workspaces/toby/coveragestores/poly-incremental/external.imagepyramid" Process process6 = Runtime.getRuntime().exec(addImagepyramidCmd); process6.waitFor(); process6.destroy();
二、前台的geoserverTerrainProvider配置使用
var terrainProvider = new Cesium.GeoserverTerrainProvider({ service: "WMS", url : "http://127.0.0.1:8888/geoserver/kjtest/wms",//上面java中得到的WMSurl layerName: "gt30e100n40",//上面java中的cutPngDirName //layerName: "lean", heightMapWidth: 65, heightMapHeight: 65, offset: 0, highest: 40000, hasStyledImage: true, waterMask: true, cesiumViewer: viewer, 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) { 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); console.log(resultat); } return resultat; } } }); viewer.terrainProvider = terrainProvider;
或者使用cesium的
new Cesium.WebMapServiceImageryProvider({ url: geoserverWMSurl,//?号之前 layers: workspace:layerName//工作空间 : 发布图层的名称 });
最后使用nginx解决跨域问题。
nginx.config的配置信息如下:
# For more information on configuration, see: # * Official English Documentation: http://nginx.org/en/docs/ # * Official Russian Documentation: http://nginx.org/ru/docs/ user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; # Load modular configuration files from the /etc/nginx/conf.d directory. # See http://nginx.org/en/docs/ngx_core_module.html#include # for more information. include /etc/nginx/conf.d/*.conf; server { listen 80 default_server; listen [::]:80 default_server; listen 8888; server_name _; root /usr/share/nginx/html; # Load configuration files for the default server block. include /etc/nginx/default.d/*.conf; location ^~/em { proxy_pass http://127.0.0.1:8081/em; proxy_set_header Host $host:8888; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location ^~/demWordData { proxy_pass http://127.0.0.1:8080/demWordData; proxy_set_header Host $host:8888; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } error_page 404 /404.html; location = /40x.html { } error_page 500 502 503 504 /50x.html; location = /50x.html { } } # Settings for a TLS enabled server. # # server { # listen 443 ssl; # listen [::]:443 ssl; # server_name _; # root /usr/share/nginx/html; # # ssl_certificate "/etc/pki/nginx/server.crt"; # ssl_certificate_key "/etc/pki/nginx/private/server.key"; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 10m; # ssl_ciphers PROFILE=SYSTEM; # ssl_prefer_server_ciphers on; # # # Load configuration files for the default server block. # include /etc/nginx/default.d/*.conf; # # location / { # } # # error_page 404 /404.html; # location = /40x.html { # } # # error_page 500 502 503 504 /50x.html; # location = /50x.html { # } # } }
欢迎大家来我的新家看一看 3wwang个人博客-记录走过的技术之路
posted on 2016-09-18 17:27 jie_er的种码园子 阅读(6241) 评论(0) 编辑 收藏 举报