1. QGIS图形绘制基础操作
第一次打开QGIS时可能会被密密麻麻的工具栏吓到,但实际绘制图形比想象中简单得多。我习惯先创建一个空白项目(Ctrl+N),就像准备一张虚拟画布。点击左侧"图层"面板右键选择"新建Shapefile图层",这时会弹出关键设置窗口:
- 文件路径建议放在没有中文和空格的目录,比如D:/GIS_Data
- 几何类型选择决定了你能画什么图形,常见的有:
- 面(Polygon):适合绘制行政区划、地块
- 线(Line):道路、河流等线性要素
- 点(Point):标记特定位置
创建完成后,一定要记得点击工具栏上的黄色铅笔图标开启编辑模式,否则所有绘图按钮都是灰色的。这里有个新手容易忽略的细节:在绘制多边形时,最后一个点必须双击闭合图形,否则会报错。我刚开始用的时候经常忘记这点,画了半天保存不了。
右键工具栏空白处勾选"形状工具",会显示预置图形按钮。实测圆形工具特别实用,比如要画一个半径500米的圆形区域:
- 点击圆形工具
- 在地图点击圆心位置
- 弹出窗口中输入500(单位与项目坐标系一致)
- 自动生成完美正圆
2. 属性管理与数据导出技巧
绘制图形只是第一步,给图形添加属性信息才是核心价值。在编辑状态下点击"识别要素"工具(带问号的箭头),点击图形会显示属性表。建议提前规划好字段结构,比如:
- 行政区划图层可能需要:名称、编码、人口数
- 地块图层可能需要:所有者、面积、用途
有个实用技巧:在属性表中右键字段名选择"计算字段",可以用表达式自动计算面积、长度等几何属性。比如计算多边形面积的SQL表达式:
$area/10000这个公式会把平方米转换为公顷,我在处理农业用地数据时经常用。
导出数据时要注意坐标系选择。虽然QGIS支持实时投影转换,但建议导出时统一用WGS84(EPSG:4326)或Web墨卡托(EPSG:3857),这是Web地图的通用标准。导出Shapefile时有个坑:中文属性值可能会乱码,解决方法是在导出窗口右下角选择UTF-8编码。
3. PostgreSQL/PostGIS数据库配置
安装PostgreSQL时有个关键步骤容易被忽略:在安装向导的"Additional Tools"页面一定要勾选PostGIS扩展。我曾在三个不同系统上安装,发现Windows版默认不勾选这个选项。
创建数据库后必须执行两个SQL命令:
CREATE EXTENSION postgis; CREATE EXTENSION postgis_topology;用PostGIS Shapefile导入工具时,如果遇到"无法打开.dbf文件"错误,通常是权限问题。我总结的解决方案是:
- 把Shapefile复制到C盘根目录
- 右键导入工具选择"以管理员身份运行"
- SRID一定要填写正确(4326对应WGS84)
导入后建议立即执行空间索引创建,这对后续查询性能提升巨大:
CREATE INDEX [索引名] ON [表名] USING GIST (geom);4. GeoServer服务发布全流程
第一次登录GeoServer管理界面(默认http://localhost:8080/geoserver),建议立即修改默认密码。有次我在演示时忘记修改,结果被现场观众恶作剧改了配置。
创建工作区时要注意命名规范:
- 避免使用特殊字符和空格
- 建议采用"机构名_项目名"的格式
- URI可以填公司官网或项目文档链接
添加数据存储时最容易出错的是连接参数。PostGIS的连接字符串模板:
jdbc:postgresql://localhost:5432/[数据库名]用户名密码要和pgAdmin的登录凭证一致。测试连接时如果报错,80%的情况是忘记开启PostgreSQL的远程连接权限,需要修改pg_hba.conf文件。
发布图层时的关键设置:
- "计算边框"按钮一定要点
- 声明SRS要填EPSG代码(如4326)
- 切片设置建议选image/png格式
- 在"发布"标签页设置合适的缩放级别
5. 实战问题排查指南
遇到图层不显示的情况,我通常按这个顺序检查:
- GeoServer日志文件(在安装目录的logs文件夹)
- 图层预览页面是否报错
- 数据库连接是否正常
- 图形数据是否在可视范围内
一个典型错误是"Could not list layers for this store",这通常意味着:
- 数据库表不存在
- 连接字符串有误
- 用户没有查询权限
性能优化方面,建议:
- 为常用查询创建视图
- 启用GeoServer的GZIP压缩
- 对静态数据启用切片缓存
最后测试服务时,可以用OpenLayers预览,也可以直接复制GeoJSON链接到浏览器。我习惯用QGIS的"添加WMS/WMTS图层"功能做最终验证,这样能模拟真实调用环境。记得在开发文档中记录服务URL时,要包含工作区名前缀,比如:
http://localhost:8080/geoserver/testwork/wms?service=WMS...