新闻详情

新闻详情

首页 / 资讯中心 / 详情

POI数据从压缩包到分析图层:shp清洗与空间叠加实战

发布时间:2026/9/16 10:14:11来源:尧图网络
POI数据从压缩包到分析图层:shp清洗与空间叠加实战
简介杭州市2020年POI数据集面向GIS开发者、城市规划与商业分析人员提供覆盖全市的POI兴趣点矢量数据与基础地理底图。包内共120个文件以shp、dbf、prj、shx等GIS常用格式为主可直接用于ArcGIS、QGIS等平台另提供13个xlsx表格文件适合习惯用Excel完成筛选统计的读者还包含30M分辨率DEM高程tif与tfw配准文件便于地形与坡度分析。POI分类涵盖餐饮、住宿、购物、医疗、政府机构、风景名胜等常见类别并配有行政区划数据辅助空间边界界定整体为非涉密内容适合教学实验、课题研究与业务演示。已有868人学习包体49.62MB解压后目录清晰可节省大量数据采集与整理时间是开展杭州区域空间分析的实用基础数据。1. 从7z压缩包开始的杭州市POI数据工程化使用拿到一份杭州市2020年POI数据集压缩包约几百MB里面既有30米分辨率的DEM栅格又有行政区划矢量边界还有shp格式和Excel格式的POI点数据。对做城市数据分析、门店选址、网格化运营的人来说这类数据是典型的“底图点位”组合DEM用来算坡度坡向、可视域行政区划用来做空间裁剪和汇总POI则直接支撑业态分析和可达性计算。非涉密、双格式交付意味着不用处理脱敏流程拿到就能进分析管线。实际拆包时容易被忽略的是压缩包内按业态分了十几个目录每个目录里都有配套的.cpg编码文件再者这批数据是2020年的恰好是杭州市区划调整前后的节点行政区划边界和POI分类都需要在入库前做一致性检查。面向GIS开发、数据分析和规划相关从业者这篇文章不聊概念直接讲怎么把这份数据从压缩包变成能跑分析的干净图层。2. shp工具链准备与7z解压、shp完整性体检2.1 用7z命令行解压并处理中文文件名这份数据集以.7z存储常见的图形解压工具当然可以但更推荐命令行处理尤其是linux服务器上做自动化入库的场景。7z命令行有几个细节需要留意7z x 杭州市2020年POI数据集.7z -o/home/gis/data/hangzhou_poi -y -pYourPassword参数说明x表示解压并保留目录结构-o指定输出目录且其后不要有空格-y跳过一切确认提示-p后接密码——该资源非涉密但如果是加密扩展包这种写法在脚本里更安全。解压后建议第一时间检查目录树tree /home/gis/data/hangzhou_poi -L 22.2 CPG与PRJ文件的存在说明编码和坐标系有声明解压后会看到大量.CPG、.cpg后缀的文件例如“医疗保险服务.CPG”。很多初学者把这些文件当成数据分类标志实际上CPG是shapefile的代码页声明文件内容只有一行通常是UTF-8或GBK。它的存在意味着矢量数据的dbf属性表编码有显式声明在QGIS或GeoPandas里读取时不会出现中文乱码。同一目录下还应有配套的.shp、.shx、.dbf、.prj文件。缺少任一个shapefile都无法被正常读取——shp存几何shx是几何索引dbf存属性prj存坐标系cpg存编码。用ogrinfo做一次快速体检ogrinfo -ro -so /home/gis/data/hangzhou_poi/餐饮/餐饮.shp 餐饮-so表示只输出图层的概要信息能看到要素数量和空间范围如果prj缺失ogrinfo会报告未知坐标系这时就必须手动指定坐标系。2.3 7z文件哈希校验与常见解压错误下载来的压缩包在解压前建议做哈希校验防止传输过程中文件损坏。7z自带哈希计算7z h 杭州市2020年POI数据集.7z这会输出CRC32、SHA256等散列值与原始值比对。解压过程中最常见的错误是“Data Error in packed data”通常指向压缩包损坏或磁盘空间不足。另一个高频问题是linux下用7za解压含中文层级名的文件部分版本会出现文件名乱码建议直接安装p7zip-full并使用7z而非7za配合LANGzh_CN.UTF-8环境变量。以下是shapefile组件文件速查表适合脚本自动化巡检时对照文件后缀作用缺失后果.shp要素几何无法显示图形.shx几何索引无法读取.dbf属性数据属性全丢.prj坐标系定义投影错乱.cpg属性编码声明中文乱码3. GeoPandas读取shp字段设计、编码与数据质量核对3.1 Python环境与GeoPandas基础读取流程Python处理shp最常用的是GeoPandas底层依赖Fiona和Shapely。安装完成后读取餐饮POI图层并查看基础信息import geopandas as gpd gdf gpd.read_file(/home/gis/data/hangzhou_poi/餐饮/餐饮.shp, encodingutf-8) print(gdf.head()) print(gdf.crs) print(gdf.geometry.name) print(gdf.shape)参数encoding指定dbf的文本编码这里因为CPG文件声明了UTF-8所以用utf-8如果CPG文件被误删且原本是GBK编码读取时指定encodinggbk即可解决乱码。gdf.crs输出坐标系信息用于后续空间叠加判断。gdf.shape返回的是要素行数和属性列数行数代表该目录下POI点数量。3.2 字段结构分析与类别编码规律每个业态目录下的shp字段设计通常是FID、名称、地址、经度、纬度、类别、区域等。用GeoPandas查看完整字段清单和统计量for col in gdf.columns: print(col, gdf[col].dtype) print(gdf[类别].value_counts())类别字段是关键它决定后续的POI重分类。实际工作中不同目录下的类别值并不完全一致比如餐饮下细分为中餐厅、西餐厅、快餐厅等而生活服务下可能有维修点、照相馆等。跨目录合并时需要先做类别归一化。用value_counts()可以迅速确认每个目录的细分类型是否与目录名匹配防止数据放错层级。3.3 数据质量检查空几何、重复点与自相交POI数据最常见的质量问题来自人工采集和坐标偏移。检查空几何、重复记录和几何有效性print(gdf.is_empty.sum()) print(gdf.duplicated(subset[名称, 经度]).sum()) invalid gdf[~gdf.is_valid] print(len(invalid)) if len(invalid) 0: fixed invalid.buffer(0) gdf.loc[invalid.index, geometry] fixedis_empty统计缺失几何的记录数duplicated按名称和经纬度判断重复POIis_valid返回拓扑有效性常见的自相交问题通过buffer(0)修复。需要说明的是POI点数据很少出现自相交但一旦存在后续做空间连接或缓冲区分析时可能导致要素被排除所以这一步不要跳过。3.4 Web墨卡托坐标与背后隐含的坐标系坑读取prj文件后这批数据的坐标系如果是CGCS2000或WGS84经纬度可以直接使用如果prj被误写成EPSG:3857实际数值却是经纬度那 就 是 明 显 的 元 数 据 错 误。判断方法比较朴素bounds gdf.total_bounds print(bounds)如果横向范围在119.9到120.4附近是经纬度如果在13万到16万之间是投影坐标。杭州的经纬度坐标大致在东经118°21′~120°30′北纬29°11′~30°33′。total_bounds 输出超出这个数量级时就要怀疑prj文件与真实数据不匹配此时直接以crsEPSG:4326重建投影定义。4. DEM与行政区划叠加栅格重投影与POI空间裁剪实战4.1 30米分辨率DEM的空间范围与坐标系对齐30米分辨率DEM通常以tif或img格式存放。打开前先用rasterio或gdal查看元数据确认范围和坐标系是否与shp一致gdalinfo /home/gis/data/hangzhou_poi/DEM/dem30m.tif查询结果中重点看Origin、Pixel Size和Coordinate System。Pixel Size为(0.00027778, -0.00027778)左右时说明是度为单位如果是(30, -30)则为投影坐标。杭州地表覆盖坡度变化明显30米DEM处理得当可以做坡度分级和视域分析但前提是与POI、行政区划叠加时不发生坐标错位。Python读取DEM并输出基本信息import rasterio with rasterio.open(/home/gis/data/hangzhou_poi/DEM/dem30m.tif) as src: print(src.crs) print(src.bounds) print(src.width, src.height)如果DEM与POI坐标系不同必须先统一。常见做法是把栅格重投影到矢量坐标系因为矢量边界的精度损失比重采样小。用rasterio的reproject方法或者直接调用gdalwarpgdalwarp -t_srs EPSG:4326 -r bilinear -tr 0.00027778 0.00027778 dem30m.tif dem30m_wgs84.tif-t_srs指定目标坐标系-r bilinear用双线性插值重采样-tr设置输出像元尺寸。对30米DEM做坡度坡向分析时建议保持与原始数据一致的重采样方法避免-r near带来的阶梯感。4.2 用行政区划裁剪DEMgdalwarp的cutline用法行政区划shp用于裁剪DEM是最常见的操作目的是把研究范围外的无关像元剔除减少计算量。命令如下gdalwarp -cutline /home/gis/data/hangzhou_poi/行政区划/hz_boundary.shp -crop_to_cutline -dstnodata -9999 dem30m_wgs84.tif dem_hz_cut.tif-cutline指定裁剪边界shp-crop_to_cutline会让输出范围严格贴合边界-dstnodata把裁剪后外部区域设置为空值。注意cutline需要在与DEM相同的坐标系下使用否则要先对shp做投影转换ogr2ogr -t_srs EPSG:4326 hz_boundary_wgs84.shp hz_boundary.shp如果不转坐标系直接裁剪结果会偏移几十公里这是空间分析中最低级也最耗时的错误。4.3 POI按行政区划裁剪空间连接与归类统计行政区划另一个作用是给POI打上区县标签用于后续按区域汇总。使用空间连接import geopandas as gpd poi gpd.read_file(/home/gis/data/hangzhou_poi/餐饮/餐饮.shp, encodingutf-8) district gpd.read_file(/home/gis/data/hangzhou_poi/行政区划/hz_boundary.shp, encodingutf-8) poi_with_district gpd.sjoin(poi, district, howleft, opwithin)sjoin中opwithin判断POI点是否落在行政区边界内howleft保留全部POI落在边界外的点区县字段为NaN。这样可以直接统计每个区县的POI密度结合DEM的坡度数据做选址建模。结果如需导出poi_with_district.to_file(/home/gis/data/hangzhou_poi/餐饮/餐饮_区县.shp, encodingutf-8)导出时若不明确指定编码GeoPandas默认UTF-8dbf文件在Excel打开可能乱码可在导出后补写CPG文件声明。4.4 互联网POI坐标偏转问题与边界修正杭州市2020年POI如果是来源于互联网地图采集坐标很可能经过GCJ-02火星坐标加偏而行政区划边界是CGCS2000或WGS84叠加时会出现几十到几百米的偏移。检查方法很直观把POI和区县边界叠加后如果大量POI落在水域或边界外围就说明存在偏转。常见处理方案是写一个坐标纠偏函数把GCJ-02转回WGS84。此处不是把原数据篡改而是为了与DEM和行政区划做空间运算。纠偏后重新做空间连接点落入边界的比例会显著提高。如果数据本身就是CGCS2000采集的这一步可以跳过但检查行为不要省略。5. POI属性工程从shp到Excel的标准化导出与多源数据合并5.1 shp批量转Excel的实现思路数据集中同时提供了Excel格式POI但实际使用时往往需要自己从shp重新转出因为Excel版可能缺少区县字段或坐标精度不够。GeoPandas直接转Excelgdf gpd.read_file(/home/gis/data/hangzhou_poi/餐饮/餐饮.shp, encodingutf-8) gdf[lng] gdf.geometry.x gdf[lat] gdf.geometry.y df gdf.drop(geometry, axis1) df.to_excel(/home/gis/data/hangzhou_poi/餐饮/餐饮_标准化.xlsx, indexFalse)先读取shp通过geometry.x和geometry.y取出经纬度到独立列再删除几何列最后用to_excel输出。indexFalse 避免把索引写进表里。Excel写入依赖openpyxl如果批量转换多个目录建议循环遍历并用pandas拼接后一次性导出。这里顺带澄清一个容易混淆的点Apache POI是Java读写Excel的库其4.1.0及以下版本存在XXE漏洞与本文这种shp转Excel数据文件完全是两码事你手里的.xlsx或者生成的.xlsx只是数据文件不需要担心Java库的代码漏洞。5.2 多业态POI合并与中文字段兼容处理不同业态目录的字段顺序和类别值不一致合并前要统一列名。常见做法是只保留公共字段import glob, pandas as pd all_files glob.glob(/home/gis/data/hangzhou_poi/*/*.shp) frames [] for f in all_files: gdf gpd.read_file(f, encodingutf-8) cols [名称, 地址, 经度, 纬度, 类别] frames.append(gdf[[c for c in cols if c in gdf.columns]]) merged pd.concat(frames, ignore_indexTrue) merged.to_excel(/home/gis/data/hangzhou_poi/杭州POI_合并.xlsx, indexFalse)glob匹配所有子目录下的shp文件逐文件读取后按公共字段筛选pd.concat纵向堆叠为一张总表。这里忽略坐标精度损失Excel中的经纬度保留6位小数即可精确到约0.1米足够用于常规分析。5.3 shp转txt/CSV与后续格式流转方法可视化平台或数据库入库经常需要txt/CSV格式。用Fiona遍历要素输出CSV比直接用GeoPandas更省内存import fiona, csv with fiona.open(/home/gis/data/hangzhou_poi/餐饮/餐饮.shp, encodingutf-8) as src: with open(/home/gis/data/hangzhou_poi/餐饮/餐饮.csv, w, newline, encodingutf-8) as f: writer csv.writer(f) writer.writerow(list(src[0][properties].keys()) [lng, lat]) for feat in src: x, y feat[geometry][coordinates] writer.writerow(list(feat[properties].values()) [x, y])这段代码逐个要素写入不会一次性加载全部数据到内存适合百万级POI转出场景。生成的CSV再转其他编码时用iconv -f UTF-8 -t GBK或者Excel手动导入均可。5.4 用ShapeChecker修复shp时要注意的边界条件大数据集跨软件传输后经常出现shp无法打开的情况ShapeChecker这类修复工具对几何拓扑损坏的处理比较成熟。实际使用中注意三点修复前先复制原文件防止修复过程覆盖掉错乱但历史上有用的字段勾选“重建索引”选项避免shx与shp不同步导致的读取失败修复后检查PRJ和CPG是否保留有时修复工具会丢弃这两个文件修复完成后再跑一遍ogrinfo验证要素数如果数量变化明显说明原始文件损坏严重需要重新解压源包并回到第2章的完整性校验流程。本文还有配套的精品资源点击获取
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

回执失败为何不触发重试?解构调度链中的契约断层 2026/9/16 10:44:36

回执失败为何不触发重试?解构调度链中的契约断层

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
YuE协议:混合AR/NAR生成的轻量级Transformer编排中间件 2026/9/16 10:44:36

YuE协议:混合AR/NAR生成的轻量级Transformer编排中间件

1. “YuE”不是拼写错误,而是当前生成式AI领域一个正在快速演化的技术代号最近在Hugging Face Spaces、GitHub Trending和几个核心AI开发者论坛里,“YuE”这个词出现频率陡增——它既不是某个新出的开源模型名称,也不是某家公司的产品代号&am…

阅读更多 →
Netmon抓包过滤器实战:Capture Filter与Display Filter详解 2026/9/16 10:44:36

Netmon抓包过滤器实战:Capture Filter与Display Filter详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Pentagi:基于Neo4j图谱与AI Agents的攻击链认知建模系统 2026/9/16 10:44:36

Pentagi:基于Neo4j图谱与AI Agents的攻击链认知建模系统

1. 项目概述:Pentagi 是什么?它解决的不是“渗透测试自动化”,而是“攻击链认知建模”的根本问题 你搜“pentagi”时,首页跳出来的全是 Docker、Neo4j、AI Agents 这些词——但它们只是工具,不是目的。我第一次看到这…

阅读更多 →
DeepSeek V4.1 Flash显存优化部署实战指南 2026/9/16 10:44:36

DeepSeek V4.1 Flash显存优化部署实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Git分支管理实战:从master到feature/hotfix的团队协作方案 2026/9/16 10:41:35

Git分支管理实战:从master到feature/hotfix的团队协作方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞