尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

广州基准地价Shp数据解析:Shapefile结构、坐标系与空间分析实践

发布时间:2026/9/16 2:18:15

资讯中心
01
ARTICLE

广州基准地价Shp数据解析:Shapefile结构、坐标系与空间分析实践

广州基准地价Shp数据解析:Shapefile结构、坐标系与空间分析实践
简介面向城市规划、土地管理与GIS分析人员的广州土地基准地价矢量数据包包含基准地价、土地用途、一级/二级用途、土地等级、容积率、开发程度等官方核心字段可用于地价分布制图、用地价值评估与城市发展研究。压缩包共6个文件整体35.74MB涵盖Shp矢量要素、dbf属性表、shx空间索引、prj投影定义、cpg编码说明及GeoJSON格式能同时满足ArcGIS、QGIS与Web地图调用等场景。目前已有578人学习下载数据字段完整、坐标体系明确特别适合作为土地经济学、GIS空间分析或规划研究的底图数据。借助该数据读者可快速提取各区基准地价等级开展容积率与开发强度的空间可视化叠加交通、人口等要素进行综合分析为决策和学术研究提供直接支撑。1. 基准地价为什么必须是矢量Shp而不是表格里的一个数拿到“广州土地基准地价矢量Shp数据.zip”时可能有人会问基准地价不是一张标定地价表吗表格确实能写“商业一级 5万元/平方米”但写不出这块地在城市哪个位置、边界在哪、是否在地铁影响范围内。把地价挂在面状图斑上才能做地铁影响半径内的平均地价、做容积率校核、评估一个片区是不是被高估。这份数据同时提供Shapefile和GeoJSON前者适合ArcGIS、QGIS和传统测绘平台后者适合Web、PostGIS和Python分析两者共用同一套几何与属性字段。适合地产投拓、国土规划、估价机构和想拿真实地价数据练手空间分析的数据工程同学。建议别急着出图先把七个字段的语义读透。2. Shapefile六个文件与基准地价字段的底层语义很多人解压zip后只把.shp拖进软件就认为完事了等换一台电脑打开才发现图层还在属性表却是空的。要理解这份数据先从Shapefile的组成讲起。2.1 Shapefile不是单个文件.shp/.shx/.dbf/.prj/.cpg 各管什么Shapefile是ESRI定义的一种“多文件存储格式”最少包含三个文件实际使用中通常是五个到六个。同一个数据集的每个文件共享同一个主文件名只是扩展名不同。这份广州数据的文件名前缀是“广州市-geo”解压后你会看到广州市-geo.shp、.shx、.dbf、.prj、.cpg五个配套文件外加一个广州市-geo.json。扩展名内容缺少时的现象.shp几何坐标点/线/面对象软件报“无法读取几何”.shx几何索引加速要素定位部分软件提示索引无效甚至打不开.dbf属性表dBase III图层有几何但看不到字段值.prj坐标系和投影的WKT定义坐标位置漂移或无法变成正确投影.cpg属性表字符编码中文乱码或读取异常zip压缩包就是这些文件的容器。建议解压后不要单独拷贝一个.shp给别人至少把.shp、.dbf、.prj、.cpg四个文件一起拷走。.shx缺失时QGIS可能自动重建ArcGIS则容易直接报错。判断“数据完整”最快的方法查看每个文件的字节数如果.dbf是0字节说明属性表已经丢失后面所有基于基准地价字段的分析都不可能做。如果你想从prj文件直接读出坐标系信息用pyproj解析几行就能完成from pyproj import CRS from pathlib import Path # prj 文件本质是一段 OGC 格式的 WKT 文本 prj_text Path(广州市-geo.prj).read_text(encodingutf-8, errorsreplace) crs CRS.from_wkt(prj_text) print(crs.to_epsg()) # 输出如 4490、4547、4326 print(crs.name) # 输出完整坐标系名称CRS.from_wkt()把prj字符串解析成坐标系统对象to_epsg()返回标准EPSG编号name则是人类可读的名称。如果to_epsg()返回None说明prj写法不是标准EPSG模板可以再用crs.to_wkt()打印参数人工确认投影类型。这一步非常关键因为基准地价图斑只要坐标系错了后续所有缓冲区、面积计算、空间连接都会跟着错。2.2 字段拆解发布时点、用途组合、等级和基准地价的对应关系广州基准地价图斑的属性表设计是“用途等级价格”三元结构加上发布时点、容积率、开发程度才构成完整的评估上下文。字段名在不同版本里可能是中文也可能是拼音但语义一致。字段名语义类型作用发布时点Date数据对应评估基准日决定时效性土地用途String商业、居住、工业等一级分类土地二级用途String招商、零售、餐饮等细分用途土地等级Integer定级单元等级1级最高基准地价Double单位土地面积的参考价格一般为元/平方米容积率Double地块建筑面积与用地面积比的上限开发程度String五通一平、七通一平等建设条件这里最容易混淆的是“基准地价”和“成交地价”。基准地价是政府按定级单元评估的基准参考价格更新周期较长通常几年发布一次成交地价是具体地块挂牌交易形成带有市场溢价。做分析时不要拿这个字段直接拟合真实房价只能作为底价梯队、空间梯度、片区平衡判断。发布时点字段的意义就在于此不同年份发布的图斑如果混在一起统计要先按发布时点分组否则天河区2024年和2019年的商业地价会被拉平得出错误结论。用groupby做交叉检查能快速确认用途和等级映射关系是否合理import geopandas as gpd gdf gpd.read_file(广州市-geo.shp, encodingutf-8) # 按一级用途等级聚合查看样本量和平均基准地价 agg gdf.groupby([土地用途, 土地等级])[基准地价].agg([count, mean]) print(agg.head(20))groupby([土地用途,土地等级])得到每个组合的统计表count与mean反映两个问题count过小说明该组合在图斑库里几乎没有覆盖可能是规划上不存在不一定是数据缺失mean的排序如果出现“一级低于二级”的逆差则可能字段取值错误或坐标投影导致地价数值倒挂。这里的mean是简单算术平均正式做汇总建议按面积加权稍后第5章再展开。2.3 坐标系与投影prj文件如何影响面积和距离计算很多分析错误出在坐标系判断上。Shapefile没有“自动识别”能力所有坐标数字依赖.prj文件来解释。这份广州数据的坐标可能是CGCS2000地理坐标系也可能是高斯投影坐标系如果直接用EPSG:4326WGS84经纬度打开并计算面积算出来的单位是“度方”不是平方米面积字段完全失真。坐标系EPSG面积计算方式WGS84 / 43264326先投影到米制坐标系再算CGCS2000 / 44904490按区域选高斯投影CGCS2000 / 45474547可直接得到平方米以广州所在经度为例先用pyproj确认原坐标系再用geopandas重投影import geopandas as gpd gdf gpd.read_file(广州市-geo.shp, encodingutf-8) print(原始CRS:, gdf.crs) # 投影到以米为单位的高斯平面坐标 gdf_proj gdf.to_crs(epsg4547) gdf_proj[area_km2] gdf_proj.geometry.area / 1_000_000 print(gdf_proj[[土地用途, 基准地价, area_km2]].head())参数说明epsg4547是CGCS2000坐标系下中央经线114度的高斯投影适用于广州市域如果原始数据是WGS84可以改用EPSG:3857做简单展示但面积变形较大正式面积统计建议先确认省级测绘成果的标准投影。geometry.area在投影坐标系下返回平方米除以1000000后是平方公里。只有完成了这一步后续缓冲区、渔网分割和面积加权才会得到可靠结果。提示如果读文件时crs输出为None优先从发布数据包的说明文档里找坐标系不要直接用4326顶替。用错坐标系会让“基准地价”和“位置”一起错出图越漂亮越难发现。3. 用QGIS和Python把广州基准地价Shp跑起来打开Shp的第一步常劝退新人ArcGIS报“无法识别数据”或图层空白。这一章按“先用桌面GIS确认边界再用Python做质检”的顺序写。3.1 在ArcMap/ArcGIS Pro里加载Shp并快速检查属性表步骤解压zip到不含中文符号的路径例如D:\landprice\。打开ArcMap或ArcGIS Pro在Catalog中连接该文件夹把“广州市-geo.shp”拖入地图。右键图层→打开属性表查看行数和字段确认“土地用途”与“基准地价”非空。右键图层→属性→符号系统按“土地用途”用类别渲染先看大类是否覆盖越秀、天河、白云、番禺等区域。这样做的目的不是出图而是确认几何和属性关联正常。很多人跳过属性表直接看渲染结果地价颜色没反应浪费时间。配合影像检查时可以在ArcGIS Pro中通过右键地图添加在线影像底图加载遥感影像再叠加地价图斑能直观判断边界是否与现状道路、河流错位。如果图斑整体偏移几百米不要继续做统计先回到第4章做坐标校核。3.2 用GeoPandas完成读取、统计与合法性检查机器上有Python环境的话用GeoPandas读取同一份数据会比GIS更快进入质检环节import geopandas as gpd # 读取时显式指定编码避免中文属性变成乱码 gdf gpd.read_file(广州市-geo.shp, encodingutf-8) print(gdf.shape) # 行数图斑数列数属性字段几何 print(gdf.crs) # 坐标系为None时要处理 print(gdf.dtypes) # 字段类型尤其是地价是否为float # 几何类型和有效性检查 print(gdf.geom_type.value_counts()) print(合法要素数:, gdf.is_valid.sum(), / 总数, len(gdf)) # 基准地价数值分布 print(gdf[基准地价].describe())参数说明encodingutf-8要与.cpg一致如果数据来自老测绘系统可能会用gbk此时读出来columns是乱码就换成encodinggbk读取。geom_type.value_counts()应该只出现Polygon和MultiPolygon如果出现LineString说明原始数据被误转。is_valid.sum()统计拓扑合法要素数量不是True的图斑存在自相交或重叠问题先用后面第3.3的buffer(0)修复再继续。describe结果里重点看min和max。基准地价如果为0或负数要先过滤不要直接参与分级渲染。另外如果“基准地价”列被读成object类型需要用pd.to_numeric(gdf[基准地价], errorscoerce)强制转成float转换后再统计缺失值否则后面面积加权时会出现字符串拼接报错。3.3 文件损坏或编码错乱时的修复顺序遇到读不出来不要立刻怀疑zip包损坏按下面的顺序排查现象原因处理办法中文乱码.cpg丢失或编码指定错误用gbk/utf-8重读图层有几何但没有属性只复制了.shp丢了.dbf找回完整文件包打开报“索引无效”.shx与.shp不匹配删除.shx在QGIS中重新加载并另存坐标跑到海里.prj丢失或坐标系被重置参考同机构数据的.prj用投影工具定义面自相交导致分析报错数据生产时未做拓扑检查用buffer(0)或ShapeChecker修复如果GIS打不开用Python重写一个干净的Shp往往最快。下面代码等于做了一次“解包再打包”import geopandas as gpd gdf gpd.read_file(bad.shp, encodinggbk) gdf[geometry] gdf.buffer(0) # 消除无效几何 gdf.to_file(fixed.shp, encodingutf-8)buffer(0)是GEOS中对自相交面做拓扑修复的常见惯用法它会保留原几何轮廓但会丢失部分重复节点。如果修复后图形和原始CAD线稿出现细小差异可以用ShapeChecker类工具逐要素检查ShapeChecker会列出.shp/.shx/.dbf三个文件的记录数偏差并自动补全索引。修复后记得重新执行第3.2的合法性检查直到is_valid全部为True再进入面积计算和空间连接。4. 格式转换与坐标系校核Shp、GeoJSON、txt互转的注意点这份数据包里已经有Shp和GeoJSON两种格式为什么还要再做转换因为在真实工作流里提交给Web端、给数据分析、给不装GIS的同事看都需要不同载体。4.1 为什么数据集同时给Shp和GeoJSONShapefile的优点是GIS平台兼容性好字段带类型适合做空间数据库入库缺点是文件多、字段名长度有限制、老式dBase格式对特殊字符支持差。GeoJSON是单个文本文件天然适合浏览器、PostGIS和Python工具链缺点是图斑数量大时内存占用更高。同一份广州基准地价桌面端用.shpWeb端用.geo.json这是发布方做得比较周到的地方避免使用者自己转格式时弄丢坐标系。如果后续需要把修改后的Shp重新变成GeoJSON常用GeoPandas一步完成import geopandas as gpd gdf gpd.read_file(广州市-geo.shp, encodingutf-8) # Web 地图默认按经纬度展示先转成EPSG:4326 gdf_wgs gdf.to_crs(epsg4326) gdf_wgs.to_file(广州市-web.json, driverGeoJSON, encodingutf-8) # 反向转换GeoJSON - Shp gdf2 gpd.read_file(广州市-geo.json) gdf2.to_file(restored/广州市.shp, encodingutf-8)参数说明driverGeoJSON指定输出驱动实际也可以由文件后缀自行推断to_crs(epsg4326)必须做否则GeoJSON里放的是投影坐标前端地图加载后会偏到不知哪里。反向转换时要注意GeoJSON字段名可以比Shapefile更长超过10个字符的字段在Shp里会被截断转换后重新检查列名尤其像“土地二级用途”这种中文字段在dbf里可能变成截断字符。4.2 Shp转txt把地价图斑变成坐标文本文件“shp转txt”是很多人搜的关键操作实际需求是把几何和属性导成纯文本给别人让对方不用开GIS也能检查坐标。用ogr2ogr的CSV驱动也可以但控制坐标点数和组织方式不如直接用GeoPandasimport geopandas as gpd gdf gpd.read_file(广州市-geo.shp, encodingutf-8) gdf gdf.to_crs(epsg4326) # 输出经纬度方便人工读查 with open(广州地价_边界坐标.txt, w, encodingutf-8) as f: for idx, row in gdf.iterrows(): # MultiPolygon 拆成多个 Polygon if row.geometry.geom_type MultiPolygon: parts list(row.geometry.geoms) else: parts [row.geometry] for poly in parts: coords list(poly.exterior.coords) f.write( f{row[土地用途]}|{row[土地等级]}|{row[基准地价]}|点数:{len(coords)}\n ) for x, y in coords: f.write(f {x:.7f},{y:.7f}\n)这段代码把每个图斑的外环坐标按“属性行坐标行”成组写出第一行用竖线分隔属性后面每一行是一个坐标点。x:.7f保留七位小数约相当于1厘米精度做文本交换足够。如果只要地块质心把poly.exterior.coords替换成row.geometry.representative_point()这个代表点一定落在面内比centroid更稳遇到凹多边形不会跑到面外。4.3 坐标校核用行政区边界和遥感影像做对齐验证格式转换后最重要的就是坐标校核。流程先在QGIS中加载一份官方行政区边界Shp做基准再叠加遥感影像最后再加载这份地价图斑。如果地价图斑与影像边界明显错位说明坐标系可能被改过。这里提供一个快速判断表坐标系与遥感影像的偏移量典型来源WGS84基本不偏GPS原始采集CGCS20000.1~2米内国家测绘数据GCJ02300~500米互联网平台加密坐标如果确认是GCJ02需要逆变换回WGS84才能与官方Shp叠加如果只是WGS84与CGCS2000的差异在1:10000图幅上只有零点几米对地价分析影响有限。不要把所有数据都转成Web墨卡托基准地价面积统计必须使用高斯投影或等积投影EPSG:3857只适合做在线预览不适合做面积加权。5. 基准地价图斑的空间分析技巧从分级出图到渔网平均价最后给两个立刻能用的脚本一个是渔网分割一个是分级出图再加一个字段级验证。5.1 用渔网分割把地价图斑折算到规划网格规划里常常不直接展示地价图斑而是用1km×1km渔网统计平均地价避免图斑大小不均影响判断。先在QGIS里用“矢量→研究工具→创建渔网”生成grid_1km.shp再用overlay做面积加权import geopandas as gpd grid gpd.read_file(grid_1km.shp).to_crs(epsg4547) parcel gpd.read_file(广州市-geo.shp, encodingutf-8).to_crs(epsg4547) grid[gid] range(len(grid)) # 网格与地块求交保留相交碎片 inter gpd.overlay(grid, parcel, howintersection) inter[inter_area] inter.geometry.area # 每个网格按交集面积加权计算平均基准地价 avg inter.groupby(gid).apply( lambda d: (d[inter_area] * d[基准地价]).sum() / d[inter_area].sum() ).rename(avg_price) grid grid.merge(avg.reset_index(), ongid) grid.to_file(grid_avg_price.shp, encodingutf-8)overlay比sjoin更精确的点在于它会把跨网格的地块从相交处切开每一片只属于一个网格加权时不重复计算。如果广州全量图斑量大可以先按parcel[parcel[土地用途]商业]过滤再跑执行时间能控制在几十秒内。5.2 做一张能放进报告的分级图分级图建议用自然间断它找出地价变化的天然断点比等距分级更符合“核心区高、外围低”的分布import matplotlib.pyplot as plt import geopandas as gpd gdf gpd.read_file(广州市-geo.shp, encodingutf-8) gdf gdf.to_crs(epsg4547) fig, ax plt.subplots(figsize(10, 12)) gdf.plot(column基准地价, schemeNaturalBreaks, k5, cmapYlOrRd, legendTrue, axax) ax.set_title(广州基准地价空间分布) ax.set_axis_off() plt.savefig(guangzhou_land_price.png, dpi300, bbox_inchestight)schemeNaturalBreaks依赖mapclassify库需要先执行pip install mapclassify。k5把颜色分成5级。如果要用分位数把参数改成Quantiles它能保证每一级图斑数一致适合对比数量结构。出图叠加底图时把影像透明度调到40%地价层放在上面报告里会更耐看。5.3 结果验证容积率与开发程度交叉检查出图前做一个字段级逻辑校验计算楼面地价并按土地等级看中位数。gdf[楼面地价] gdf[基准地价] / gdf[容积率] print(gdf.groupby(土地等级)[楼面地价].median())基准地价是单位土地面积价格除以容积率后才能横向比较不同开发强度的地块。理论上等级越高楼面地价中位数应越高如果某一等级中位数出现倒挂优先看开发程度字段可能是“生地”和“熟地”混在同一个等级里。确认无误后把网格结果另存为GeoJSON给前端或者直接共享Shp给规划部门做进一步校核。本文还有配套的精品资源点击获取
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。