资讯动态

重庆路网水网建筑土地利用矢量数据:从shp到ArcGIS实战全流程

发布时间:2026/10/29 11:16:16 来源:尧图企业网站定制
简介本资源为2021年重庆市路网、水网、建筑、土地利用等矢量数据合集面向GIS专业学生、城市规划与交通研究人员及ArcGIS使用者可满足空间分析、制图与课题研究中对基础地理数据的需要。压缩包共40个文件约33.68MB以shp、shx、dbf、prj、xml五类配套文件为主分别承载几何图形、索引、属性表、坐标投影与元数据覆盖道路、铁路、水系、建筑、土地利用及行政区划边界等图层统一采用WGS84坐标可直接在ArcGIS中加载与叠加分析。目前已有618人学习下载数据现势性较好、图层分类清晰适合用于城市空间格局分析、交通网络研究、用地变化对比及专题地图制作也可作为教学演示与论文写作的底图数据帮助读者省去繁琐的数据采集与坐标转换环节快速进入分析建模阶段。1. 重庆路网水网建筑土地利用矢量数据从拿到 shp 到在 ArcGIS 里跑通的第一公里如果你手头正好有一份 2021 年重庆市的路网、水网、建筑、土地利用矢量数据还附带行政区划边界坐标是 WGS84格式是 shp——那这篇就是写给你的。我拿到这类数据包的第一反应从来不是“先打开看看”而是先确认三件事坐标系对不对、图层结构清不清楚、属性字段能不能直接用来做分析。因为一旦坐标系错了后面所有面积量算、缓冲区分析、叠加求交全是白干。这份数据覆盖的是重庆全市域范围路网、水网、建筑轮廓、土地利用分类四个主题图层加上行政区划边界作为空间筛选和统计汇总的底图。WGS84 意味着它是地理坐标系单位是度不是米。这一点非常关键——你直接拿它算面积出来的数字单位是“平方度”没有任何实际意义。适合谁用做城市空间分析的研究生、做国土空间规划前期调研的从业者、需要快速搭建区域底图的数据工程师以及做 ArcGIS 课程设计但不想从零 digitize 的学生。不适合谁需要实时路况或高精度导航级路网的人这份数据是静态的年度快照不是动态交通数据。我见过太多人拿到 shp 之后直接拖进 ArcGIS然后发现图层叠不上、面积算不对、导出 CAD 全是乱码。问题不在数据本身在于没有先做“数据体检”。接下来的内容我会按实际工作流拆开讲怎么验、怎么转、怎么用、哪里容易翻车。2. 数据体检与坐标系处理为什么 WGS84 的 shp 不能直接算面积2.1 拿到 shp 先看什么图层清单与属性字段速查一份完整的矢量数据包解压后通常是一组同名文件.shp、.shx、.dbf、.prj、.cpg。少任何一个都可能导致 ArcGIS 打开报错或属性表乱码。.prj文件尤其重要它定义了坐标系。如果缺失ArcGIS 会提示“未知空间参考”这时候你需要在 Catalog 里手动指定。我一般会先用 ArcGIS 的 Catalog 视图把整个文件夹展开逐个检查每个图层的要素数量和字段结构。路网图层重点看有没有道路等级字段如road_class或type水网看有没有水系名称和等级建筑看有没有层数或高度字段土地利用看分类编码体系。行政区划边界则要确认区县名称字段是否完整、有没有乡镇级细分。如果你不想一个个点开可以用 Python 脚本批量读取。ArcGIS 自带arcpy但更轻量的做法是用geopandas在 Jupyter 里一次性列出所有图层的元信息import geopandas as gpd import os data_dir rD:\chongqing_2021_shp for f in os.listdir(data_dir): if f.endswith(.shp): gdf gpd.read_file(os.path.join(data_dir, f)) print(f图层: {f}) print(f 要素数: {len(gdf)}) print(f 坐标系: {gdf.crs}) print(f 字段: {list(gdf.columns)}) print(---)这段代码的逻辑很直接遍历目录下所有.shp文件用geopandas读取后打印要素数、坐标系和字段列表。gdf.crs会直接告诉你 EPSG 代码WGS84 对应的是 EPSG:4326。如果输出是None说明.prj文件缺失或损坏需要手动补。字段列表能帮你快速判断这份数据能不能直接支撑你的分析——比如做可达性分析路网没有等级字段就得自己根据道路宽度或名称去推断工作量翻倍。提示如果.dbf文件出现中文乱码检查同目录下有没有.cpg文件。没有的话新建一个同名.cpg文件内容写UTF-8ArcGIS 重新加载即可正常显示。2.2 WGS84 转投影坐标系面积量算前的必做步骤WGS84 是地理坐标系经纬度单位是度。你要算面积、算长度、做缓冲区必须先把数据投影到合适的投影坐标系。重庆位于东经 105°17′ 到 110°11′ 之间横跨两个 3 度带中央经线 105° 和 108°。常见做法是用 UTM 分区重庆主城及以西用 UTM Zone 48NEPSG:32648以东用 UTM Zone 49NEPSG:32649。如果做全市域分析更推荐用 Albers 等面积投影自定义中央经线 107°、双标准纬线 25° 和 31°这样全市面积变形最小。在 ArcGIS 里操作路径是ArcToolbox → Data Management Tools → Projections and Transformations → Project。输入图层选你的 shp输出坐标系选Projected Coordinate Systems → UTM → WGS 1984 → Northern Hemisphere → WGS 1984 UTM Zone 48N。如果你用geopandas一行代码就能转gdf_utm gdf.to_crs(epsg32648) gdf_utm[area_m2] gdf_utm.geometry.areato_crs是转换坐标系的核心方法参数epsg32648指定目标投影。转换后gdf_utm.geometry.area返回的面积单位是平方米可以直接用于统计。注意转换前一定要确认原始数据的坐标系定义是正确的如果原始.prj写的是 WGS84 但实际数据是 CGCS2000转换结果会有米级偏移。验证方法是找一个已知地物比如朝天门码头对比底图偏移超过 10 米就说明坐标系定义有问题。注意不要用“Define Projection”工具去“转换”坐标系。Define Projection 只是修改元数据标签不改变坐标值。用错了会导致数据位置完全错乱而且不可逆。转换用 Project定义用 Define这两个工具搞混是新手最常见的翻车点。3. 路网与水网数据处理从原始 shp 到可分析的网络数据集3.1 路网连通性检查与拓扑修复路网数据拿来做可达性分析或最短路径最怕的就是“断头路”——两条本该相交的道路在属性表里是独立要素但几何上没有共享节点。ArcGIS 里可以用“Integrate”工具做拓扑修复但参数设不好会把正常道路也合并掉。我一般先用“Topology”检查新建一个 File Geodatabase把路网 shp 导进去创建拓扑规则“Must Not Have Dangles”不能有悬挂点然后验证。悬挂点就是断头路的端点验证结果会列出所有问题位置。修复方法分两种如果断头路是因为数字化误差导致端点没接上用“Extend Line”工具延伸如果是因为道路本身在交叉口处没有打断用“Planarize Lines”在交点处打断。Planarize 之后原本一条长路会被拆成多段每段在交叉口处共享节点网络数据集才能正确构建。import arcpy arcpy.env.workspace rD:\chongqing_2021.gdb arcpy.PlanarizeLines_edit(road_network, road_planarized) arcpy.Integrate_management(road_planarized, 0.5 Meters)PlanarizeLines_edit在交点处打断线要素Integrate_management的第二个参数是容差0.5 米意味着距离小于 0.5 米的端点会被吸附到一起。容差不能设太大否则会把平行的人行道和车行道合并。重庆地形复杂道路高差大平面投影后立交桥的上下层可能重叠Integrate 会把它们错误合并。遇到这种情况需要先按高程字段或道路等级做分层处理再分别做拓扑修复。3.2 水网数据与行政区划边界的叠加分析水网数据单独看意义不大真正有用的是和行政区划边界做叠加统计每个区县的水系密度、水域面积占比。操作路径ArcToolbox → Analysis Tools → Overlay → Intersect。输入要素选水网和行政区划边界输出要素会带上两个图层的属性字段然后按区县名称做汇总统计。import geopandas as gpd water gpd.read_file(water_network.shp).to_crs(epsg32648) boundary gpd.read_file(admin_boundary.shp).to_crs(epsg32648) intersect gpd.overlay(water, boundary, howintersection) intersect[water_area] intersect.geometry.area summary intersect.groupby(district_name)[water_area].sum().reset_index() print(summary.sort_values(water_area, ascendingFalse).head(10))gpd.overlay的howintersection表示只保留两个图层重叠的部分。groupby按区县名称汇总水域面积sort_values降序排列后取前十。这段代码能直接回答“哪个区县水域面积最大”这类问题。注意水网数据如果是线要素河流中心线geometry.area返回的是 0需要先做缓冲区转面或者直接用长度统计。线要素用geometry.length面要素用geometry.area搞混了结果全是零。提示行政区划边界的区县名称字段如果有重复或缺失先做清洗再叠加。重庆有 38 个区县名称字段常见问题是“万州区”写成“万州”、“酉阳土家族苗族自治县”简写成“酉阳”叠加前统一标准化否则汇总结果会碎片化。4. 建筑与土地利用数据分类统计与 dwg 转 shp 的逆向操作4.1 土地利用分类编码解析与面积汇总土地利用数据的核心价值在分类编码。常见的分类体系是 GB/T 21010-2017一级类包括耕地、园地、林地、草地、商服用地、工矿仓储用地、住宅用地、公共管理与公共服务用地、特殊用地、交通运输用地、水域及水利设施用地、其他土地。拿到数据后先看属性表里的分类字段名可能是DLMC地类名称、DLBM地类编码或自定义字段。统计各类面积占比的脚本import geopandas as gpd landuse gpd.read_file(landuse.shp).to_crs(epsg32648) landuse[area_ha] landuse.geometry.area / 10000 # 转公顷 stats landuse.groupby(DLMC)[area_ha].agg([sum, count]).reset_index() stats.columns [地类名称, 总面积_公顷, 图斑数] stats[占比] stats[总面积_公顷] / stats[总面积_公顷].sum() * 100 print(stats.sort_values(总面积_公顷, ascendingFalse))area / 10000是把平方米转成公顷这是国土行业常用单位。agg([sum, count])同时统计面积总和和图斑数量图斑数能反映该类用地的破碎化程度。占比列用总面积除以总和再乘 100得到百分比。这套统计结果可以直接放进规划报告的前期分析章节。4.2 建筑轮廓数据与 dwg 转 shp 的注意事项建筑数据如果是 shp 格式直接用即可。但很多场景下你需要把建筑轮廓导出给 CAD 用户或者反过来把 CAD 的 dwg 转成 shp。ArcGIS 里 dwg 转 shp 的路径是ArcToolbox → Conversion Tools → To Geodatabase → CAD to Geodatabase。注意 dwg 里的点、线、面分别存在不同的要素类中转换后需要手动筛选出建筑轮廓所在的图层。反过来shp 转 dwg 用“Export to CAD”工具。这里有个血泪经验中文字段在 dwg 里经常变成问号或乱码因为 CAD 的默认编码和 shp 的.cpg不一致。解决办法是在导出前把字段名改成英文或者用“Feature Class to Feature Class”先把字段别名设好再导出。另外WGS84 的 shp 导出 dwg 后CAD 里打开坐标是经纬度不是平面坐标需要先在 ArcGIS 里投影到 UTM 再导出否则 CAD 用户拿到后没法直接量距。注意dwg 转 shp 时如果 dwg 文件包含多个布局或外部参照CAD to Geodatabase 可能只读取模型空间的内容。转换前在 CAD 里用AUDIT命令修复文件错误能减少转换失败的概率。5. 避坑与排查shp 数据处理中最容易翻车的五个场景5.1 现象ArcGIS 打开 shp 提示“无法绘制要素”原因.shx索引文件损坏或缺失或者.dbf文件被 Excel 打开后锁定了。解决重新解压原始数据包确保.shp、.shx、.dbf三个文件同名且在同一目录。如果.dbf被 Excel 锁定关闭 Excel 后重启 ArcGIS。5.2 现象面积量算结果异常大或异常小原因坐标系没转直接在 WGS84 下算了面积单位是平方度。或者投影带选错了重庆用了 UTM Zone 50N。解决确认数据已投影到 UTM Zone 48N 或 49N或者自定义 Albers 投影。检查方法看图层属性里的坐标系单位应该是 Meter。5.3 现象shp 转 txt 或 wkt 后坐标全变成科学计数法原因导出时没有指定精度默认保留了浮点数的完整位数。解决用geopandas导出时指定float_formatgdf.to_csv(output.csv, float_format%.6f)%.6f保留六位小数WGS84 经纬度六位小数约等于 0.1 米精度足够用。如果是投影坐标保留两位小数即可。5.4 现象渔网分割 shp 后每个格网里的要素统计不对原因渔网是用Create Fishnet工具生成的但生成时没有设置正确的投影和范围导致格网和原始数据错位。解决先生成渔网再用Spatial Join把原始要素的属性挂到渔网上。Spatial Join的匹配选项选INTERSECT统计字段选SUM或COUNT。5.5 现象shp 转 3dtiles 后模型位置偏移原因3dtiles 使用 ECEF 坐标系shp 的 WGS84 经纬度需要先转成地心坐标。常见工具如Cesium ion或3dtiles转换插件会自动处理但如果 shp 本身有投影偏移转换后模型会整体平移。解决转换前用已知控制点验证 shp 的绝对位置确保没有系统性偏移。6. 进阶技巧用 ArcGIS 从 DEM 提取 shp 并做流域分割前面讲的都是矢量数据本身的操作但实际项目中经常需要把这份重庆矢量数据和栅格数据结合。比如你有重庆的 DEM想提取水系 shp 和水文站控制的流域边界然后和水网图层做对比验证。这套流程在 ArcGIS 里叫“水文分析”核心步骤是填洼 → 流向 → 流量累积 → 栅格河网提取 → 河网矢量化 → 流域分割。import arcpy from arcpy.sa import * arcpy.env.workspace rD:\chongqing_dem.gdb arcpy.CheckOutExtension(Spatial) dem_filled Fill(dem_raw) flow_dir FlowDirection(dem_filled) flow_acc FlowAccumulation(flow_dir) stream_raster Con(flow_acc 1000, 1) # 阈值1000可根据实际调整 stream_shp StreamToFeature(stream_raster, flow_dir, stream.shp)Fill填洼是第一步DEM 里的洼地会导致流向计算死循环。FlowDirection计算每个像元的流向FlowAccumulation统计每个像元上游汇水面积。Con是条件函数流量累积大于 1000 的像元判定为河道这个阈值需要根据重庆的实际降雨和地形调整——设太小河道碎片化设太大支流丢失。StreamToFeature把栅格河网转成 shp 线要素然后你可以用前面讲的路网拓扑修复方法处理它再和水网图层做叠加对比。我一般会把这个提取结果和水网 shp 做空间叠加看哪些河段是数据里有但 DEM 提取不出来的或者反过来。差异大的地方往往是数据质量问题或者 DEM 分辨率不够。重庆山地地形起伏大DEM 分辨率低于 30 米时小溪沟提取效果很差这时候水网 shp 反而是更可靠的参考。从那以后我每次拿到新的矢量数据包都强制走一遍“坐标系确认 → 拓扑检查 → 投影转换 → 叠加验证”这四步不管多急的项目都不跳过。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑