5.4 综合案例:为连锁超市选出最佳新店址


文档摘要

5.4 综合案例:为连锁超市选出最佳新店址 本节摘要:一个完整案例走通全章工具——某区域连锁超市要在县城新增一家门店,从商业逻辑翻译为五条空间条件,用缓冲区、擦除、相交、空间连接、近邻分析组合成一条分析链,从 214 个初始地块筛出 3 个候选并排出第一,最后给出变式讨论:条件权重变化时结论如何随之改变。 背景:扩张难题 城关超市是一家区域连锁,在县城已有两家门店,经营数据稳定。董事会决定新增第三家店,预算约束下只开一家,选址失败的成本约等于两家老店一年的利润。运营团队给的条件是常识性的:人要多、离老店要远、要顺路、别贴着竞品、租金可承受。这五句话没有任何一句是空间条件,翻译工作是分析师的第一道工序。

5.4 综合案例:为连锁超市选出最佳新店址

本节摘要:一个完整案例走通全章工具——某区域连锁超市要在县城新增一家门店,从商业逻辑翻译为五条空间条件,用缓冲区、擦除、相交、空间连接、近邻分析组合成一条分析链,从 214 个初始地块筛出 3 个候选并排出第一,最后给出变式讨论:条件权重变化时结论如何随之改变。

背景:扩张难题

城关超市是一家区域连锁,在县城已有两家门店,经营数据稳定。董事会决定新增第三家店,预算约束下只开一家,选址失败的成本约等于两家老店一年的利润。运营团队给的条件是常识性的:人要多、离老店要远、要顺路、别贴着竞品、租金可承受。这五句话没有任何一句是空间条件,翻译工作是分析师的第一道工序。

把商业语言翻译成图层语言,五条变成五张可运算的图层:

  1. 人要多:人口密度高于全县城区中位数,且位于居住用地——人口格网图层加土地利用图层
  2. 离老店要远:距现有门店直线 1.2 公里以上——门店点图层做缓冲再取反
  3. 要顺路:距主干道 200 米以内——道路线图层做缓冲
  4. 别贴着竞品:距竞品门店 400 米以外——竞品点图层做缓冲再取反
  5. 地块可用:面积为 1500 到 5000 平方米的居住或商服地块——地块图层按属性筛选

五条全部满足的地块进入候选池,再按得分排序。注意这里的方法论选择:先做硬约束的层层筛选(六式与邻近度),再做连续得分排序(属性加权)——硬筛保合规,排序定优劣,两段分工清楚。

图:选址分析链全图

图:选址分析链全图

操作:分析链逐段执行

以下脚本按链执行,每段注明"留下多少"。工程环境沿用 5.1 节的标准设置。

import arcpy arcpy.env.workspace = r"K:/gisdata/site_select.gdb" arcpy.env.overwriteOutput = True # 第一段:候选池——面积与用地类型的属性级筛选 arcpy.management.SelectLayerByAttribute( "parcels", "NEW_SELECTION", "面积_平米 >= 1500 AND 面积_平米 <= 5000 AND 用地类型 IN ('居住','商服')") arcpy.management.CopyFeatures("parcels", "cand_pool") print("候选池:", int(arcpy.management.GetCount("cand_pool").getOutput(0))) # 输出: 候选池: 214 # 第二段:条件1 人口——与高密度居住格网相交 arcpy.analysis.Intersect(["cand_pool", "pop_high_density"], "c1_pop", "ONLY_FID") # 第三段:条件3 临路——与主干道缓冲相交 arcpy.analysis.Buffer("roads_major", "road_buf", "200 Meters", dissolve_option="ALL") arcpy.analysis.Intersect(["c1_pop", "road_buf"], "c3_road", "ONLY_FID") print("过人口与临路两关:", int(arcpy.management.GetCount("c3_road").getOutput(0))) # 输出: 过人口与临路两关: 31
import arcpy arcpy.env.workspace = r"K:/gisdata/site_select.gdb" arcpy.env.overwriteOutput = True # 第四段:条件2 与条件4 —— 两次擦除 arcpy.analysis.Buffer("own_stores", "own_buf", "1200 Meters", dissolve_option="ALL") arcpy.analysis.Erase("c3_road", "own_buf", "c4_far_own") # 离老店远 arcpy.analysis.Buffer("competitors", "comp_buf", "400 Meters", dissolve_option="ALL") arcpy.analysis.Erase("c4_far_own", "comp_buf", "final_cands") # 避竞品 print("五关全过:", int(arcpy.management.GetCount("final_cands").getOutput(0))) # 输出: 五关全过: 7 # 第五段:清理碎片——去掉面积不足 800 平米的边角切片 arcpy.management.SelectLayerByAttribute("final_cands", "NEW_SELECTION", "面积_平米 >= 800") arcpy.management.CopyFeatures("final_cands", "final_clean") print("净化后:", int(arcpy.management.GetCount("final_clean").getOutput(0))) # 输出: 净化后: 7

五关之后剩 7 块。接下来给这 7 块挂上排序所需的连续变量——500 米内人口、最近地铁站距离、周边竞品计数:

import arcpy arcpy.env.workspace = r"K:/gisdata/site_select.gdb" arcpy.env.overwriteOutput = True # 排序变量一:500 米内常住人口(缓冲后与人口格网空间连接求和) arcpy.analysis.Buffer("final_clean", "cand_buf500", "500 Meters") arcpy.analysis.SpatialJoin("cand_buf500", "pop_grid", "cand_pop", join_operation="JOIN_ONE_TO_ONE", field_mapping='pop_sum "500米人口" true true false 0 Double 0 0,Sum,#,pop_grid,POP,0,0') # 排序变量二与三:最近地铁站距离、周边800米竞品数 arcpy.analysis.Near("cand_pop", "metro_stations") arcpy.analysis.SpatialJoin("cand_pop", "comp_buf_pt", "cand_scored", join_operation="JOIN_ONE_TO_ONE", field_mapping='comp_n "竞品数" true true false 0 Long 0 0,Count,#,comp_buf_pt,FID,0,0') # 打分:人口每千人1分 地铁每百米扣0.1分 竞品每个扣1.5分 fields = ["FID", "500米人口", "NEAR_DIST", "竞品数"] for fid, pop, dist, comp in arcpy.da.SearchCursor("cand_scored", fields): score = pop/1000 - (dist or 0)/1000 - 1.5*(comp or 0) print(f"地块 {fid}: 人口 {pop:.0f} 地铁 {dist:.0f}米 竞品 {comp} 个 得分 {score:.2f}") # 输出: # 地块 G-041: 人口 6200 地铁 820米 竞品 1 个 得分 3.88 # 地块 G-112: 人口 9800 地铁 450米 竞品 0 个 得分 9.35 # 地块 G-178: 人口 7100 地铁 1250米 竞品 2 个 得分 3.25 # ...其余 4 块得分不足 2 分

结果与解读

7 块候选中,前 3 名构成终审名单,G-112 以 9.35 分显著领先。为什么是它?拆开得分看:9800 人的 500 米人口盘是三甲中最大,几乎翻倍第三名;450 米的地铁距离让它独享"顺路"红利;周边 800 米没有竞品,是三甲中唯一的空白市场。三个维度同时占优,领先不是权重巧合。

但解读必须诚实地标注方法边界:直线距离低估了真实通行成本(地铁 450 米若隔着高架,实际绕行 1 公里);人口格网是夜间常住人口,早高峰的办公人流没算进去;"竞品为零"也可能是"商业死地"的信号而非蓝海。所以结论的正确表述是"G-112 在既定模型与数据口径下显著领先,建议优先现场核查"——分析给出的是优先级,不是免检章。终审清单还应有:租金谈判空间、产权状态、市政条件,这些是 GIS 之外的世界。

变式:条件变了,答案会怎样

选址模型的敏感度测试是专业分析的自证环节,换三组参数重跑第五段打分:

变式A 生鲜社区店(顾客步行到店):人口半径缩到 300 米,权重加倍 地铁距离权重降为 0,竞品罚分减半(社区店对竞品容忍度高) 结果:G-041 升至第一——它人口盘小而密,正合社区店逻辑 变式B 大型综超(辐射全城):人口半径扩到 1500 米,竞品罚分加倍 结果:G-178 险胜——它牺牲地铁便利换来大体量用地与更远竞品 变式C 竞品数据过期(新开一家未入库):竞品层补入新点后重跑 结果:G-112 竞品数变 1,得分 7.85,仍居第一但领先幅度收窄

三个变式给出三个教训:模型结论随权重敏感变化时(A、B 排名互换),必须把权重假设写进报告让决策者看到;结论稳健时(C),也要说清"稳健到什么程度"。第 3 章的数据质量六问在这里兑现——时间精度(竞品数据时效)直接动摇过一次排序。

本节要点回顾

  • 翻译工序:五句商业语言译成五张可运算图层,是分析师第一道工序
  • 两段方法论:硬约束用六式层层筛、连续得分用属性加权排,分工不混
  • 链条留痕:每段输出计数、每步可复现,评审与审计才有依据
  • 解读守边界:直线距离、静态人口、竞品时效三类局限主动声明
  • 敏感度自证:换权重重跑,把"结论随假设变化的程度"呈报给决策者

第 5 章完成,矢量世界的叠加对话到此闭环。下一章转入栅格——当地图变成一格一格的数字,叠加从几何求交换成整幅对齐的算术,适宜性建模与空间统计将在其上展开。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U