简介面向区域空间分析、城市规划与人文地理研究等场景这份文件包提供2024年湖北省10类地理与人文要素的矢量数据覆盖省、市、县区、乡镇街道四级行政区划以及水系、大学、景点、道路、高程和土壤类型等内容可直接用于ArcGIS、QGIS等平台进行制图与空间建模。包内共53个文件以shp矢量数据为主体配齐dbf属性表、prj投影定义、shx索引等配套文件另有TIF格式的全国高程栅格、土壤分类对照xlsx及元数据文档整体压缩包约104.47MB结构按专题分目录存放加载和筛选较为便捷。经纬度统一采用WGS 1984坐标系水系含面状与线状双图层大学收录131所景点收录1241处道路及土壤数据也均有完整属性字段适合教学演示、课题研究或业务底图使用。目前已有109人学习下载对需要快速获取标准化湖北空间数据的使用者来说是一套可节省大量前期整理时间的基础资料。1. 湖北省10类地理人文shp这份数据包解决什么解决不了什么做湖北区域项目的人十有八九遇到过这种场面底图数据东拼西凑行政区划从某个旧帖里找水系和道路来自不同坐标系叠加后错位到怀疑人生。这份2024年湖北省10类地理人文shp把省、市、县区、乡镇街道、水系、大学、景点、道路、高程、土壤类型收进一个资源包里解决的是「做分析前最耗时间的找数据和洗数据」问题。适合GIS从业者、规划专业学生、数据产品经理拿来当区域底图、POI空间关联、选址统计和专题制图的数据源。它解决不了的是实时路况、动态定位这类时效性需求静态矢量数据别硬扛。下面从一个真实的拆包视角讲清楚每类数据怎么用、坐标系怎么统一、以及我踩过的坑。2. 资源盘点与坐标系先搞清楚十类数据和 prj 再谈叠加2.1 十类数据的组织逻辑先分清点线面栅格拿到手的第一步不是急着拖进地图而是先把十类数据分成几组搞清楚每类的几何类型和适用场景。这套包里行政边界是面要素水系和道路是线要素部分水系会附带面要素大学和景点是点要素高程可能是DEM栅格也可能是等高线shp土壤类型是面要素。数据类别常见几何类型典型用途拿到手先看省/市/县区/乡镇街道面行政统计、专题配色、选址分区边线是否闭合、有无重叠水系线为主、部分面河网分析、图纸底图线面两套是否重名重复道路线通达性分析、路网标注是否有道路等级字段大学点POI标注、密度分析校名字段是否完整景点点旅游专题图、路线规划是否含等级/类型字段高程DEM栅格或等高线shp坡度、流向、地形渲染是栅格还是矢量等高线土壤类型面农业规划、地质分析分类字段值是否齐全分组之后你才会知道哪些数据可以直接做空间分析哪些要先做转换。比如行政边界可以直接做dissolve合并而高程如果是等高线shp做坡度分析前通常要转成TIN再转DEM这一步很多人会漏。省、市、县区、乡镇街道四层行政数据是这套包的核心它们一般按行政区划代码层级组织。拿到手后先加载一层看看属性表确认有代码字段和名称字段。乡镇街道层通常字段最全包含了上级行政区代码这是后面做聚合统计的关键。水系和道路要注意有没有等级字段等级字段决定了你在做制图时能不能按粗细分级渲染。2.2 坐标系第一关prj 文件、湖北投影带与转换参数十类数据最怕的是什么坐标系不统一。我拆过的资源包里最常见的组合是省界用WGS84乡镇街道用CGCS2000水系用GCJ02三个放一起直接错位几十米到几百米。拿到资源后第一件事查看每个shp旁边有没有.prj文件。.prj文件保存了坐标系定义如果没有打开GIS软件看属性里的坐标范围。湖北省经纬度范围大致在东经108°116°、北纬29°33.5°之间。如果坐标值在这个范围内说明是经纬度坐标系如果坐标值变成六位数的米制数值比如500000开头说明是投影坐标系。湖北省做测绘和国土业务常用CGCS2000下的高斯-克吕格3度带投影。湖北省跨了多个3度带不同区域使用不同的中央经线比如武汉一带常用中央经线114°E的分带投影。如果你要做县级尺度的面积统计建议把行政边界统一投影到高斯-克吕格投影下再做计算而不是直接用经纬度算面积不然量出来的面积误差很大。在QGIS里统一的操作为右键图层 → 导出 → 保存要素为在「CRS」处选择目标坐标系。ArcGIS里则用「投影」工具Data Management Tools → Projections and Transformations → Feature → Project。如果只是做地图展示不涉及面积计算统一用WGS84或Web Mercator问题不大一旦涉及距离计算、缓冲区生成、面积统计务必转成投影坐标系。2.3 属性表字段行政区划代码与名称的关联规则行政边界shp的属性表里一定有行政区划代码字段。湖北省省级代码以42开头地市级代码在第34位区县级代码在第56位。比如武汉市的区县代码就会以4201开头。这个规则能帮你快速判断数据是否完整也能用来做字段拼接。乡镇街道层的字段通常比省界层多因为它要承载「省、市、县、乡镇」四级信息。有的包把四级拆成province、city、county、town四个字段有的合并成一个全名字段。如果只有代码没有全名可以用QGIS字段计算器拼接concat(prov_name, -, city_name, -, county_name, -, town_name)逻辑说明这条表达式把四个层级字段拼接成一个完整行政区名称方便后续做标注和关联。参数说明如果字段名不是prov_name这种格式改成你属性表里实际的字段名拼接符号可以换成空格、下划线或空字符串取决于你要用在图表横轴还是地图标注。字段计算器在QGIS里右键图层 → 打开属性表 → 字段计算器输出字段选「文本」长度填100以上。3. 边界合并与点面叠加把 shp 用起来的三个实战动作3.1 逆向聚合从乡镇 shp 合并出区县、市级面很多分析场景不需要乡镇粒度比如做全市财政数据可视化要把乡镇边界聚合到区县。这份包里乡镇街道shp是最细的一层逆向聚合是高频操作。我一般直接用GeoPandas处理比GIS界面点鼠标快得多而且可复现。import geopandas as gpd town gpd.read_file(Hubei_town.shp, encodingutf-8) county town.dissolve(bycounty_code, as_indexFalse) county county[[county_code, county_name, geometry]] county.to_file(Hubei_county.shp, encodingutf-8)逻辑说明dissolve是GeoPandas里的聚合方法按county_code字段分组把同一个区县下面的所有乡镇面合并成一个几何。as_indexFalse表示不把分组字段设为索引保留为普通列导出后字段结构更友好。参数说明如果你的属性表里区县代码字段叫COUNTY_CODE或xzqdm把by参数改成对应字段名county列名同理。合并后可用county.plot()快速检查是否有异常飞地。乡镇边界合并时最怕的是字段选错。有的shp里县区代码和市代码都存在一眼看去都是数字但县级代码是六位市级代码是四位。合并前先打印字段唯一值长度分布确认选对字段再执行。这一步我翻过车拿市代码去合并结果整个省的地图只剩下十来个面看着像抽象艺术。3.2 空间关联大学、景点落到区县做密度统计大学shp和景点shp是点数据它们本身没有行政区属性。要做「哪个区县大学最多」「哪个区县景点最密集」必须做空间关联空间连接。QGIS里的操作路径是矢量 → 研究工具 → 按位置连接属性。参数设置源图层选大学shp目标图层选区县面shp几何谓词选「相交」连接类型选「一对一」这样每条大学点会带上所在区县的代码和名称。用GeoPandas做同样的事情更可控school gpd.read_file(Hubei_university.shp, encodingutf-8) county gpd.read_file(Hubei_county.shp, encodingutf-8) school school.to_crs(county.crs) matched gpd.sjoin(school, county, howleft, predicatewithin) count_stats matched.groupby(county_name).size().sort_values(ascendingFalse) print(count_stats.head(10))逻辑说明sjoin是空间连接函数predicatewithin表示点必须完全落在面内部才匹配howleft保留大学点全部记录即使某个点没落到任何区县也会保留只是区县字段为空方便排查漂移点。参数说明to_crs先统一坐标系不然两个图层坐标系不一致时匹配结果全是空值。groupby之后打印的是各区县大学数量排名可以直接复制到图表里用。做点面关联时有一个细节决定成败点和面的坐标系必须一致。我见过有人用WGS84的点和CGCS2000的面做空间连接结果武汉大学的点落到了长江对面的山地上。所以sjoin前无论如何先来一次to_crs这个习惯能省掉大量排查时间。3.3 裁剪与分区统计道路、高程、土壤三者的配合道路、高程、土壤这三类数据的应用方式跟行政边界不同。道路经常要裁剪到某个区县范围内做路网密度分析高程要根据行政区做区域统计比如获取每个县的平均海拔土壤类型要裁剪出研究区范围再做分类汇总。在QGIS里裁剪道路到区县矢量 → 地理处理工具 → 裁剪。输入图层选道路shp裁剪图层选区县面shp运行后生成该区县范围内的道路子集。注意裁剪后的属性表里还保留着道路等级字段后续可以按等级汇总里程数。高程如果是DEM栅格做分区统计用「区域统计」工具栅格分析 → 区域统计。以区县面shp为分区图层以DEM为栅格图层算法选「平均」结果就是一个带avg_elevation字段的区县面shp。如果高程是等高线shp而不是DEM前面要先转栅格否则没法做区域统计。等高线转DEM的路径矢量 → 栅格化 → 插值插值方法常见有TIN和IDW做区域地势分析用TIN效果更平滑。土壤类型shp是面数据直接拿研究区边界裁剪即可。裁剪后打开属性表按土壤亚类字段做「按字段统计」处理工具箱 → 矢量分析 → 按字段统计。统计项选面积需要坐标系为投影坐标系输出字段有count和sum就能得到每种土壤类型的面积占比。这里再次强调投影坐标系的重要性土壤面积统计如果直接拿经纬度坐标算sum的结果会是「度²」毫无业务意义。4. 新建与转换从 CSV 到 shp、从 shp 到 MapGIS 线文件4.1 从零建一个 shpCatalog 和 QGIS 两条路子拿到这套数据包的人除了直接使用还有一大部分需求是往里补充自己的点位数据。比如自己踩点采集了几个新景点、新学校或者公司内部有几十个门店坐标需要转成shp参与分析。这种场景下你得会从零新建shp。ArcGIS里的做法 Catalog窗口 → 目标文件夹 → 右键 → 新建 → Shapefile。输入名称要素类型选「点」或「线」或「面」坐标系选择WGS84或CGCS2000。创建后右键图层 → 打开属性表 → 添加字段。字段类型有三个常用选项文本如名称、类型、浮点型如经度、纬度、长整型如等级编号。需要注意的是shp的字段名长度有限制早年老版本只支持10个字符以内的英文/数字字段名现在虽然宽限了但也别用超长中文名做转换时容易出问题。QGIS里的做法 图层 → 创建图层 → 新建Shapefile图层。弹出窗口里选几何类型、坐标系输入字段名和类型点确定后进入编辑模式用编辑工具直接在画面上点出要素并填属性。录完点停止编辑shp就生成了。4.2 CSV 经纬度表转点 shpQGIS 五步完成日常工作中最常见的数据形态不是shp而是一张Excel或CSV里面两列字段叫lon和lat几十个点的坐标。这种数据转成shpQGIS用五步就能搞定。第一步准备一个CSV文件格式如下name,lon,lat 武汉大学,114.3568,30.5412 华中科技大学,114.4145,30.5138 华中师范大学,114.3630,30.5234第二步QGIS菜单 → 图层 → 添加图层 → 添加分隔文本图层。第三步选择CSV文件X字段选lonY字段选lat几何类型选「点」坐标系选WGS84 EPSG:4326。第四步点「添加」后画面上出现点图层但此时只是临时图层还没落地成shp。第五步右键该图层 → 导出 → 保存要素为 → 格式选ESRI Shapefile坐标系按目标需求选择。第五步里有个小坑如果CSV里经纬度是GCJ02坐标而目标底图是WGS84直接导出的点会偏移几十米。解决方式是在导出前用QGIS的「坐标转换工具」或第三方插件对GCJ02做偏移纠正但更省事的做法是优先用支持GCJ02偏转的在线工具把CSV先转成WGS84再导入。这个坑在武汉这种城市特别明显因为很多地图坐标采集源默认输出GCJ02。4.3 shp 转 MapGIS 线文件三个必须提前处理的点检索热搜里排在前面的是「shp文件转mapgis线文件的方法与注意事项」说明不少人在用MapGIS做管线或国土业务。shp转MapGIS线文件第一个原则是类型对应shp的Polyline对应MapGIS线文件Polygon对应区文件点对应点文件。别把面要素拿去转线文件转出来的是一堆闭合弧段拓扑全乱。第二个注意事项是属性字段。MapGIS的明码文件对字段名长度和类型识别不如ArcGIS友好中文长字段名转过去后经常变成乱码。我一般会先把shp的字段精简成不超过10个字符的英文字段名再执行转换。比如name保留road_grade改成gradefull_name改成fname转换后进MapGIS属性管理里再看一遍字段值完整就说明转换成功。第三个注意事项是坐标。MapGIS的线文件坐标单位依赖工程设置如果shp是经纬度坐标转到MapGIS平面图里坐标会变成小数度工程单位对不上时图形直接显示在左下角。常见做法是先在GIS里用「投影工具」把shp转成相应中央经线的高斯投影平面坐标再导入MapGIS并确认MapGIS工程坐标系和它一致。MapGIS具体操作路径 MapGIS桌面系统 → 文件转换 → 装入shp文件 → 选择目标类型为线文件 → 换名保存。如果shp里含有多条线要素且需要保留属性在转换设置里勾选「保留属性」选项。转换完务必打开线文件做一次「线拓扑检查」看有没有悬空线或重复线这步在MapGIS里叫「线编辑 → 自动剪断线」前置处理。5. 避坑排查湖北 shp 数据的五个常见翻车现场5.1 DBF 乱码属性表全是问号和口口现象 用ArcGIS打开shp属性表中文名称字段显示为「」或「口口口」。原因 shp的属性表DBF文件是早期dBase格式只认单字节编码。数据生产方用UTF-8存储中文加载软件默认按GBK或系统本地代码页去读两边对不上就出乱码。解决 在QGIS里加载shp时编码选项手动选UTF-8如果还是乱码再试GBK。ArcGIS里可通过添加数据 → 选择编码 → UTF-8或者用Notepad把dbf文件用编码转换插件改成ANSI。更彻底的方案是用GDAL命令行ogr2ogr -lco ENCODINGUTF-8重新生成一遍shp。5.2 数据飞到海外叠加时整体偏移到奇怪位置现象 大学点和行政边界明明都是一个省的叠加后点却集中在某个不相关的区域或者图形跑到海里去。原因 两个图层坐标系不一致一个是WGS84经纬度另一个是CGCS2000或投影坐标甚至可能是GCJ02加密坐标。坐标值一个在118.2一个在730000强行叠加自然飞到天边。解决 加载每个图层时先看「图层属性 → 信息」里的坐标系描述。如果所有图层都是经纬度统一到EPSG:4326再叠加如果涉及面积计算统一到高斯-克吕格投影。在QGIS里用「导出 → 保存要素为 → 指定目标坐标系」批量重投影不要在图层叠加后再试图手动平移。5.3 乡镇边界有缝或重叠一张图出现无数细小白条现象 乡镇街道shp放大后相邻乡镇之间有小缝隙或者两两之间有重叠区域。做聚合合并后生成的区县面边界有明显的锯齿或空洞。原因 原始数据源来自不同比例尺地图数字化接边时没有做拓扑处理相邻乡镇由不同批次采集公共边没有精确对齐。解决 在QGIS中用「矢量几何 → 修复几何」工具修复无效几何再用「编辑 → 捕捉」功能让公共边对齐。更稳妥的做法是使用「拓扑检查」插件规则选「不能有缝隙」「不能有重叠」自动标出问题位置手动编辑修改。做聚合分析前务必先跑一遍拓扑检查否则dissolve结果会带着这些缺陷。5.4 水系数量多得离谱同一条河出现两份以上现象 水系shp里随便查一条长江发现既有一个叫「长江」的面图层又有一个同名线图层两个图层里的长江走向还不完全一致河面宽度对不上。原因 数据包里的水系可能来自两套生产标准线状水系用于制图表达面状水系用于水文建模。两条数据河段划分粗细不同、采集时间不同造成空间上轻微错位。解决 按用途选一层即可不要两层叠加到同一张图。做河网分析用线状水系做洪水淹没分析用面状水系。如果非要合并需要先按河流名称字段做空间匹配选主导数据源的几何属性字段手动拼接。别直接合并否则线段重复、属性错乱两样都会占。5.5 高程数据没有高程值等高线shp的属性是空的现象 打开高程shp后属性表里只有ID字段和图层字段找不到标高或等高距字段渲染出来全是黑压压一片线。原因 这个shp可能是用等高线提取工具从DEM导出的只保留了几何没有把高程属性写回属性表。或者原始数据把高程值存在了注记字段里转shp时注记丢失。解决 如果shp里有ELEV或DLTLS字段但是空值重新用等高线生成工具提取一遍。在QGIS里对DEM执行「栅格提取 → 等高线」在等高线间距参数里设置适合地形的间距平原地区510米山区2050米生成的shp会自带高程属性字段。如果真是原始包缺字段需要用原始DEM重新提取别想在属性表里手填几千条线的高程值。6. 进阶一个技巧用 GeoPandas 给十类 shp 做数据体检拿到数据包第一件事不是急着做分析而是先跑一遍体检。我用GeoPandas写了一个通用检查脚本能把十类shp的几何类型、坐标系、要素数量、空几何一次性摸清比在GIS界面里挨个看快得多。import geopandas as gpd import glob for f in sorted(glob.glob(Hubei_*.shp)): gdf gpd.read_file(f, encodingutf-8) geoms gdf.geometry.geom_type.unique() empty_count gdf.geometry.is_empty.sum() print(f{f}: rows{len(gdf)}, type{geoms}, crs{gdf.crs}, empty{empty_count})逻辑说明glob按文件名匹配所有以Hubei_开头的shp文件read_file读取shp并指定UTF-8编码如果属性有中文乱码就改encodinggbk再试geom_type.unique()输出该文件的几何类型组合正常情况一个文件只有一种几何类型如果出现MULTIPOLYGON和POLYGON混存说明数据不规范is_empty.sum()统计空几何数量空几何会导致后续空间连接失败。脚本输出示例Hubei_county.shp: rows103, type[POLYGON], crsEPSG:4326, empty0 Hubei_town.shp: rows1264, type[POLYGON], crsEPSG:4326, empty3 Hubei_university.shp: rows176, type[POINT], crsEPSG:4326, empty0看到rows和crs正常再看empty计数。乡镇层的3个空几何大概率是数据生产时漏掉的要素要么删掉要么用相邻边界补全否则后面dissolve时这几行会被跳过聚合结果里会出现几个区县没有几何。对空几何的处理我通常直接drop掉并在日志里留条记录gdf gdf[~gdf.geometry.is_empty]。这套体检脚本不只能用在湖北数据上换一个glob路径就能跑全国任何一套shp资源。数据包的年份、坐标系、要素数量全部显示在控制台存成文本日志也能当交付清单。上次拿到一份乡镇数据没做体检直接去叠加结果坐标整体偏到海里返工浪费了整整一天。从那以后我每次拿到shp都强制先跑一遍这个脚本跑完再谈分析。希望帮到你。本文还有配套的精品资源点击获取