问题描述:
基于ContextCapture建模生成三维模型,导出Cesium 3D Tiles和B3DM格式后,有时因文件较大,上传服务过慢,想先在本地查看模型情况。但经常会在本地浏览器中查看的过程中出现以下报错。
报错类型1:An eror occurred while rendering.Rendering has stopped. (直接出现报错,渲染停止,拒绝访问)
报错类型2:Please be patient while ContextCapture Web Viewer 2.0 is being loaded. (一直处于加载状态中,无法加载出来)
出现以上两种问题,都是Cesium 3D Tiles和B3DM文件在本地查看过程中,其文件夹内的前端文件无法运行,导致的无法访问查看。解决思路也较为简单,通过在本地部署一个nginx或node.js即可实现本地查看。
解决方法:
本方法为在本地部署nginx解决倾斜摄影模型本地查看报错的问题。nginx具有开箱即用,承载能力强,使用方便的优点,因此十分适合用于本地查看倾斜摄影模型。
1、在nginx官网中下载nginx的windows版本,下载地址如下:http://nginx.org/en/download.html
2、解压下载后的nginx文件,放到电脑磁盘中(除C盘以外其他盘)。在nginx文件夹中,找到conf文件夹,修改里面的nginx.conf配置文件。
修改nginx.conf文件,可直接使用以下内容替换。
#user nobody;
worker_processes 2; #nginx进程数,一般根据CPU核数配置。查看倾斜摄影模型,2-4核左右即可,主要是吃内存和显卡。
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80; #默认监听端口,如果出现启动nginx.exe无法启动,可通过\nginx-1.15.3\logs\error.log查看是否端口占用,可能是IIS占用了80端口,则将此端口修改为任意端口,如8999
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
upstream localserver {
server 127.0.0.1:8080;
}
server {
listen 8000; #访问端口
server_name localserver;
root D:\KIWI\Production_3; #倾斜摄影模型存放目录,配置时需修改为对应文件目录
location / {
index index.html index.htm;
}
}
}
4.修改完成后,点击nginx.exe运行,在任务管理器中可以看到nginx.exe运行进程。(如关闭,则从任务管理器中直接杀进程,也可写脚本关闭)
5.在浏览器中输入以下地址即可访问倾斜摄影模型。
老版CC生成的B3DM格式访问:http://localhost:8000/App_cesium/index.html
新版CC生成的B3DM格式访问:http://localhost:8000/App_CCWebViewer2/index.html
此方法也可应用到倾斜摄影模型在线查看,将nginx和数据部署到云服务器中,即可实现模型在线浏览。如系统调用的话,则可以通过cesium.js去调用。