ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

QGIS+百度地图AOI:公园空间分析全流程实操指南

QGIS+百度地图AOI:公园空间分析全流程实操指南 我做一个市级的公园空间分析项目时最难的部分居然不是分析本身而是想把百度地图上的公园AOI数据弄到QGIS里结果发现坐标、底图、属性字段到处都是坑。后来摸清楚整套流程之后再回头看这事儿其实并不复杂关键是把几个环节理顺。这篇就用我实际踩过的坑从数据下载、坐标系转换、AOI清洗到分析出图完整记录一遍操作链路给要用QGIS做类似POI/AOI分析的读者一条能直接走通的路。1. 公园分析为什么非要AOI数据不可1.1 AOI比POI好在哪做公园分析最常见的错误是拿POI点数据硬凑。POI只有一个点能告诉你“这里有个公园”但完全没法告诉你公园多大、边界在哪、覆盖了哪些小区。说句难听的用POI算出来的“公园覆盖率”基本都是哄自己玩的。AOI的全称是Area of Interest也就是带边界的兴趣面。百度地图AOI数据里一个公园对应一个闭合多边形能把公园的实际范围圈出来。有了这个面数据之后才能继续算占地面积、服务半径覆盖范围、人均公园绿地面积这些真正的空间分析指标。公园AOI的数据结构核心就是两部分几何边界和属性信息。几何边界是闭合多边形属性信息一般包含名称、所在区域、分类标签这些字段。拿到手之后属性字段往往不够用后面得靠空间连接和字段计算自己去补。1.2 百度地图AOI能做什么不能做什么百度地图AOI数据特别适合做“面上”的宏观分析比如统计某个行政区范围内公园的总面积和数量按街道切片做公园密度分布图结合小区AOI做公园步行可达性分析叠加路网数据计算公园入口覆盖范围但它也有明显的局限。第一百度地图AOI属于导航电子地图数据边界是经过化简的不会像测绘部门的数据那么精确用于11000这种大比例尺精度要求的工作就免谈了。第二部分公园在大数据里是分成多个AOI的比如一个公园隔着一条市政路分成了南北两个片区数据上就会显示成两个独立面做统计前必须处理合并。第三AOI属性里通常只有名称、地址、类型缺少“建成年代”“绿地面积”“设施数量”这种业务属性这些得靠自己去补充。搞清楚这些边界条件之后再动手做数据准备心里才有底。2. 环境准备QGIS版本选型与2000坐标系设置2.1 QGIS版本和插件安装运行环境建议直接上QGIS 3.34 LTR版本不要装3.36或更新的开发版虽然新版本功能多但有些国内数据源的第三方插件对最新版兼容性滞后LTR版本遇到问题搜到的解决方案也更多。QGIS装好之后需要装几个常用插件。打开“管理并安装插件”搜索安装QuickMapServices提供在线底图快速加载能力HCMGIS集成国内外多有名的底图服务地址MMQGIS做几何处理和坐标转换的老牌插件DataPlotly如果后续需要做统计图这个用得上这些插件用国内源安装可能比较慢可以在“设置—选项—网络”里把请求超时时间调大默认的10秒经常不够用。2.2 CGCS2000坐标系的正确设置姿势“qgis软件如何设置2000坐标系”是很多人搜索量很高的词说明这个问题确实容易搞混。QGIS里设置2000坐标系涉及两层项目坐标系和图层坐标系这俩是分开控制的项目坐标系决定你显示和分析时用的坐标基准图层坐标系是每个数据文件自己带的属性。做城市公园这类国内空间分析项目坐标系建议设为CGCS2000 / 3-degree Gauss-Kruger zone 某度带根据城市经度选或者直接用CGCS2000地理坐标系EPSG:4490。具体操作在“项目—项目属性—CRS”里勾选“启用 ‘按图层’ CRS 变换”然后过滤器里输入4490或对应投影坐标系的编号选中之后确定。但更关键的一点是百度地图AOI数据最后交到你手上时底层的坐标系往往已经被转换成WGS84了如果你把WGS84的面数据和CGCS2000的底图叠在一起看着可能差不多但实际算面积的时候会差出不少。所以导入数据后第一步就要检查图层的CRS定义右键图层—图层属性—信息看“坐标参考系”字段。如果显示的是EPSG:4326而你希望数据落在CGCS2000上不能直接把图层坐标系改掉要做“导出—另存为”在CRS里选择目标坐标系让QGIS做一次真正的坐标重新投影而不是仅仅改个标注。2.3 数据组织目录规范项目目录推荐这么建park_analysis/ ├── data/ │ ├── raw/ # 原始下载AOI数据不做任何修改 │ ├── processed/ # 清洗转换后的数据 │ └── output/ # 分析结果与出图 ├── scripts/ # 后续如果需要写Python脚本放这里 ├── styles/ # QLR样式文件 └── project/ # QGIS工程文件这个习惯救过我很多次分析做复杂了之后原始数据和处理数据混在一起十有八九会误改了原始数据。QGIS虽然自带编辑撤销功能但哪天手抖保存了就全完。3. 在QGIS里加载百度地图底图坐标偏移的坑与解法3.1 国内可用底图加载方案很多人拿到QGIS之后最头疼的就是没有国内底图默认的OpenStreetMap在国内加载慢而且地名标注少。我的做法是优先用HCMGIS插件里的国内底图集合里面整理了高德、百度、天地图等服务的瓦片地址一键加载方便省事。如果网络环境连插件都加载不动或者想要更稳定的方案可以手动添加XYZ瓦片图层。操作路径是“图层—添加图层—添加XYZ瓦片图层—新建”然后把瓦片地址粘贴进去。需要注意百度地图瓦片的坐标系是BD-09XYZ地址里带了自定义投影参数直接添加之后QGIS可能报错“非法投影”。这是因为QGIS 3.x已经不完全支持百度瓦片那种非标准墨卡托切片方案需要先加载一个自定义CRS或者用GeoServer做中转复杂度反而上去了。所以线上方案我是这样排序的优先用HCMGIS插件加载百度底图插件作者已经把投影转换逻辑处理好了如果不行退而求其次用天地图做底图数据都是CGCS2000或者WGS84坐标转换省心很多。3.2 底图和AOI数据对不齐的处理办法叠加底图和AOI数据之后最常遇到的情况是公园AOI边界和底图上的公园边界差了几十米到上百米。这不是数据质量差是坐标基准不同导致的。百度地图用的BD-09坐标系是在WGS84基础上经过了国测局偏移和二次非线性偏移的加密坐标系。如果你的AOI数据是别人从百度直接抓下来的原始坐标那放到WGS84底图上就会系统性偏移。解决办法有两个思路思路一把AOI数据从BD-09/LGCJ-02转换成WGS84。网上有很多开源坐标转换库比如coordtransform在QGIS里可以通过Python脚本调用或者用MMQGIS插件的坐标转换功能手动处理。思路二把整个项目坐标系调整成和目标底图一致。把项目CRS设为与底图相同的坐标系让QGIS在渲染时自动把AOI数据投影到底图坐标系上。这个思路在“看起来对齐”上是有效的但如果要导出去和其他系统对接还是得做一次真正的一劳永逸的转换。我自己实际项目里的习惯是先做坐标转换把AOI数据统一转成CGCS2000 / 高斯克吕格投影再叠加天地图底图验证。验证方法很直观加载底图后把公园AOI图层设成半透明填充如果AOI边界线基本贴合底图上公园的围栏或绿地边界说明转换成功如果偏差超过一个街区就说明坐标系处理还有问题。3.3 字段汇总导入前的最后检查在导入AOI数据之前用“处理工具箱—矢量通用—按位置连接属性”先做一步空间关联把行政区域代码挂到AOI上方便后面按区汇总。挂完之后做一个“字段汇总”检查按行政区域字段做分组统计看看每个区有多少个公园AOI总面积多少。这一步如果发现某个区面积异常或者公园数量异常少八成是AOI抓取时边界漏了需要回到原始数据源核验。4. AOI数据的获取与预处理从“一堆面”到“能分析的图层”4.1 从百度地图拿AOI的几种渠道百度地图官方对外没有直接提供“下载全部公园AOI”入口实际操作中一般有几种拿数据的方式第一种用百度地图开放平台的Web服务API按区域检索POI再把POI对应的AOI边界逐一下载。这种方式合规性最好但受配额限制适合小范围试点。第二种直接抓百度地图网页端渲染时返回的GeoJSON数据。在地图页面上画出公园边界后网络请求里会返回Polygon数据在浏览器开发者工具里能找到可以保存成GeoJSON文件。这个方式获取速度快但一次只能拿一个地块。第三种找现成的整理好的AOI数据集。GitHub上有一些开源项目维护了百度地图AOI的历史快照下载后导入QGIS即可。这适合分析全国尺度或历史对比场景。实际项目里我一般用第二种和第三种结合城市范围小的话直接抓网页数据范围大的话先找开源数据集再补漏个别公园。4.2 GeoJSON导入QGIS后的清洗流程不管哪个渠道拿到的AOI数据导入QGIS之后都不能直接拿来做分析至少要做四步清洗第一步检查几何有效性。用“修复几何”工具处理自相交和重复点问题。面数据最常见的错误是某个多边形有一条边反向导致整个面判定为无效几何。修复后要重算面积不修复的话后面按面积汇总统计就全错了。第二步去除重复和包含关系。同一公园出现两个重叠的AOI边界直接做面积统计会翻倍。用“删除重复几何”工具去重再手动检查被包含的小面是否需要合并。第三步按业务口径合并AOI。前面说过百度地图AOI有时会把一个公园拆成多个面。判断标准是看名称字段把名称相同且边界相邻的AOI用“融合”工具Dissolve合并成一个面融合的字段用“名称”属性值保留区域信息。第四步创建唯一标识字段。在属性表里加一个FID字段用“字段计算器”赋值 row_number这个唯一标识在后续做空间连接、按公园汇总时非常有用。4.3 坐标转换后再做一次面积校验清洗完数据后我先不用项目里显示的平方度数值而是把图层转成正确的投影坐标系再通过“字段计算器”用 $area 函数重算面积字段。这一步能有效发现坐标转换失败的数据如果一个公园的面积算出来是几亿平方公里那它肯定没落在CGCS2000上。举个例子一个正常城市公园面积应该是0.02到2平方公里左右如果你看到面积值是0.0000003那说明坐标单位是度而不是米面积计算结果完全不可用。遇到这种问题就在图层CRS上找原因不要硬往下做。5. 公园分析核心流程密度、可达性与覆盖度5.1 公园分布核密度分析拿到干净的公园AOI图层后第一个常规分析是核密度。但核密度分析工具要求输入的是点数据因此需要先提取面图层的质心点操作路径是“处理工具箱—矢量几何—多边形质心”。提取质心后打开“处理工具箱—插值分析—核密度分析”设置搜索半径。搜索半径的取值直接决定成图效果如果是市级分析建议设1.5公里左右如果是区级分析可以缩小到800米。这个值不是拍脑袋定的可以参考城市规划里“15分钟生活圈”的概念将搜索半径设为步行15分钟覆盖距离的一半效果比较有说服力。5.2 基于半径缓冲区的可达范围分析公园可达性是公园分析里最常被问到的问题。做法是对公园AOI做缓冲区“处理工具箱—矢量几何—缓冲区”距离设为500米和1000米两种。缓冲区距离虽然短但背后的逻辑要说清楚500米对应5分钟步行圈1000米对应10分钟步行圈。大多数城市居民对公园可达性的心理预期就是“步行十分钟能到”所以这两档是最常用的。做缓冲区之前记得把项目坐标系切到投影坐标系长度单位才会是米。我之前在WGS84地理坐标系下做缓冲区设距离为500结果缓冲区画出来覆盖了半个城市就是因为单位是度而不是米。这个坑说出来很基础但真的掉进去过。缓冲区生成后下一步用“按位置选择”统计落在缓冲区里的居住小区数量。拿小区AOI和公园缓冲区做空间连接能够得到“有公园覆盖的小区占比”这个指标比单纯给公园数量要直观得多。5.3 各区公园面积占比与人均水平统计按行政区汇总公园总面积操作是“处理工具箱—矢量叠加—按位置汇总”目标图层选公园AOI汇总图层选行政区面统计字段选面积字段在统计参数里勾选总和。汇总结果里有一个隐含的坑一个公园可能跨了两个行政区按位置汇总会把它算进两个区。业务上如果接受“按下辖区划分不重复计算任何面积”的口径就需要用“裁剪”工具先把公园AOI按照行政边界切开再统计这样才能保证各区面积加起来等于全市总面积。人均公园绿地面积还需要人口数据。把人口统计单元比如街道或社区和公园AOI做空间关联按人口加权计算人均水平。没有人口数据的话也可以退而求其次用“每平方千米公园面积”代替做横向对比也有价值。5.4 用栅格分析补一张“偏远的角落”示意图面状分析做完之后我习惯补一张栅格形式的距离图用来直观呈现“哪些地方离最近的公园最远”。操作是“处理工具箱—栅格分析—距离栅格近似”输入公园AOI像元大小设100米生成的结果就是每个像元到最近公园边的距离。把结果用渐变色渲染从绿色到红色渐变就能很直观地看到城市边缘的“公园盲区”。这张图放到汇报PPT里非常加分因为决策者一眼就能看出问题区域在哪里比一堆数字更有说服力。6. 出图排版从QGIS里导出一张能直接放汇报里的地图6.1 图层符号化的细节设计分析做到最后总要落到一张拿得出手的图上。QGIS的默认配色基本不能直接用于汇报需要花点心思调整。公园AOI的填充色我一般用青绿色系透明度设30%40%让底图的地名标注还能透出来。边界线稍微粗一点用深绿色粗细设0.6毫米。缓冲区用淡橙色半透明填充叠加在公园面上形成“公园是绿的步行圈是淡橙的”这种直观表达。核密度栅格的配色用Inferno或者Viridis色带透明度拉到50%左右和底图的融合度会好很多。如果直接默认透明度100%栅格颜色会完全盖住底图基本看不清街道名图就废了。6.2 布局管理器出图全流程进入“布局管理器—新建布局”核心组件安放顺序是地图主体、缩放比例尺、图例、指北针、标题栏、数据说明。地图主体放置后在项目属性里可以设置渲染比例尺。市级公园分析图比例尺设在1:50000到1:100000比较合适区级可以放到1:20000左右。设置方式右键地图主体—移动和缩放—设置地图范围在“比例尺”输入框里直接敲数字。图例组件里要注意只勾选需要显示的图层一定要取消勾选“自动更新”不然图例里会冒出行政区边界、路网辅助图层这些不该出现的内容。图例标题建议改成“图例”字太大反而喧宾夺主。比例尺选“单段”Single Box模式单位设为“千米”分段数3段左右最清晰。城市地图上比例尺动辄好几公里分段多了文字会叠在一起。6.3 导出参数设置避坑导出成图时“布局—导出为图片—设置”分辨率设300 DPI格式选PNG或者PDF。如果图里文字出现乱码多半是字体缺失到系统里装好中文字体后重新打开工程再导一次就好。高级选项里有一个“仅在绘制期间绘制地图项目”复选框导出大幅面地图时如果出现要素丢失把这个勾选取消让QGIS强制重绘所有要素效果会稳很多。最后提醒一句出图前先检查一下是否有“未定义CRS”的图层。如果有图层坐标系统是未知状态出图的时候这个图层会直接消失或者整整一个图层被画到地图角落。解决办法还是老套路——右键图层—图层属性—信息确认CRS不确定的话就“另存为”指定一次坐标系。7. 复盘坐标、边界、字段三个环节踩过的坑汇总每次做完一个区域分析项目我都会把过程中踩过的坑记下来比任何操作手册都有用。这次用百度地图AOI做公园分析最大的收获集中在三个方面第一坐标系处理永远是最前面的关卡。不要等分析做完了才发现底图和AOI错位、面积单位不对。每一步操作前先检查当前图层的CRS这个习惯能省下至少半天返工时间。第二AOI边界数据的清洗比分析本身更耗时。拿到的数据越方便脏数据越多。去掉重复边界、合并拆碎的公园、修复无效几何这几步必须一个不落地走完。很多分析结论不准根本不是方法错是数据源头就没理干净。第三字段命名和属性表的整理决定了后续分析效率。拿到AOI后第一时间把名称、区域、唯一ID这三个字段理顺后面做按区汇总、空间连接就会非常顺手。如果原始数据里字段乱七八杂先花十分钟重命名字段比在分析时反复查字段名要高效得多。这套流程跑通之后再做其他类型的AOI分析比如学校、医院、商圈只需要把分析目标替换一下整体链路是可以直接复用的。对我个人来说QGIS真正厉害的地方就是能把这种网络地图的碎片化数据通过坐标转换、几何清洗、叠加分析这几板斧变成能支撑实际决策的成果。后面如果再有人问我“百度地图AOI数据在GIS里能不能用”我大概会直接把这篇文章甩给他。
返回列表