简介:2025年江苏省住宅小区点位数据采用Shp矢量格式与Wgs1984坐标系统,面向GIS开发、城市规划、房地产研究及智慧城市应用人群。数据集中包含小区名称、地址、入住人口、房屋数量、物业类型等属性字段,可支撑住宅空间分布、人口密度、交通流量与商业选址分析。压缩包共7个文件,覆盖shp空间图形、dbf属性表、prj投影定义、sbn/sbx空间索引、shx索引及xml元数据,完整度高,整体仅2.83MB。基于2025年最新时点坐标,借助ArcGIS、QGIS等工具可直接加载、查询与叠加分析,并配合sbn/sbx索引实现快速检索,为精细城市管理、公共安全布点、房产市场研判及区域规划提供可靠底图,对城市更新与设施布局也有直接参考价值。目前已有66人学习下载,适合需要近期微观地理样本开展教学、科研或项目开发的读者。
1. 这份江苏省住宅小区点位 Shp,先回答三个“能不能”
拿到这份「2025年江苏省住宅小区点位数据(Shp矢量数据,Wgs1984).zip」,第一反应别急着解压。先问自己三个问题:这份 Shp 数据能不能解决我的问题?和别的数据打架时我该信谁?坐标是 Wgs1984 意味着什么?答案是:它解决的是“全省范围内住宅小区在哪、有多少、密度如何”这一类问题,它是点数据,每一个点代表一个小区的位置。它能回答选址初步筛选、设施覆盖分析、“小区周边几公里有什么”这类问题,但它不是宗地边界图,更不是楼盘分布到户数的数据。适合用的人:城乡规划从业者、GIS 专业学生、做房产与生活配套研究的咨询人员。先把这个边界划清楚,后面你解压操作时心态就不一样了。
2. 解压与体检:Shapefile 不是单文件,按这五步确认数据状态
2.1 为什么压缩包里是一堆同名不同后缀的文件
这是第一次接触 Shp 的新手最容易疑惑的地方。你解压后看到的不是“一个文件”,而是一组文件名相同、后缀不同的文件,后缀通常包括 .shp、.shx、.dbf、.prj,有的打包者还会带上 .cpg、.sbn、.sbx。它不是坏了,也不是重复文件,而是 Shapefile 本是 ESRI 定义的一种“文件组格式”,几何、索引、属性、坐标系分开存,缺任何一个,数据都不完整。
下面这张表建议你解压后对照着看,每条都对应一个功能位,也是后面排查问题的出发点。
| 后缀 | 存放内容 | 作用 | 缺失后的表现 |
|---|---|---|---|
| .shp | 要素几何(点/线/面坐标) | 地图显示的基础 | 图面空白,只剩表 |
| .shx | 几何索引 | 快速定位要素 | 图层无法打开或报错 |
| .dbf | 属性字段(dBase 表) | 存放名称、区县等 | 点还在,属性表打不开 |
| .prj | 坐标系定义(.prj 文件) | 告知软件投影信息 | 坐标系显示 Unknown,叠加错位 |
| .cpg | 属性编码声明 | 解决中文乱码 | 中文名变“?”或乱码 |
这里有一个很常见的错误操作:把 zip 文件直接拖进 ArcGIS 或者 QGIS。结果图面什么都没有,只有图层列表里多了一个“打不开”的项。原因是 GIS 的拖拽逻辑只识别文件夹、要素类或图层文件,不识别压缩包。记住:先解压,再打开。
2.2 解压前用命令行检查压缩包完整性,别等解压一半才发现文件坏
我习惯在 Windows 或 macOS 终端里先用 unzip 命令看清单,而不是双击压缩包。这样能提前看到这个 zip 里到底包含了哪几个文件、有没有 .prj、文件大小是否合理。命令很简单:
unzip -l "2025年江苏省住宅小区点位数据(Shp矢量数据, Wgs1984).zip"-l 参数是 list,只列清单不解压。输出里你会看到文件名和后缀,如果这一堆文件里没有 .prj,就要警惕坐标系信息可能丢了。清单正常后,再跑一次完整性测试:
unzip -t "2025年江苏省住宅小区点位数据(Shp矢量数据, Wgs1984).zip"-t 是 test,它会逐个文件计算校验值,末尾显示No errors detected in compressed data才说明压缩包没损坏。千万别省这一步。有人为了省时间直接双击解压,结果解压到一半提示 CRC 错误,再重新下载,半天没了。
工具方面,如果你在 Windows 上不想用命令行,Bandzip 和 7-Zip 也可以,它们能直接预览压缩包内容,完整性校验在右键菜单里也有选项。重点是那个 .prj 文件,它决定了你后面的坐标系是不是 Unknown。
2.3 解压后第一步是“体检”,不是直接画图
解压出来后,我一般会按五步走,花三分钟确认数据状态,比后面出错再返工划算得多:
- 看文件是否齐全。对照上面那张表,至少应该有 .shp、.shx、.dbf、.prj 四件套,缺任何一个都不要强行加载。
- 看 .prj 文件内容。用记事本打开 .prj,正常情况下里面有一段 WKT 文本,你会看到
GEOGCS["GCS_WGS_1984"...或者DATUM["D_WGS_1984"...这样的字符串,这代表坐标系定义写进去了。 - 在 ArcGIS Pro 中加载并查看图层属性。右键图层 → 属性 → 源,确认“地理坐标系”显示为
GCS_WGS_1984,“投影坐标系”显示为“无”。这是最直观的坐标系体检入口。 - 查看要素范围。在内容列表右键图层 → 属性 → 源里有一项“范围”,江苏的经纬度大致范围是 X 在 116 到 122 之间,Y 在 30.7 到 35.1 之间。如果你的范围显示 X 从 0 到 100,Y 从 0 到 100,那就是坐标系定义出了问题。
- 打开属性表扫一眼字段名和首行记录。重点确认有没有编码问题:中文是正常显示还是变成问号。
ArcGIS Pro 的打开操作也顺手说下,因为很多入门用户困在第一步:在目录窗格里点击“连接到文件夹”按钮,选中解压后文件所在目录,然后从目录窗格展开文件夹,把那个 .shp 文件直接拖到地图视图里。QGIS 更简单,直接把解压后的 .shp 文件拖进图层面板,它会自动读取并弹出选择坐标系的对话框,如果它侦测到 .prj 就会直接跳过。
3. 坐标系是底线:WGS1984 是什么、什么时候要转、转成什么
3.1 WGS1984 不是“没坐标”,它只是用度来存储坐标
很多第一次接触 GIS 数据的从业者把“投影坐标系”和“地理坐标系”搞混,看到 WGS1984 就以为这个数据没有投影,不能用来算面积。这其实是理解偏差。WGS1984 是全球定位系统 GPS 所用的大地坐标系,它有一套完整的椭球参数和坐标定义,不是“没有坐标”,只是它的单位是十进制度,不是米。这份数据的空间参考被明确写成 WGS1984,在 EPSG 体系里的编号是 4326,一个全球通用的编码。
| 坐标参考 | EPSG 编号 | 单位 | 典型应用场景 |
|---|---|---|---|
| WGS 1984 地理坐标系 | 4326 | 度 | GPS 原始数据、在线底图、数据交换标准 |
| WGS 1984 UTM Zone 50N | 32650 | 米 | 江苏大部分区域的平面投影分析 |
| WGS 1984 Web Mercator | 3857 | 米 | Web 地图瓦片底图叠加 |
| CGCS2000 3-degree Gauss-Kruger CM 120E | 无统一固定号(各省库各异) | 米 | 与国土测绘成果对接时使用 |
这里有必要解释清楚:网络上下载的底图切片或者在线地图服务,用的多半是 Web Mercator(EPSG:3857),但它和原始 WGS1984 经度纬度坐标不是一回事。当你在 ArcGIS Pro 里叠加在线底图时,软件会自动做动态投影,看起来能叠上,可是一旦你要自己量距离、做缓冲区,在度单位下工具会直接给你输出一个“度”的结果,完全没有实际意义。所以“要不要转坐标”取决于你接下来要做什么操作。
3.2 在 WGS1984 下直接量距离,会得到“度”而不是“米”
这是最容易踩的坐标坑。拿这份江苏小区点位数据来说,你在 ArcMap 里打开,用测量工具量两个点之间的距离,显示的是 0.25,你可能以为这是 0.25 米。错了,这是 0.25 度。
在地理坐标系下,1 度纬度约等于 111 公里,1 度经度在江苏大约对应 94 到 98 公里(因为经线在高纬度处会收敛)。所以你在度单位下做的缓冲区、近邻分析,全部是失真结果。比如你用“缓冲区”工具在 EPSG:4326 下给一个小区做 0.01 度的缓冲区,这个 0.01 度在不同纬度上对应的真实距离完全不同,在连云港和在苏州算出来的实际半径差很多。
常规解决方案是:加载数据后马上转到投影坐标系。我一般会先看这次分析的尺度。全省范围的散点分布、宏观密度,用 WGS 1984 UTM Zone 50N(覆盖江苏大部分区域)就够;但如果你只是做某个地级市的精细分析,而周围配套数据都是国土口出来的 CGCS2000 成果,那你就得统一到 CGCS2000 的高斯投影上,否则后续和图斑数据叠加会错位。
3.3 用 ArcGIS 的 Project 工具做投影转换,参数公寓两层
投影转换的位置在 ArcGIS Pro 的菜单里:分析工具 → 数据管理工具 → 投影和变换 → 投影。这个工具输入是原始 Shp、输出是新 Shp,关键参数只有两个:一个是输出坐标系,一个是地理变换(如果输入输出基准面不同,就需要选择变换公式,比如从 WGS1984 转到 CGCS2000 时通常要选“WGS_1984_to_CGCS2000”之类的七参数转换)。
需要注意:很多人在“导出数据”时看到有“数据框坐标系”选项,图省事选了它,结果只是改了显示坐标,底层数据几何并没有真的变。这个操作叫“动态投影”,图层上看起来坐标变了,你用属性表里的 SHAPE 字段去读,数值还是原来的经纬度。这也是为什么有些人导出后发给别人,对方打开又错位——因为数据根本没转换成功。真正的投影转换必须用 Project 工具重新生成一个新的 Shp 文件,保存为 .shp 后再发给对方才有意义。
转换后的验证很简单:右键新图层 → 属性 → 源,看“投影坐标系”列是否显示为 UTM 一类的平面坐标,同时“线性单位”显示为“米”。再抽一两个点读坐标,X 应该是六位或七位数(东坐标),Y 是两位或三位数(北坐标),而不是 116 那样的两位数小坐标。
4. 把点位用起来:核密度、空间连接和导出 KML/CSV/WKT
4.1 核密度分析:先找“小区扎堆”的区域
拿到一份全省小区点位 Shp,最常规的用法就是看空间分布。点位本身只是点,人眼会骗人,看似“扎堆”的地方可能只是底图加载效果,所以要用核密度估计把点密度变成连续表面。ArcGIS 的工具位置在:空间分析工具箱 → 密度分析 → 核密度分析。输入这个小区点图层,输出为一个栅格。
核密度的两个参数直接影响结果,不能全用默认值。输出像元大小默认可能太小,全省层面建议设在 100 到 500 米之间,太大细节丢失,太小耗时长且容易产生空洞。“搜索半径”这参数很关键,默认值是按输入点范围计算的,但在全省尺度上通常不够平滑。
| 分析尺度 | 建议搜索半径 | 输出像元大小 | 适用问题 |
|---|---|---|---|
| 全省宏观分布 | 10 公里 | 500 米 | “江苏小区过度集中在哪儿” |
| 地级市尺度 | 3 ~ 5 公里 | 100 米 | “这个城市有几个集聚中心” |
| 区县尺度 | 1 ~ 2 公里 | 50 米 | “片区配套是不是均匀覆盖” |
核密度输出后,最好把栅格用“按属性提取”或者“栅格计算器”重分类成几个等级,结合你所在区域做判断。不要直接拿默认的连续色带去出图,那样图例范围跨度太大,非专业读者看不懂。
4.2 用空间连接统计每个区县有多少个小区
另一种高频需求是:把小区点落到行政区划上,统计各区县的小区数量。这个用“空间连接”工具最直接。字段方面,你只需要准备两份数据:一份是这份小区点 Shp;另一份是江苏省的区县边界 Shp,可以是公开的行政区划数据。工具位置:分析工具 → 叠加分析 → 空间连接。
目标要素选区县面要素,连接要素选小区点要素,连接操作选择“JOIN_ONE_TO_MANY”时,会在输出要素里生成一个 Join_Count 字段,每一条输出记录对应一个区县多边形,Join_Count 的值就是落在该区县内的小区个数。
参数的注意点有两个。第一,“匹配选项”要选“INTERSECT”,这是默认值。第二,如果你的区县边界是经纬度坐标而小区点也是经纬度坐标,那可以用;但如果区县边界是投影坐标而这份小区点是经纬度,需要先统一到同一坐标系再做连接,否则会大量漏匹。连接完成后,验证一下总数:右键输出图层的属性表,对 Join_Count 做“统计最小值/最大值/总和”,把总和和小区点的总个数对比,二者应该一致。如果总和不一致,多半是有若干点恰好落在边界线上,匹配选项改为“CLOSEST”或者按字段阈值处理。
4.3 三个导出出口:KML 给在线地图、CSV 给 Excel、WKT 给 PostGIS
很多同事拿到小区点位后,只想在手机里看,或者把名单导进报表系统。这个时候就要导出成别的格式。
第一,导出 KML。用“图层转 KML”工具(转换工具 → 转出为 KML → 图层转 KML)。参数里“图层范围”和“输出图像大小”一般都默认就行,唯一要留意的是 KML 要求要素的坐标系是 WGS1984,如果你的数据已经转成了 UTM,工具会自动动态转换,通常不会报错。生成的 KML 可以直接双击打开到 Google Earth 里看。
第二,导出 CSV。ArcGIS 里右键图层 → 数据 → 导出表格,输出格式选 CSV,这样只导出属性表,不导出坐标。如果你需要带经纬度的 CSV,偏好做法是用“添加 XY 坐标”工具,在属性表里添加 POINT_X 和 POINT_Y 两个字段,然后再导出。这个 CSV 可以直接喂给 Excel、FineBI 这类工具做统计图表。
第三,导出 WKT。PostGIS 或者空间数据库入库时,经常需要把 Shp 转成文本格式再导入。ArcGIS 里用字段计算器就可以做。新建一个“文本类型”字段,右键字段 → 字段计算器 → 解析程序选 Python,输入代码。
# 获取要素几何并导出为 WKT 格式文本 def getWKT(geom): return geom.exportToString()参数说明:geom是要素的 SHAPE 字段对象,exportToString()是 ArcGIS 几何对象自带的 WKT 输出方法。在这一层如果你用的是 QGIS,更简单,直接在 QGIS 里用表达式geom_to_wkt($geometry)就能生成 WKT 列。生成的 WKT 可以直接配合 PostGIS 的ST_GeomFromText()函数批量入库。
如果你后续想直接入库到 PostGIS,SQL 写法参考这样:
-- 假设已有一个目标表 area_points,字段含 name、district、geom INSERT INTO area_points (name, district, geom) SELECT name, district, ST_GeomFromText(wkt_text, 4326) FROM temp_points_import;这里ST_GeomFromText的第二个参数 4326 表示导入后的坐标系是 WGS1984,如果你的目标表用了投影坐标,这里就应该写成对应的 EPSG 编号。不要省略坐标系编号,否则 PostGIS 会把几何类型存成 0 号(未知坐标系),后面做空间查询时无法跟其他图层匹配。
5. 避坑记录:这份 Shp 使用中反复出现的五个坑
5.1 直接把 zip 拖进 ArcGIS,图层列表里多了一个解不开的文件
现象:从网盘下载这份 zip 后不解压,直接按住拖到 ArcGIS Pro 地图里,图面空白,图层上出现一个带“不可访问”图标的项目。
原因:ArcGIS 的拖拽操作只支持文件夹、Shp、GDB、图层文件等本身可被数据源识别的对象。zip 不是数据格式,软件无法解析压缩包内部的 .shp 核心文件。
解决:养成习惯,任何 zip 压缩的数据资源第一动作永远是解压,然后把解压出来的 .shp 文件连同它的 .shx、.dbf、.prj 一起放在同一个文件夹里,再从该文件夹加载。
5.2 属性表里小区名称全部显示为“??”
现象:打开属性表,名称字段的值是一排问号,或类似“尀”这样的乱码字符,但几何要素本身显示正常。
原因:这个 Shp 的 .dbf 文件使用 GBK 或 GB2312 编码存储中文,而你的 GIS 软件默认用 UTF-8 读取属性表,两者不匹配导致解码错乱。
解决:ArcGIS Pro 中,在地图属性里的“地理数据库连接属性”层面设置比较麻烦,更直接的办法是在 QGIS 中打开时,在“数据源管理”弹窗的“属性编码”里手动选择 GBK 或 GB2312,确认中文正常后再保存一个新的 Shp。如果不想用 QGIS,也可以用 Notepad++ 打开 .cpg 文件,把内容改成UTF-8,但这个只对以后新建数据有效,对已存在的 .dbf 乱码并不通用。
5.3 点位叠加后跑到海里,或者在江苏和山东之间漂浮
现象:把这份 Shp 加载到底图上,点位没有显示在江苏省内,而是显示在零纬度附近的海面或完全错位的方位。
原因:这是典型的“坐标系定义丢失”。你手里这份 Shp 很可能是原始文件没带 .prj,而加载软件把它当成未知坐标系,或者默认成 WGS1984 Web Mercator 之类投影坐标来渲染,导致经纬度数值被错误解算成平面坐标,位置自然偏到海里。
解决:先用“定义投影”工具(数据管理工具 → 投影和变换 → 定义投影)手动给这份数据重新指定坐标系,选GCS_WGS_1984,不需要做数值变化,只是告诉软件“这是一份经纬度坐标”。然后你看到的点位就会回到江苏省范围。注意不要用“投影”工具,那个会改变坐标数值,而这里只需要定义。
5.4 统计出来的小区数量比预想少了三分之一
现象:空间连接统计后,发现区县小区总数量和这份数据实际点位数对不上,少了相当一部分。
原因:点位数据不是完美无缺的。原始数据可能包含重叠点位、空几何或者部分点位没有落在区划边界内部(比如刚好在建的楼盘还未上图,或者点位落在江面上)。空间连接默认只匹配与区县多边形相交的点,这一部分点被漏掉了。
解决:先对点图层做一次属性表检查,用“按属性选择”选中经纬度为空的记录并删除;再用“删除相同项”工具(数据管理工具 → 常规 → 删除相同项)按坐标字段去重。最后用一个 1 米的缓冲区把点稍微扩大再做空间连接,能减少边界误判导致的漏匹配。做完这些再统计,结果会接近真实。
5.5 和在线底图叠加时差了几十米到几百米
现象:WGS1984 的点和高德/腾讯底图叠加,点位整体向西偏移约百米的量级。
原因:国内互联网地图(高德、腾讯、百度)出于坐标加密要求使用 GCJ-02 坐标,和 WGS1984 有几十到几百米的系统差。这份 Shp 是 WGS1984,直接叠加必然存在偏移。
解决:判断你的底图来源。如果底图是天地图、ArcGIS Online 或者 Esri 底图,用的多是 WGS1984 或 CGCS2000,偏差极小;如果是高德底图,就需要先用坐标纠偏工具把点转成 GCJ-02 后再叠加。反过来,如果你拿到的是从高德下载的 POI 点,也要先转回 WGS1984 才能和这份数据放在同一图层分析。不要混用,也不要试图用“手动平移”解决,因为不同纬度偏移量不同,手工平移只能局部对齐。
6. 最后一步:把这份数据整理成你项目的“干净底稿”
6.1 用 SQL 查询把“有用字段”和“无用字段”分开
拿到这份 Shp 后,属性表里的字段往往多于你的实际需求,有一部分是下载时自带的 ID 号、区域编号,另一部分才是有业务含义的字段。直接在 ArcGIS 属性表里用 SQL 筛选出你要的记录,再复制出来独立成一个 Shp,能让后续分析省很多内存。在 ArcGIS Pro 里“按属性选择”对话框写 SQL 的一般格式:
SELECT * FROM xiaoqu WHERE district = '南京市' AND name IS NOT NULL字段名district、name是示例,实际字段名以你解压后属性表的表头为准。IS NOT NULL可以直接过滤掉无名称记录,避免后面制图时出现空标签。如果你用的是 QGIS,表达式写法相似:
"district" = '南京市' AND "name" IS NOT NULL查询结果选中的要素可以右键图层 → 导出要素 → 保存为新 Shp。建议这样清洗完再开始做核密度或空间连接。
6.2 用 GeoPandas 批量处理:换坐标系、删字段、重新导出
当你的项目不是一次性分析,而是要做成一个持续更新的底稿,我用 Python 的 GeoPandas 做批量清洗最顺手的做法是这样:
import geopandas as gpd # 读取这份 Shp,注意 encoding 参数对应 .dbf 编码,中文乱码时试 gbk gdf = gpd.read_file("江苏省住宅小区点位.shp", encoding="gbk") # 只保留需要的字段,geometry 默认会自动保留 keep_cols = ["name", "district", "geometry"] gdf_clean = gdf[[col for col in keep_cols if col in gdf.columns]] # 清除空几何,防止后面空间计算报错 gdf_clean = gdf_clean[~gdf_clean.is_empty] # 重投影到 UTM 50N,单位变成米,后续可做缓冲区 gdf_clean = gdf_clean.to_crs(epsg=32650) # 重新导出为 Shp,注意这里再次遇到编码问题:utf-8 只是保存属性,不会让中文变乱码 gdf_clean.to_file("xiaoqu_clean.shp", encoding="utf-8") print(gdf_clean.head())参数说三个。第一个是encoding,它决定了读 .dbf 属性时用什么编码解码,如果你的字段中文在 ArcGIS 中正常,但在 GeoPandas 里乱码,试着把gbk换成utf-8,两种都试一次,总有一个能对齐。第二个是epsg=32650,这是 WGS1984 UTM 50N 的编码,适用于江苏大部分区域,如果你要跟国土数据对齐,改成 CGCS2000 的 EPSG 编码也可以,但需要留意原来的 .prj 里是否带了转换参数。第三个是to_file时的encoding,它不影响几何,只影响导出的 .dbf 属性编码,保持utf-8通常是最稳妥的。
那之后我再分析任何全省点位,都会先跑一遍这段代码,把 Shp 整理成字段清晰、坐标系固定、空值清干净的底稿,再分发到项目组。这个习惯让我少了很多返工。回想刚入行那年,我直接在未校验的 WGS1984 原数据上做了一版缓冲区分析,结果输出单位是“度”,被带教老师当场打回,从那以后我每次拿到 Shp 的第一件事就是先确认坐标系和字段编码,强制走一遍清洗流程再动手分析,希望帮到你。
本文还有配套的精品资源,点击获取