简介:VIEWGIS3.0企业版(增强版)是一套面向地理信息相关生产、教学与科研场景的综合性GIS平台,由北京资信电子技术开发公司自主研发,集遥感、地理信息系统、全球定位系统及多媒体技术于一体,适合政府办公、市政建设、农林水利、交通规划、资源环境等领域的从业者与师生使用。资源包共691个文件,以455个gif界面素材、220个html帮助与功能页面为主,另含exe可执行程序、dll动态库、ghl配置及mnu菜单等,压缩包约5.28MB,下载后可直接运行,需注意html文件夹与Progress.dll不可删除或移动。目前已有989人学习关注。该软件经过多省市500余家用户长期使用,能辅助解决生产、管理与规划中的实际问题,读者可借此快速搭建地理信息处理环境,了解平台功能模块与操作逻辑,为教学演示、课题研究及项目应用提供参考。
1. 从一张厂区管网图说起:VIEWGIS3.0企业版到底在解决什么
很多做企业级 GIS 的同行都遇到过这种场景:某公司要做一套覆盖多个厂区的管网与设备管理系统,底图是 CAD 总平面图,业务数据散在 Excel 和几张业务表里,领导要的是「打开浏览器就能看、能查、能改、能出图」。这时候你需要的不是一张静态地图,而是一套能承载图层、属性、权限、发布的企业级 GIS 平台。VIEWGIS3.0企业版(增强版)就是冲着这类需求来的——它把桌面端的编辑能力、服务端的发布能力和 Web 端的浏览查询能力打包在一起,面向的是园区、厂区、市政配套这类「有底图、有台账、有权限分级」的落地场景。适合谁?适合手里有 CAD 或 Shapefile 数据、需要快速搭出一套内网可用的 GIS 应用、又不想从零写地图引擎的团队。这一章先把它的定位讲清楚,后面几章再拆部署、数据、发布和踩坑。
2. 部署前先想清楚:VIEWGIS3.0企业版的架构与选型逻辑
2.1 企业版和普通版的差别到底在哪
很多人拿到安装包第一反应是「装哪个版本」。VIEWGIS3.0企业版(增强版)和普通版最核心的差别不在界面,而在三件事:并发承载、权限模型、服务发布。普通版通常面向单机或小团队,图层和数据放在本地文件里,谁打开谁用;企业版则要求有一个独立的服务端进程常驻,Web 端通过服务地址访问,数据落在数据库或服务端管理的空间数据源里。增强版一般会在普通企业版基础上补上更细的权限粒度(比如按图层、按字段、按操作类型授权)和更完整的服务接口。
选型时我一般按三个问题判断:第一,用户数是否超过 20 个并发;第二,是否需要按部门或角色控制「谁能看哪一层、谁能改哪些字段」;第三,是否需要把地图能力以服务形式提供给其他系统调用。三个里有两个是「是」,就上企业版;如果只是几个人看一张图,普通版足够,硬上企业版反而增加运维负担。
2.2 部署拓扑:单机、双机还是分离部署
VIEWGIS3.0企业版的部署拓扑常见有三种,选哪种取决于数据量和并发。
| 拓扑 | 适用场景 | 服务端 | 数据库 | 空间数据 |
|---|---|---|---|---|
| 单机部署 | 测试、小规模内网 | 本机 | 本机 | 本机文件 |
| 双机部署 | 生产、中等并发 | 独立服务器 | 独立服务器 | 数据库内 |
| 分离部署 | 高并发、多应用 | 多节点 | 集群 | 独立空间库 |
单机部署最省事,安装包一路下一步,服务端和数据库都在同一台机器,适合先跑通流程。双机部署是把服务端和数据库拆开,好处是数据库可以单独做备份和调优,服务端重启不影响数据。分离部署一般是有多个业务系统要共用地图服务时才考虑,空间数据单独放一个库,服务端做负载。
我一般建议:第一次落地先用单机部署把数据和服务跑通,确认图层、权限、发布都没问题,再按实际并发迁到双机。直接上分离部署,排错成本会高很多,因为出问题时你分不清是服务端、数据库还是网络的问题。
2.3 环境准备:操作系统、运行时和端口
VIEWGIS3.0企业版服务端常见做法是跑在 Windows Server 或主流 Linux 发行版上,依赖一个运行时环境和数据库客户端。下面以 Linux 为例,列出部署前要确认的几项。
# 检查操作系统版本,确认在支持列表内 cat /etc/os-release # 检查运行时环境是否已安装(以常见运行时为例) runtime --version # 检查数据库客户端能否连通 dbclient -h 127.0.0.1 -P 5432 -U gisuser -d gisdb -c "select 1;" # 检查服务端口是否被占用,VIEWGIS 服务端默认常用 8080 和 9090 ss -lntp | grep -E '8080|9090'这几条命令的作用分别是:确认系统版本避免装到不支持的环境;确认运行时版本满足安装包要求;确认数据库账号密码和网络通;确认服务端口没被别的进程占。参数上,-h是数据库地址,-P是端口,-U是用户名,-d是库名。如果ss那条命令有输出,说明端口被占,要么改 VIEWGIS 的端口配置,要么先停掉占用进程。
注意:端口占用是最常见的「装完起不来」原因,装之前先查一遍,比装完再排查省事得多。
2.4 安装与首次启动:按顺序做,别跳步
安装顺序我一般固定为:先装数据库客户端和运行时,再装服务端,最后装 Web 端资源。服务端安装时会让填数据库连接信息和管理员账号,这两项要提前准备好。
# 进入安装包目录 cd /opt/viewgis-installer # 执行安装脚本,按提示输入数据库连接和管理员密码 ./install.sh --mode server --db-host 127.0.0.1 --db-port 5432 --db-name gisdb # 安装完成后启动服务 systemctl start viewgis-server # 查看服务状态和日志 systemctl status viewgis-server tail -n 100 /opt/viewgis/logs/server.log--mode server表示只装服务端,如果同一台机器还要装 Web 端资源,可以再加--mode web。--db-host这些参数要和实际数据库一致,填错会在启动时报连接失败。启动后先看status,如果是active (running)再去看日志里有没有报错。日志里出现「database connection refused」就是数据库没连上,出现「port already in use」就是端口冲突。
3. 数据是地基:把 CAD、Shapefile 和业务表接进 VIEWGIS3.0
3.1 空间数据入库:从文件到空间库
VIEWGIS3.0企业版要发挥企业级能力,空间数据最好入库,而不是继续放在本地文件里。常见做法是用平台自带的数据导入工具,把 Shapefile 或 CAD 转换后的图层导入空间库。
# 以常见 GIS 库为例,演示把 Shapefile 读出来再写入空间库的思路 import geopandas as gpd from sqlalchemy import create_engine # 读取 Shapefile gdf = gpd.read_file("/data/pipe/pipe_line.shp") # 确认坐标系,VIEWGIS 企业版一般要求统一到项目坐标系 gdf = gdf.to_crs(epsg=3857) # 建立数据库连接,注意替换实际账号密码 engine = create_engine("postgresql://gisuser:password@127.0.0.1:5432/gisdb") # 写入空间表,if_exists='replace' 会覆盖同名表,首次导入可用 gdf.to_postgis("pipe_line", engine, if_exists="replace", index=False)这段代码的逻辑是:读文件、转坐标系、写库。to_crs那一步很关键,如果源数据和项目坐标系不一致,导入后图层会偏移,表现为「图跑到别的地方去了」。if_exists参数要小心,replace会删掉原表重建,生产环境建议先用append或先建好表结构再导入。字段类型上,Shapefile 的字段名有长度限制,导入前最好检查一下有没有被截断。
3.2 CAD 底图处理:炸开、分层、转坐标
厂区项目里 CAD 底图几乎是标配。直接把 DWG 丢进 GIS 通常不行,常见做法是先做三件事:炸开块参照、按图层拆分要素、把坐标转到项目坐标系。
# 用常见 CAD 转换工具把 DWG 转成 DXF,便于后续处理 cadconvert --input plant.dwg --output plant.dxf --explode-blocks # 查看 DXF 里的图层列表,确认要保留哪些层 cadconvert --input plant.dxf --list-layers--explode-blocks是把块参照炸开,否则导入 GIS 后很多要素会变成一个整体,没法单独查询。--list-layers是列出图层,方便你决定哪些层要、哪些层不要。CAD 里常见的「0 层」和「Defpoints」层一般不要导入,前者是临时对象,后者是标注辅助层。
3.3 业务表关联:让图和台账对上
企业版 GIS 的价值在于「图属一体」,也就是点一个管线能弹出它的材质、管径、埋深、所属部门。这要求业务表和空间表有一个能对上的关联字段。
-- 空间表 pipe_line 里有 pipe_code 字段 -- 业务表 pipe_attr 里也有 pipe_code 字段 -- 建立视图,把两者关联起来供 VIEWGIS 发布使用 CREATE VIEW v_pipe_full AS SELECT p.gid, p.geom, p.pipe_code, a.material, a.diameter, a.depth, a.dept FROM pipe_line p LEFT JOIN pipe_attr a ON p.pipe_code = a.pipe_code;这里用LEFT JOIN是为了保证空间表里的要素都保留,即使业务表里没有对应记录。关联字段pipe_code要确保两边类型一致,一边是字符串一边是数字会导致关联不上,表现为「图上有线但弹不出属性」。如果业务表数据量大,记得在pipe_code上建索引。
3.4 图层组织:别把所有东西塞进一层
图层组织直接影响使用体验。我一般按「专业 + 要素类型」分,比如给水管线、给水管点、排水管线、排水管点、设备点、标注层。每个图层单独控制可见性和权限。把所有要素塞进一个层,后期做权限和样式会非常痛苦。
提示:图层命名用英文或拼音,避免中文和特殊字符,部分服务端组件对中文图层名支持不稳定。
4. 服务发布与权限:让不同的人看到不同的图
4.1 发布地图服务:从数据到可访问地址
数据入库后,下一步是在 VIEWGIS3.0企业版里发布服务。常见做法是在管理端新建地图文档,把需要的图层加进去,设置好样式和比例尺,然后发布成服务。
# 用管理端命令行工具发布地图服务(示例) viewgis-admin publish \ --doc /opt/viewgis/docs/plant_map.xml \ --service-name plant_map \ --srs EPSG:3857 \ --min-zoom 10 \ --max-zoom 20--doc是地图文档路径,--service-name是发布后的服务名,Web 端就靠这个名字访问。--srs是坐标系,要和数据一致。--min-zoom和--max-zoom控制缩放范围,设得太宽会导致低级别加载慢,设得太窄用户又看不到全貌。发布后可以用浏览器或接口测试服务是否可访问。
4.2 权限模型:角色、图层、字段三层控制
企业版的权限一般分三层:角色决定能访问哪些功能,图层权限决定能看哪些层,字段权限决定能看哪些属性。配置时按「最小权限」原则,先给角色,再给图层,最后按需开字段。
| 层级 | 控制对象 | 常见配置 |
|---|---|---|
| 角色 | 功能菜单、操作按钮 | 浏览者、编辑者、管理员 |
| 图层 | 图层可见性、可查询性 | 按部门开放对应专业图层 |
| 字段 | 属性字段可见、可编辑 | 敏感字段只读或隐藏 |
配置权限时最容易犯的错是「先给管理员,其他再说」,结果上线后发现所有人都能改数据。建议一开始就建好三个基础角色,编辑权限只给明确需要的人。
4.3 Web 端集成:把地图嵌进业务系统
VIEWGIS3.0企业版的 Web 端一般提供 JavaScript 接口,可以把地图嵌到现有业务系统里。
// 初始化地图,指向已发布的服务 const map = new ViewGIS.Map({ container: 'map-container', service: 'http://127.0.0.1:8080/viewgis/services/plant_map', center: [116.39, 39.9], zoom: 15 }); // 监听图层点击,弹出属性 map.on('layerClick', function (e) { const props = e.feature.properties; showPopup(props.pipe_code, props.material, props.diameter); });container是页面上的容器 id,service是发布的服务地址,center和zoom是初始视野。layerClick是图层点击事件,e.feature.properties里就是属性数据。集成时注意跨域问题,如果业务系统和 GIS 服务不在同一个域,需要在服务端配置允许跨域。
4.4 样式与标注:让图能看懂
样式配置包括颜色、线宽、符号和标注。管线一般按管径或材质分色,设备按类型用不同符号。标注要控制显示比例尺,不然缩小后满屏文字。
// 按管径设置线宽 map.setStyle('pipe_line', { strokeColor: '#1e90ff', strokeWidth: ['interpolate', ['linear'], ['get', 'diameter'], 100, 1, 500, 4] }); // 标注只在 zoom 大于 14 时显示 map.setLabel('pipe_line', { field: 'pipe_code', minZoom: 14, offset: [0, -10] });interpolate是按管径做线性插值,管径 100 时线宽 1,500 时线宽 4。minZoom控制标注出现的最小级别,避免低级别时文字重叠。
5. 避坑与排查:VIEWGIS3.0企业版落地时最容易翻车的地方
5.1 服务启动后 Web 端打不开地图
现象:服务端status显示运行中,但浏览器打开地图页面空白或报错。
原因:常见有三种——服务地址填错、跨域被拦、服务端口没放通。先看浏览器控制台的网络请求,如果是 404,说明服务名或路径不对;如果是跨域错误,说明服务端没配跨域;如果是连接超时,说明端口或防火墙有问题。
解决:核对发布时的--service-name和 Web 端service地址是否一致;在服务端配置里加上允许的跨域来源;检查防火墙是否放通 8080 端口。
5.2 图层偏移,图跑到别的位置
现象:数据导入后,图层位置和底图对不上,整体偏移。
原因:坐标系不一致。CAD 底图常用地方坐标系,Shapefile 可能是 WGS84,导入时没做转换。
解决:导入前统一转成项目坐标系,用to_crs或转换工具处理。已经导入的,重新转换后再导入,不要手动拖拽对齐。
5.3 属性弹窗为空
现象:点要素能弹出窗口,但里面没有属性数据。
原因:空间表和业务表关联字段类型不一致,或者关联字段值有空格、大小写差异。
解决:检查两边字段类型,统一成字符串或数字;用TRIM和LOWER处理值;确认关联字段在业务表里存在。
5.4 并发一高就卡
现象:几个人用没问题,十几个人同时访问就明显变慢。
原因:单机部署下数据库和服务端抢资源;或者空间数据没建索引;或者服务端连接池太小。
解决:迁到双机部署,数据库独立;在空间字段和关联字段上建索引;调大服务端连接池参数。
5.5 权限改了不生效
现象:在管理端改了角色或图层权限,Web 端还是老样子。
原因:权限缓存没刷新,或者用户会话没重新登录。
解决:在管理端执行刷新缓存操作;让用户退出重新登录;确认权限配置保存成功。
6. 进阶技巧:让 VIEWGIS3.0企业版跑得更稳的几个习惯
第一个习惯是「先小后大」。不管项目多急,先用一个厂区、一层管线、一个角色跑通全流程,确认数据、服务、权限、Web 端都没问题,再批量导入和开放。我见过太多项目一上来就全量导入,结果坐标系错了、字段截断了、权限乱了,回头改的成本是第一次的十倍。
第二个习惯是「版本化数据」。空间数据每次更新前先备份,或者用数据库的版本机制。VIEWGIS3.0企业版的数据一旦被误删或误改,没有备份就只能重新导入。我一般会在每次批量更新前导出一份空间表,命名带日期,放在独立目录。
第三个习惯是「监控日志」。服务端日志和数据库慢查询日志要定期看。很多问题在爆发前都有征兆,比如日志里频繁出现连接超时,说明连接池快不够了;慢查询变多,说明索引该加了。
第四个习惯是「接口测试先行」。Web 端集成前,先用接口工具把服务地址、参数、返回格式测一遍,确认没问题再写前端代码。这样出问题时能快速定位是服务端还是前端。
最后一个技巧是关于样式的:把样式配置单独存成文件,不要散落在代码里。VIEWGIS3.0企业版的样式可以通过配置文件管理,这样换环境或换项目时可以直接复用,不用重新调一遍颜色和线宽。
我自己踩过最深的一个坑,是早期做某个园区项目时,为了赶进度跳过了坐标系检查,结果所有管线整体偏移了几百米,上线前一天才发现,通宵重新转换和导入。从那以后,我养成了一个习惯:任何数据导入前,先拿一个已知坐标的点做验证,确认位置对了再批量操作。这个习惯帮我省掉了后面很多次返工。希望帮到你。
本文还有配套的精品资源,点击获取