恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
江苏省矢量地理数据实战:Shapefile解压、QGIS配图与坐标系转换全流程
首页
资讯中心
/
江苏省矢量地理数据实战:Shapefile解压、QGIS配图与坐标系转换全流程
江苏省矢量地理数据实战:Shapefile解压、QGIS配图与坐标系转换全流程
发布时间:2026/10/16 12:38:07
简介基于OpenStreetMap开源数据整理的江苏省矢量地理数据覆盖交通路网、水系水域、建筑物、自然景点、兴趣点、土地利用等18个类别并包含点、线、面三种几何类型坐标系统一为WGS84。数据已按江苏省边界裁剪适合GIS开发、城市规划、地理教学与制图分析等人员直接使用可用于地图底图搭建、空间查询、专题制图、兴趣点检索以及叠加分析等场景。资源包共92个文件压缩后约54.6MB其中shp存储要素几何、dbf保存属性字段、prj定义坐标系、shx建立空间索引、xml记录元数据并附有sbn/sbx辅助空间索引结构清晰可按类别单独加载或整体导入。目前已有1792人浏览学习说明该数据集在日常GIS数据需求中具备较高参考价值。下载后可直接解压导入ArcGIS、QGIS等主流平台省去自行下载、裁剪与格式转换等前期工作江苏省范围内的地理信息项目可快速获得一套完整的基础矢量底图便于后续配图、渲染与空间分析。1. 江苏省矢量地理数据解压就能配图的GIS底图先看图层再谈分析接到一个急活要基于全省范围出一张交通道路与区县界叠合的底图。找一圈发现真正能立刻用的不是在线瓦片而是一份本地矢量包。把「江苏省矢量地理数据.rar」解压后行政区划、交通道路、建筑物、水系这些图层都在从解压到完成初稿大约半小时。这套数据以Shapefile为核心格式适合做规划底图、GIS可视化和空间查询也适合把交通、建筑这类要素抽取出来做专题分析。适合GIS从业者、规划方向的学生以及需要在离线环境里配底图的开发人员。它解决的是找数据、配底图、统一坐标系这三个连在一起的麻烦。2. 数据包内部结构图层分类、shp文件组成与属性字段解析拿到.rar后的第一反应别忙着拖进GIS。先把它当成一套「菜篮子」分清里面装的是什么。GIS数据包最忌讳的是不看文件结构就开始加载等属性表空了或者图层飞了才回头查浪费半天时间。2.1 先分清要素类型面、线、点三层的组织逻辑这套矢量数据按照几何类型做了分层。行政区划类省界、地市界、区县界是面要素交通道路类高速公路、国道、省道、县道、铁路是线要素建筑物是面要素POI兴趣点是点要素水系里的主要河流可能是线湖泊是面。这样的分层逻辑和制图习惯是对应的线层控制路网显示优先级面层控制区域填充与统计口径。做专题图时你可以单独关掉某个线层来检查道路连通性也可以把建筑物面层和区县面层叠加统计各区域建筑物分布密度。分层的本质是让「查询、符号化、空间分析」都有的放矢。面、线、点分开存还有一个实际好处不会出现在同一图层里既有面又有线导致样式冲突的问题。QGIS里给图层设置符号时面用渐变填充、线用线宽分级、点用图标每一层独立控制出图效率会高很多。2.2 一个完整shp图层应有哪些文件七件套还是三件套Shapefile简称shp不是一个单文件而是一组配套文件的集合。判断一份数据是否完整要看它是否「成套」。常见的配套文件如下表所示后缀作用缺失后果.shp要素几何坐标没有它加载直接失败.shx几何索引缺失时部分软件能自动重建但建议补全.dbf属性表字段与值缺失时图层没有属性无法按字段筛选.prj坐标系描述WKT格式缺失时软件不认识坐标系叠图容易错位.cpg属性编码声明如UTF-8缺失或不对时中文属性乱码.sbn/.sbx空间索引可选缺失不影响显示大数据量查询变慢很多网上流传的shp包只给了.shp和.dbf丢了.prj加载后图元能显示但坐标系是未知状态。配底图时要么叠不上要么你得手动猜坐标系——这是最大的时间黑洞。所以解压后第一件事是逐个图层核对有没有.prj。具体核对方法在解压出来的目录里按扩展名排序看看是不是每个图层都含有.shp/.shx/.dbf/.prj/.cpg这套「五件套」。缺了.cpg可以后续补救缺了.prj就要小心处理。判断数据完整度比急着打开它重要得多。2.3 属性字段命名与类型约定能直接拿来用的字段不同数据来源的shp属性字段命名习惯差异很大有的用拼音首字母有的用英文还有的直接用中文不建议但存在。这套江西省级矢量数据里常见字段包括NAME / ADNAME要素名称或行政区名称CLASS / KIND要素分类编码比如道路等级GBCODE国标分类码国内测绘数据常用AREA / HECTARES面要素面积注意单位LEN / LENGTH / KM线要素长度注意单位ADCODE / PAC行政区划代码6位或12位拿到图层后我一般先做一次字段探查用命令行比逐个点开属性表更快# 查看图层概要要素数、范围、字段名与类型 ogrinfo -so 数据目录/道路.shp 道路参数说明-sosummary only只输出图层概要不逐条列出要素输出内容包含要素总数、图层范围、字段名和字段类型。字符串字段会标成String数值字段标成Integer或Real看到这些类型信息后再决定后面筛选和计算怎么处理。这一步能避免很多后面才暴露的类型错误。字段命名只是「约定」不是「标准」。同一个「道路等级」有的数据叫CLASS有的叫ROAD_CLASS值域从0到7都有。所以不要假设字段名先看统计结果再做符号化。这一点在你换了一套数据源后特别重要。另外面要素的AREA字段可能是平方米也可能是公顷统计前先算一算别把单位搞混。3. 从解压到出图QGIS加载、筛选配色与格式转换全流程现在把一份刚解压的数据变成一张可交付的图。整个流程分四步解压核对、加载设置、筛选配色、格式转换。每一步都有明确的判断标准和常见坑位照着走就能绕开大部分问题。3.1 解压后的第一件事核对文件成套性与坐标信息拿到「江苏省矢量地理数据.rar」先用压缩软件解压到独立目录。建议目录名不要带空格和中文因为部分命令行工具对非ASCII路径支持不太好。Linux/macOS下可以这样走# 解压到当前目录保持压缩包内的目录结构 mkdir -p jiangsu_gis cd jiangsu_gis unrar x ../江苏省矢量地理数据.rar参数说明unrar的x选项表示保留压缩包内部目录结构避免所有文件平铺在同一层导致几百个文件混在一起。解压到独立目录后后续命令行处理时路径好写也不会污染项目根目录。如果环境里没有unrar命令用压缩软件手动解压效果一样关键是关注解压后的目录结构。解压完成后在目录里先按扩展名看一眼。如果某个图层只有.shp和.dbf没有.prj这类图层优先处理打开QGIS加载后右键图层属性在「信息」页签里看坐标系描述是否为空。缺.prj的图层QGIS会提示未知坐标系这时候你后续做的每一次空间分析都可能带着位置偏差越早发现越好。3.2 QGIS加载shp与中文编码设置QGIS中加载矢量数据的常用路径是「图层」菜单→「添加图层」→「添加矢量图层」源文件类型选择「ESRI Shapefile」。默认情况下QGIS会自动识别编码但识别不准时中文属性会变成乱码解决方式是在添加对话框下方手动指定编码为UTF-8或GBK。常见做法是先加载一次看属性表里中文是否正常。如果乱码断开图层连接重新添加这次在编码下拉框里选择UTF-8若仍然乱码换GBK再试。dbf文件的中文字符集通常是GBK来自传统测绘数据或UTF-8近年整理的数据多试一次就能确定。注意编码和坐标系是两个独立设置项。编码影响属性文字坐标系影响几何位置别混为一谈。改编码不会让图层位置变正改坐标系也不会让乱码变成中文。加载完成后打开图层属性检查几何类型与之前判断是否一致。比如道路图层应该是LineString如果显示成MultiLineString也正常大多数道路shp为了容纳断头路和立交会使用MultiLineString保存。3.3 按区县筛选与道路分级配色出图第一个需求通常是「把某几个区县的路网单独拿出来」。如果数据里带区县名称字段用要素筛选不是属性表筛选就能建立命名筛选-- QGIS表达式按名称字段筛选目标区县将目标区县替换为实际名称 ADNAME 目标区县 -- 如果要同时包含多个区县 ADNAME IN (区县甲, 区县乙)原始数据里通常有行政区划面以及带ADNAME字段的区县界图层。在矢量图层面板上选中行政区划层右键选择「过滤…」把上面表达式填进去。这样图层只显示匹配区县的图元后续导出的布局也只会包含这些要素不用做几何裁剪速度也快。道路分级配色是出图里最能拉开差距的一步。在图层属性→符号化→分类里按CLASS字段做分类符号然后分别设置线宽与颜色。高速公路用红色粗线、国道用橙色中等宽度、省道用黄色虚线、县道用浅灰色细线、铁路用黑白相间线。分类符号化完成后打开打印布局插入地图框设置比例尺把图例和指北针放好一张底图就成型了。配色参数没有绝对标准但有一个原则主路显眼、辅路退后。如果你要做的是规划底图建议把建筑物面层透明度调到60%以上这样路网叠加在上面不会被遮挡。这个技巧在实际出图阶段很实用很多新手把所有图层都设成不透明最后打印出来一片黑反而看不清主路。3.4 shp转GeoJSON/KML命令行与QGIS两种方式数据要交给前端或移动端使用时shp通常要转成GeoJSON或KML。GeoJSON是Web GIS的事实标准KML适合部分桌面端和移动端查看。转格式时绕不开一个关键参数目标坐标系。# 转GeoJSON同时转为WGS84经纬度EPSG:4326 ogr2ogr -f GeoJSON output.geojson input.shp -t_srs EPSG:4326 -lco ENCODINGUTF-8 # 转KMLKML规范强制要求WGS84 ogr2ogr -f KML output.kml input.shp -t_srs EPSG:4326说明-t_srs是输出坐标系不写的话默认沿用源坐标系得到的结果可能是投影坐标下的GeoJSON前端加载到地图上会错位。建议转Web端用数据时统一输出EPSG:4326。如果数据本身已经是WGS84也可以省略-t_srs减少一次投影变形计算。QGIS里另存为也可以完成同样的事右键图层→导出→另存要素为格式选GeoJSONCRS选WGS84 EPSG:4326编码选UTF-8。两种方式结果一致命令行优势在于可以批量处理多个图层写一个for循环把目录里的所有shp一次性转出来这在图层超过十个时能省不少时间。4. 坐标系实战CGCS2000、WGS84与高斯投影的转换与对齐矢量数据翻车最多的地方是坐标系。不是数据错而是你不知道数据在哪个坐标系里或者你以为它在A坐标系实际上它在B坐标系。先说结论这类省级数据最常遇到三种坐标系——CGCS2000地理坐标、CGCS2000高斯投影坐标以及被各种在线底图默认使用的WGS84/Web墨卡托。电子地图领域还经常混入加密坐标GCJ-02所以叠图前一定要弄清数据的原始坐标系是什么。4.1 用文本打开.prj文件一眼判断数据是什么坐标系shp的坐标系写在.prj文件里用任意文本编辑器打开就能看到一段WKT描述。不要被这串英文吓到判断坐标系只需要找几个关键词# 查看prj内容例如某个数据集的坐标系描述 cat 行政区划.prj如果内容里有「China Geodetic Coordinate System 2000」或「CGCS2000」说明数据是2000国家大地坐标系这是目前国内测绘数据的标准。如果内容里有「GCS_WGS_1984」说明是WGS84地理坐标。如果内容里有「Gauss_Kruger」或「Transverse_Mercator」且出现了中央经线CM说明是高斯投影下的平面坐标单位是米。拿不准时打开QGIS的图层属性→信息页签系统会显示「CRS: EPSG:4490 - CGCS2000」之类的标准描述。如果是未知或缺失QGIS会显示一个警告图标这时候不要点确定先手动选坐标系否则后续分析全是错位。4.2 几个绕不开的EPSG代码4326、4490、3857EPSG代码坐标系名称经纬度/投影常见用途EPSG:4326WGS84地理坐标系经纬度Web前端、GPS数据、GeoJSON规范EPSG:4490CGCS2000地理坐标系经纬度国内测绘数据的经纬度形态EPSG:3857Web墨卡托投影米投影在线地图瓦片、Leaflet/Mapbox底图高斯-克吕格投影CGCS2000 / 3-degree Gauss-Kruger CM 120E米投影省级测绘成果、工程坐标EPSG:4326和EPSG:4490都是经纬度坐标只是椭球参数不同数值差异在几米到几十米量级。EPSG:3857是Web墨卡托在线底图全是它。高斯投影是平面坐标数值是几十万到几百万的量级和经纬度数值差了好几个数量级如果你加载一个图层发现坐标值是「38万、33万」这种基本就是高斯投影。省级数据大多统一到中央经线120E的3度带也就是「CGCS2000 / 3-degree Gauss-Kruger CM 120E」。只需要记住看到CM后面的度数是120E就约等于这类应急出图的常用投影。在QGIS的坐标系选择框里搜「120E」就能定位到这一项。4.3 重投影与「指定投影」是两回事错位数据怎么救很多人在图层偏移几百米时第一时间做「重投影Reproject」结果发现偏移还在甚至更乱。这是因为重投影解决的是「坐标系已知但需要变换」的问题而偏移通常是因为「坐标系本身被标错」。场景区分如下图层坐标是米制、数值几百万系统却标成EPSG:4326需要「指定投影Assign CRS」改成正确的高斯投影而不是重投影。图层坐标系正确需要从CGCS2000转到WGS84用「重投影」或者导出时在目标CRS里设置。QGIS里指定投影的入口图层属性→来源→当前CRS右侧的按钮弹出对话框搜索「CGCS2000 / 3-degree Gauss-Kruger CM 120E」指定后图层回到正确位置。重投影入口右键图层→导出→另存要素为CRS选目标坐标系。这个区别在概念上不大实际使用时却是免费的后悔药先尝试指定投影如果图元落到合理位置就不用重投影。反过来如果先做了重投影原始坐标信息会被改写想恢复还得重新加载数据。4.4 用Python批量转出WGS84经纬度如果要把多个图层的几何坐标批量转成WGS84经纬度用Python的geopandas库最省事。下面这段脚本遍历指定目录下的shp读取后统一重投影到EPSG:4326直接写出GeoJSON供前端使用import geopandas as gpd from pathlib import Path in_dir Path(data_in) # 替换为你的解压目录 out_dir Path(data_out_wgs84) out_dir.mkdir(exist_okTrue) for shp in in_dir.glob(*.shp): gdf gpd.read_file(shp) # 读取时自动读取.prj里的坐标系信息 gdf gdf.to_crs(epsg4326) # 重投影到WGS84经纬度 out_path out_dir / f{shp.stem}.geojson gdf.to_file(out_path, driverGeoJSON, encodingutf-8) print(f转换完成: {shp.name} - {out_path.name})参数说明gpd.read_file会读取shp配套的.prj来确定源坐标系如果缺了.prjgeopandas会当作未知坐标系to_crs会报错或产生错误结果。所以跑脚本前先补齐.prj。to_crs(epsg4326)是重投影操作不是原地修改内存对象必须重新赋值给变量。如果你只是要快速核对坐标数值量级可以用gdf.geometry.to_wkt()把坐标打印出来不用等文件写出。5. 避坑指南江苏矢量数据使用中的五个翻车现场以下五个问题是我在这类省级矢量数据上反复遇到的真实案例。每一条都按「现象 → 原因 → 解决」的顺序写可以直接对照排查。5.1 属性表中文全部变成问号现象加载shp后打开属性表所有中文属性显示成一串问号或乱码英文和数字正常。原因dbf文件的字符集和QGIS加载时使用的编码不一致。老式测绘数据常用GBK/GB2312近年整理的数据常用UTF-8而dbf文件本身没有存储编码信息只能靠.cpg文件声明很多数据包没有包含.cpgQGIS默认按系统编码猜测猜错就乱码。解决重新添加图层在编码下拉框里依次尝试UTF-8和GBK一般能恢复正常。更保险的做法是用文本编辑器修改.cpg文件内容为GBK或UTF-8保存后重新加载图层。此后拿到数据我会先看有没有.cpg文件没有就预设两种编码不再浪费时间猜属性乱码这个坑能用两分钟排除掉别拖。5.2 道路叠加影像后整体偏移几百米现象道路线层能显示但叠到卫星影像或在线底图上时整体朝某个方向偏了几百米局部桥和路也对不齐。原因绝大多数情况是数据的坐标系被标错或未定义叠加时在线底图的Web墨卡托投影自动转换基于错误的源坐标系转换自然整体偏移。少数情况是数据本身采用GCJ-02加密坐标这和标准坐标系之间是加密偏移关系没法用常规七参数解决。解决先看.prj文件判断坐标系描述再对照同区域的高斯投影参数用「指定投影」修正。如果指定CGCS2000 120E后叠图正常说明只是标注错误。如果所有合理参数都试过仍然偏移且偏移量在几十到几百米、方向杂乱考虑数据是否被加密处理过这类数据只能做抽样校正无法靠投影变换解决。5.3 建筑物面数据自相交缓冲区一跑就报错现象对建筑物面层做缓冲区Buffer时提示geometry is invalid或者计算面积时个别要素结果为NULL。原因shp中的面要素来自不同批次数字化存在自相交环、重复节点、极小缝隙。空间分析工具通常要求几何有效这类错误数据会被直接标记无效不参与计算。解决用QGIS的处理工具「修复几何」Fix geometries处理后再做分析。命令行可以用ogr2ogr的-makevalid参数# 修复几何并输出为新的shp不指定坐标系参数时输出沿用源坐标系 ogr2ogr -makevalid 建筑物_修复.shp 建筑物_原始.shp参数说明-makevalid是GDAL提供的几何修复选项把自相交、环方向错误等修复为合法几何。修复后要重新检查要素数量因为部分严重破损的面会被拆成多个面数量会变化。也可以先用QGIS菜单「矢量」→「几何工具」→「检查有效性」把错误要素定位到属性表手工修正后再分析。5.4 分县面积合计与官方统计对不上现象把区县面层按ADNAME字段聚合计算面积求和后比官方面积少或多了百分之几到几十。原因面层的边界精度、数据源比例尺、投影方式都会影响面积统计。小比例尺数据在山区边界化简程度大面积偏差就会放大。高斯投影下不同位置面积也有变形。解决如果是省级总量对比用经纬度坐标EPSG:4490计算面积在QGIS字段计算器里选中「椭球面积」选项不要用投影坐标下的平面面积。如果是分县汇总先用拓扑检查确认接边无缝隙无重叠再按区县名称分组统计。切记统计口径要一致官方面积通常是基于基础测绘或土地调查口径矢量化数据达不到同精度时存在百分之几的差是正常的不是数据彻底错了图上标注数据来源和统计时间即可。5.5 同一条国道在两个图层里被重复数字化现象道路层里有两条路径几乎完全重合路网规划、最短路径分析时道路数量统计比实际多一倍。原因数据整理时合并了不同来源的数据同一道路既存在于基础道路层又存在于专题道路层没有做去重。有些还是因为数字化时沿线走向绘制了两遍。解决在QGIS中先把道路层按距离做缓冲合并然后做去重复几何操作。实际工作流我会先做拓扑检查在Processing里用有效性检查找出重叠的路段再按道路等级优先级删除低等级副本。如果是同图层重复直接用QGIS的「删除重复几何」按道路中心线去重。注意去重前备份避免误删同名不同线的真实道路。6. 最后的检查清单六个步骤验完一套矢量数据数据可以不用但验数据的流程不能省。这套六步法花十五分钟就能把一套矢量数据的健康度摸清楚。第一步确认文件成套性。按.shp/.dbf/.prj/.cpg逐个图层checkcount一次缺文件就拉警报。第二步加载后看要素数。QGIS状态栏会显示要素总数对比压缩包内附的属性统计或说明文档数量级不对就要排查。第三步坐标系核对。读.prj在QGIS里打开图层信息确认CRS描述与预期不符就立刻处理。第四步属性字段统计。右键图层→打开属性表→字段统计重点看NULL值比例和字段值分布。第五步几何拓扑检查。用Processing里的「修复几何」Fix geometries跑一遍观察修复数量。第六步抽样叠图。把道路层叠加到影像底图随机看5到10个位置确认道路中心线与影像对齐这一步能发现前面所有步骤都漏掉的坐标加密或偏移。这六步里第六步最容易遗漏因为地图上「看起来能用」实际上藏着几百米的偏移。我一般会在QGIS里用半透明符号把道路叠到影像底图上挑几个路口和桥梁位置逐点比对。再配合控制台命令快速确认图层元信息# QGIS Python控制台输出当前图层要素数、几何类型与CRS layer iface.activeLayer() print(要素数:, layer.featureCount()) print(几何类型:, layer.geometryType()) print(CRS:, layer.crs().authid(), layer.crs().description())这段代码的价值在于没打开属性表的情况下一条命令同时确认了要素数、几何类型、坐标系三个关键信息比人工点菜单快得多。从那以后我每次拿到类似「江苏省矢量地理数据」这样的资源包都会强制走一遍这个检查清单不因为数据看着完整就跳过坐标和拓扑验证。毕竟出图翻车砸的是交付时间希望帮到你。本文还有配套的精品资源点击获取