
简介《城乡规划GIS应用技术指南》是一部面向城乡规划专业学生、规划师和GIS初学者的综合学习资料紧扣地理信息系统在规划实务中的应用主线系统讲解地图数据采集、空间分析、模型构建与决策支持等关键能力。压缩包约449.96MB内含多个按主题组织的章节模块先由GIS基础架构与空间数据管理起步再逐步深入到遥感影像处理、地形数据数字化、坐标转换、拓扑错误修复等操作接着讨论土地利用现状分析、方案模拟、交通流量研判、公交线网优化以及环境影响评价和洪涝地质灾害风险识别内容覆盖了规划项目从前期分析到后期评估的主要环节。目前该资源已有3010人学习浏览适合想要系统提升规划信息化技能的读者。通过学习可掌握从数据清洗到规划方案比选的一整套GIS工作流程并能将设施选址、服务半径分析等技能直接用于实际项目助力城乡空间布局更加科学合理。1. 什么是城乡规划中的GIS以及这份指南能帮你解决什么一张城市建设用地现状图如果只用CAD画地类边界和地块编号根本对不上但让规划人员用GIS去处理同样的数据半小时就能出图还能顺带算出各街道的建设用地占比。城乡规划里真正难的不是画图而是把不同坐标系、不同精度的空间数据整合在一起做判断——这正是《城乡规划GIS应用技术指南》这类资料最值钱的部分。它的章节内容从GIS基础结构chp02一直延伸到数据采集处理chp03、chp04、土地与设施分析chp05、chp07、chp08以及交通、环境与灾害板块chp09、chp10、chp12、chp13整体上是按一个规划项目的完整数据流来组织的。这套资料适合三类人刚接触GIS、拿着用地数据不知道怎么建库的规划新人需要把国土空间规划中的双评价流程落到软件里的在职从业者以及做城市数据分析、想从“会画图”升级到“会建模”的开发者。2. GIS基础架构与空间数据组织坐标系、图层与属性表2.1 矢量与栅格两种空间数据模型怎么选城乡规划中的数据来源很杂国土三调下发的用地数据是矢量面遥感影像和DEM是栅格手机信令处理后的人口网格还是栅格。矢量模型用点、线、面表达要素适合做边界精确的地类图斑、路网、宗地栅格模型用像元矩阵表达连续表面适合做坡度分析、用地适宜性评价、人口密度分布。在chp02对应的基础章节里核心要建立起的第一个认知是叠加分析前必须统一数据模型和分辨率。比如做生活圈公共服务设施覆盖分析幼儿园是点、小区是面、路网是线三者必须都在同一坐标系和同一空间范围内才能做网络分析。import geopandas as gpd # 读入幼儿园点位和小区面数据 schools gpd.read_file(schools.shp) communities gpd.read_file(communities.shp) print(schools.crs) # 查看点数据坐标系 print(communities.crs) # 查看面数据坐标系 # 统一坐标系为 CGCS2000 / 3-degree Gauss-Kruger zone 39EPSG:4549 communities communities.to_crs(EPSG:4549) schools schools.to_crs(EPSG:4549)这里检查crs是必须养成的习惯。很多数据直接拖进GIS软件会自动被“On-the-fly”投影看起来叠加没问题但一做缓冲区或面积计算单位可能是度而不是米结果彻底失真。上面的代码把两套数据统一到高斯-克吕格3度分带投影目的是让后续长度、面积计算有真实的米制单位。2.2 属性表管理用地面积统计的三个常见坑城乡规划里最常出现的问题是图斑有几百个属性表里DLBM地类编码字段记的是0101这样的代码非专业人士根本看不懂。chp02强调的属性数据管理核心就是两件事字段语义规范化、编码与名称对照。常见做法是建一个对照表用数据库的JOIN或GIS软件的“连接字段”功能挂接。-- 用 PostgreSQL/PostGIS 处理地类图斑属性 SELECT dlbm, CASE WHEN dlbm LIKE 01% THEN 耕地 WHEN dlbm LIKE 02% THEN 园地 WHEN dlbm LIKE 03% THEN 林地 ELSE 其他 END AS land_type, ROUND(SUM(ST_Area(geom)::numeric / 10000), 2) AS area_ha FROM land_parcels GROUP BY dlbm;这条SQL直接按地类编码前缀做语义映射并利用ST_Area计算每个图斑面积累加为公顷数。注意ST_Area返回的是投影坐标下的面积如果几何体是地理坐标系WGS84必须先做ST_Transform再算面积否则单位是平方度。这个坑在汇总表中经常出现表现为同一块地在两个项目里面积不一致。2.3 GIS软件选型ArcGIS、QGIS还是PostGIS很多人在 chp02 阶段就被软件安装劝退。实际项目中选型没有绝对标准ArcGIS 在国土空间规划体系里因为行业规范文件兼容性好而常用QGIS 免费开源批量出图和 Python 脚本扩展能力强PostGIS 适合处理千万级要素的数据库级运算。我一般会建议同时掌握 QGIS PostGIS 的组合因为 QGIS 可以直连 PostGIS 数据库日常可视化用桌面软件重活累活丢给数据库算。指南相关章节讲的原理层面软件差异不大关键是把要素类、字段类型、拓扑规则这些底层概念吃透换软件只是换界面。3. 空间数据采集与预处理坐标转换、拓扑修复与数据清洗3.1 坐标转换从地方坐标系到 CGCS2000 的实操规划项目最耗时间的一步往往不是分析而是把测绘院提供的西安80、北京54或地方独立坐标系正确地转到国土空间规划统一的 CGCS2000。chp03 和 chp04 里涉及的坐标转换难点在于转换参数。常见做法是找当地测绘部门要七参数然后用pyproj做转换。from pyproj import Transformer # 西安80 - CGCS2000七参数示例实际项目需向测绘院申请 transformer Transformer.from_crs( EPSG:2383, # Xian80 / 3-degree Gauss-Kruger zone 39 EPSG:4549, # CGCS2000 / 3-degree Gauss-Kruger zone 39 always_xyTrue ) # 转换单个坐标点 x_cgcs, y_cgcs transformer.transform(521345.67, 3345678.89) print(fCGCS2000: {x_cgcs:.3f}, {y_cgcs:.3f})注意always_xyTrue确保输入顺序一直是经度/纬度或X/Y避免因为坐标轴顺序不同导致点位跑到海里。没有七参数时可用的做法是先用公共点做Helmert七参数拟合但精度只有米级只适合做宏观分析不允许用于报批图件。城乡规划中用“布尔莎七参数”还是“四参数”取决于控制点数量如果没有控制点只能做框架转换图纸上的坐标会有偏移必须在成果说明里写明精度损失。3.2 拓扑错误修复缝隙地块和重叠图斑怎么处理从AutoCAD转过来的地块边界经常有重叠、缝隙、悬挂点直接做叠加分析会得到错误结果。GIS里的拓扑规则可以自动检查这些问题。在 QGIS 中用v.clean工具修复矢量拓扑是常见做法但更可控的方式是直接用 PostGIS 的ST_MakeValid配合ST_Snap处理。-- 修复图斑重叠用 ST_Node 拆分并去除重叠 CREATE TABLE clean_parcels AS SELECT a.id, ST_MakeValid(ST_Snap(a.geom, b.geom, 0.01)) AS geom FROM raw_parcels a LEFT JOIN raw_parcels b ON a.id b.id; -- 查找缝隙用地块面层做差集 SELECT ST_Union(geom) AS boundary FROM clean_parcels;这里ST_Snap的容差参数 0.01 表示 1 厘米如果数据源是第二次全国土地调查的成果容差设 1 厘米就够如果是从纸质图扫描数字化来的容差要放宽到 0.5 米。ST_MakeValid处理的是自相交、重复点等几何非法问题通过检查ST_IsValid可以快速定位出错图斑。实际项目中我习惯先跑一遍SELECT id, ST_IsValidReason(geom) FROM raw_parcels WHERE NOT ST_IsValid(geom);ST_IsValidReason会返回Self-intersection或Ring Self-intersection这类具体错误类型方便逐一修复。3.3 数据清洗GPS点位偏移和字段补全野外采集的GPS数据常有漂移点比如建筑轮廓点跑到路中间。清洗思路分两步先用属性筛选排除明显异常记录再按距离规则剔除偏离过大的点位。import pandas as pd import geopandas as gpd # 读取GPS采集点 gps_pts gpd.read_file(gps_points.shp) # 设置投影坐标系计算每个点到中心点距离 gps_pts_proj gps_pts.to_crs(EPSG:4549) center gps_pts_proj.geometry.unary_union.centroid gps_pts_proj[dist_m] gps_pts_proj.geometry.distance(center) # 剔除距中心超过50米的漂移点 filtered gps_pts_proj[gps_pts_proj[dist_m] 50] # 补全采集时间为空的数据 filtered[collect_date] filtered[collect_date].fillna(pd.Timestamp.now().date())判定阈值50米要依据采集场景调整。用手机GPS采集人行道设施漂移可能在10米内用RTK设备采集界址点误差不会超过5厘米。盲目按统一阈值清洗会把真实数据一起删掉所以清洗前要先用属性表看采集精度字段比如经纬度精度协方差。4. 土地利用分析与设施选址从图斑评价到多准则叠加4.1 土地利用现状结构分析重分类与转移矩阵chp07 里的土地利用现状分析落到操作层面是先做地类重分类再做统计汇总。现状分析的目标是看面积结构比如建设用地多了多少、耕地减少了多少。ArcGIS 里用Reclassify工具QGIS 里用r.reclass。但更灵活的方式是在 PostGIS 中直接做-- 将新老两期用地数据做空间连接生成转移矩阵 SELECT old_land.type_name AS old_type, new_land.type_name AS new_type, ROUND(SUM(ST_Area(ST_Intersection(old_land.geom, new_land.geom))/10000)::numeric, 2) AS change_area_ha FROM land_2018 old_land JOIN land_2023 new_land ON ST_Intersects(old_land.geom, new_land.geom) GROUP BY old_land.type_name, new_land.type_name;这条语句用空间连接生成新旧地类交叉面积得到每个“转变对”的面积再导出到Excel做透视表就是标准的土地利用转移矩阵。这里最关键的是两个图层要经过拓扑修复和坐标系统一否则ST_Intersection会产生碎面。还有一种常见误用是把两期图斑按属性字段直接JOIN这要求两个层的地块编号完全一致实际上一块地在五年内被拆成了三块属性关联就会丢失所以必须用空间叠加而不是属性关联。4.2 设施选址的多准则评价权重怎么定学校、医院、公园选址涉及的两类分析位置分配模型和适宜性评价。chp05 和 chp08 里的选址逻辑技术核心是多准则决策分析MCE。常用流程是选定影响因子人口密度、地价、现有设施距离、地形坡度、规划用途→ 因子标准化 → 加权叠加 → 提取高分区域。在 QGIS 中可以用内置的SAGA工具集做加权叠加参数设置参考下表因子数据层标准化方法权重方向人口密度街道人口栅格线性拉伸到0-10.35越大越好现有设施距离欧氏距离栅格反距离归一化0.25越近越好地块坡度DEM坡度栅格线性拉伸0.20越小越好规划用途用地规划图栅格适宜性赋值0.20按规划权重确定尽量用层次分析法AHP或者熵权法不要拍脑袋。一类常见做法是先做单因子栅格标准化再把它们输入到r.series工具按权重求和。如果因子量纲不统一但直接相加坡度30°的地块和距离学校3000米的地块会被同样对待结果完全偏离实际。# GRASS GIS 中执行加权叠加 r.mapcalc suitability 0.35*pop_norm 0.25*prox_norm 0.20*slope_norm 0.20*landuse_norm这里pop_norm等各单因子栅格必须预先标准化到0-1之间并且保证栅格分辨率一致否则叠加结果边缘会出现条纹。栅格重采样用最近邻还是双线性决定结果平滑度一般情况下做评价用双线性采样做分类用最近邻。4.3 服务半径分析缓冲区与网络服务区的区别设施服务半径是规划标准里的高频词幼儿园500米、社区医院1000米。很多人直接在GIS里做一个矢量圆形缓冲区然后统计覆盖人口这种做法的弊端在于没有考虑河流、快速路、铁路等物理阻隔。真正的覆盖范围应该基于路网做网络服务区分析PostGIS 结合 pgRouting 可以算出沿路网步行5分钟、10分钟的可达范围。-- 基于路网做步行15分钟等时圈假设步行速度 4km/h即约67m/min WITH start AS ( SELECT geom FROM school_points WHERE id 101 ), reachable AS ( SELECT * FROM pgr_drivingDistance( SELECT id, source, target, length_m as cost FROM road_network, (SELECT id FROM road_vertices_pgr ORDER BY geom - (SELECT geom FROM start) LIMIT 1), 15 * 67, -- 15分钟 * 67米/分钟 directed : true ) ) SELECT ST_Union(rn.geom) AS service_area FROM reachable r JOIN road_network rn ON rn.id r.edge_id;pgr_drivingDistance的核心是行驶成本参数这里直接按步行速度计算距离成本。实际中需要把信号灯等待时间、过街天桥的额外耗时计入成本才更接近真实。等时圈出来以后再与小区人口栅格做叠加才是规划评审时能站得住脚的服务覆盖率数据。注意directed : true表示方向约束仿真单行道。5. 交通路网与环境灾害风险从网络分析到加权评价模型5.1 交通流量分析与路网承载能力评估chp09 和 chp10 对应的交通规划应用中最常遇到的业务问题是某片区新增居住人口后现状路网能不能承接新增的交通需求。技术层面有两个层面的做法。宏观层面做四阶段模型中的交通分配常用软件是 TransCAD 或 Visum中微观层面用 GIS 把现状流量、道路等级、通行能力叠加在一起做承载率分析。GIS 里的实操逻辑是给路网要素添加capacity设计通行能力、volume现状流量字段计算v/c比再按阈值分级渲染。SELECT road_id, road_name, volume, capacity, ROUND((volume::numeric / NULLIF(capacity, 0)), 2) AS vc_ratio, CASE WHEN volume::numeric / NULLIF(capacity, 0) 0.6 THEN 畅通 WHEN volume::numeric / NULLIF(capacity, 0) 0.85 THEN 基本畅通 WHEN volume::numeric / NULLIF(capacity, 0) 1.0 THEN 拥堵 ELSE 严重拥堵 END AS level FROM road_link;NULLIF(capacity, 0)是为防止除零错误。V/C比在0.85以上意味着道路接近饱和。城乡规划中新增用地的交通影响评价往往要把这个结果和现状流量叠加来看。实际项目里要注意交通模型预测的流量是高峰小时流量如果只给日均流量算出的V/C比会整体偏低所以字段口径必须统一。5.2 公交线网优化OD分析与服务盲区识别公交线路规划的GIS分析最典型的是识别服务盲区。步骤是先做站点500米缓冲区再减去站点覆盖范围剩下的居住用地就是潜在盲区。QGIS 里执行“固定距离缓冲”# 为公交站点生成500米缓冲区并合并重叠区域 # QGIS 处理工具箱操作也可以用命令行执行 qgis_process run native:buffer \ --distance500 \ --segments12 \ --dissolveTRUE \ --INPUTbus_stops.shp --OUTPUTbus_buffer.shp生成缓冲区后将居住用地图层与缓冲区做差异分析native:difference得到的结果就是公交服务盲区。这里要注意缓冲区不能直接叠加路网因为真实可达应该沿路网行进但对于初筛盲区500米直线缓冲仍是一种被规划界接受的近似。精度要求高时推荐按 5.2 节pgr_drivingDistance的方法生成步行等时线再叠合居住用地。公交场站自身的选址还可以用位置分配模型location-allocationArcGIS 的 Network Analyst 里有现成工具但更透明的做法是写一个简单的最优化脚本# 基于最小化最大距离的设施选址使用 scipy 做最优化 import geopandas as gpd import numpy as np from scipy.optimize import linprog # 候选站点坐标 c需求点坐标 d candidates gpd.read_file(site_candidates.shp) demand gpd.read_file(demand_points.shp) coords_c np.array([(p.x, p.y) for p in candidates.geometry]) coords_d np.array([(p.x, p.y) for p in demand.geometry]) # 计算候选站到需求点的距离矩阵 dist np.sqrt(((coords_c[:, None] - coords_d[None, :])**2).sum(axis2))距离矩阵生成后用整数规划求解最小设施点数和最大覆盖半径的平衡。这类方法适合对算法有底子的规划从业者比黑盒工具更可控因为每一步距离计算、约束条件都能查证。5.3 洪涝与地质灾害风险识别DEM地形因子计算chp12 和 chp13 的环境与灾害风险分析在GIS里最常见的是两种基于汇水分析的洪涝风险基于坡度坡向的地质灾害排查。水文分析的基础是填洼、流向、汇流累积。QGIS 中可以使用 GRASS 的水文工具链# 填洼 - 计算流向 - 计算汇流累积 r.fill.dir inputdem outputdem_filled directiondir_fill r.watershed elevationdem_filled accumulationacc drainagedirs r.mapcalc streams if(acc 500, 1, null())500是阈值代表汇流累积超过500像元时识别为河流。阈值调低识别出的河网越密调高只会保留主河道。地质隐患识别中坡度、坡向、岩性、距断层的距离是核心因子。坡度提取用r.slope.aspectr.slope.aspect elevationdem_filled slopeslope_map aspectaspect_map formatdegrees precfloat坡度因子生成后再叠加断层缓冲区和工程岩组图形成隐患“热点”区域。栅格分析中有一个常见错误DEM没填洼就计算流向低洼地会出现局部回流导致水流方向错误所以填洼必须放在第一步。另一个常见问题是不同来源的DEM例如ALOS 12.5米和SRTM 30米得出的坡度统计差异很大汇流阈值也需要跟着分辨率调整否则同一区域两次分析的结果不可比。6. 让成果变高效QGIS批量出图与生活圈等时圈生产这套指南的章节内容基本覆盖了从数据到决策的全链路但真正交付时效率瓶颈往往不在分析而在出图。一个村庄规划项目动辄需要二三十张专题图——现状用地、产业布局、设施服务、路网结构每张都要统一图框、比例尺、图例。手动一张张导出会消耗大量时间而用 QGIS 的 PyQGIS 脚本加上QgsLayoutExporter可以批量完成。from qgis.core import ( QgsProject, QgsLayout, QgsLayoutItemMap, QgsLayoutItemLegend, QgsLayoutExporter ) from qgis.PyQt.QtCore import QRectF # 获取工程和图层 project QgsProject.instance() layer_names [land_use, road_network, facility_points] # 对每个图层单独生成一张专题图 for name in layer_names: layer project.mapLayersByName(name)[0] # 新建布局 layout QgsLayout(project) layout.initializeDefaults() # 添加地图项设置范围到图层范围 map_item QgsLayoutItemMap(layout) map_item.setRect(QRectF(20, 20, 160, 120)) map_item.setExtent(layer.extent()) layout.addLayoutItem(map_item) # 导出为PNG exporter QgsLayoutExporter(layout) settings QgsLayoutExporter.ImageExportSettings() settings.dpi 300 exporter.exportToImage(f{name}_专题图.png, settings)脚本中的setExtent直接取图层范围保证每张图自动缩放到要素全览状态。DPI设300是为了满足印刷和评审要求不要为了省存储空间降到150。这里要说明两点第一布局里的图例和比例尺项在脚本中也要手动添加否则导出的图缺图例第二栅格图层出图时如果范围过大建议先setExtent指定一个矩形区域避免内存溢出后图层空白。另一个非常实用的进阶操作是生活圈分析中的等时圈生成。热搜里“gis 生活圈分析”对应的实际做法是基于真实路网计算15分钟生活圈。OpenRouteService 的 QGIS 插件可以直接调用本地或云端路由服务生成出行时间多边形没有外网环境时用上一章的pgr_drivingDistance加ST_ConcaveHull包络。-- 从路网等时圈生成生活圈多边形 SELECT ST_ConcaveHull(ST_Collect(geom), 0.8) AS isochrone FROM ( SELECT rn.geom FROM pgr_drivingDistance(...) e JOIN road_network rn ON rn.id e.edge_id ) sub;ST_ConcaveHull的参数0.8控制多边形的凹凸程度越接近1越贴合路网形状但计算耗时更高越接近0越像一个凸包会把不可达区域也包进去。生成等时圈后再与居住用地做叠加就可以计算“15分钟生活圈覆盖率”这个规划评估指标。这个指标在不同城市标准的解释有差异注意核对各地方细则里的速度取值和设施类型定义。批量出图和等时圈生成是这份指南技巧之外最值得沉淀的两个工作流。前者能帮你在项目交付周节省一整天后者能让你从“画个圆”升级到“真实可达”。当你把这两步熟练之后再回头翻 chp02 到 chp10 的内容会发现所有命令和工具参数在解决真实问题时开始相互关联起来。本文还有配套的精品资源点击获取