学校选址(ArcPy实现)
一、背景
合理的学校空间位置布局,有利于学生的上课与生活。学校的选址问题需要考虑地理位置、学生娱乐场所配套、与现有学校的距离间隔等因素,从总体上把握这些因素能够确定出适宜性比较好的学校选址区。
二、目的
通过练习,熟悉ArcGIS栅格数据距离制图、成本距离加权、数据重分类、多层面合并等空间分析功能﹔熟练掌握利用ArcGIS空间分析功能,分析和结果类似学校选址的实际应用问题。
三、数据
(1) landuse (土地利用图);
(2) dem(地面高程图);
(3) rec _ sites(娱乐场所分布图);
(4) school(现有学校分布图)。
(\Chp8 \ Ex1 \)
四、要求
(1)新学校选址需注意如下几点:①新学校应位于地势较平坦处;②新学校的建立应结合现有土地利用类型综合考虑,选择成本不高的区域;③新学校应该与现有娱乐设施相配套,学校距离这些设施越近越好﹔④新学校应避开现有学校,合理分布。
(2)各数据层权重比为:距离娱乐设施占0.5,距离学校占0.25,土地利用类型和地势位置因素各占0.125。
(3)实现过程运用ArcGIS的扩展模块( extension)中的空间分析( spatial ana-lyst)部分功能,具体包括:坡度计算、直线距离制图功能、重分类及栅格计算器等功能完成。
(4)给出适合新建学校的适宜地区图,并作简要分析。
五、实现流程图
ArcGIS中实现学校选址分析,首先利用现有学校数据集、现有娱乐场所数据集和高程数据派生出坡度数据,以及到现有学校、娱乐场所距离数据集。然后重分类数据集到相同的等级范围,再按照上述数据集在学校选址中的影响率赋权重值,最后合并这些数据即可创建显示新学校适宜位置分布的地图。学校选址的逻辑过程主要包括四个部分(如下图所示,结果中深色部分为学校候选区)。
(1)数据准备,确定需要哪些数据作为输人,包括高程数据(dem)、土地利用数据(landuse)、现有学校数据(school)娱乐场所数据(rec_ sites) ;
(2)派生数据集,从现存数据派生出能提供学校选址的原始成本数据,包括坡度数据、到现有学校距离数据集和到娱乐场所数据集;
(3)重分类各种数据集,消除各成本数据集的量纲影响,使各成本数据具有大致相同的可比分类体系。各成本数据均按等间距分类原则分为1~10级,级数越高适宜性越好﹔
(4)给各数据集赋权重。必要的话在适宜性模型中影响比较大的数据集赋比较高权重,然后合并各数据集合以寻找适宜位置。

六、模型构建器

七、ArcPy实现
# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# 8-1 学校选址.py
# Created on: 2021-10-12 13:19:17.00000
# (generated by ArcGIS/ModelBuilder)
# Description:
# ---------------------------------------------------------------------------
# Import arcpy module
import arcpy
from arcpy import Raster
import os
import shutil
import time
print time.asctime()
path = raw_input("请输入数据所在文件夹的绝对路径(如果是数据库,则带上数据库名):").decode("utf-8")
if "db" in path:
paths = os.path.split(path)[0] + '\\result'
else:
paths = path + "\\result"
# 开始计时
time_start = time.time()
if not os.path.exists(paths):
os.mkdir(paths)
else:
shutil.rmtree(paths)
os.mkdir(paths)
# Local variables:
rec_sites = path + "\\rec_sites"
dem = path + "\\dem"
landuse = path + "\\landuse"
school = path + "\\school"
# 温馨建议:输出文件的名称不能超过13个字符
Direct_grid1 = "Direct_grid1"
Reverse_grid1 = "Reverse_grid1"
Direct_grid2 = "Direct_grid2"
Reverse_grid2 = "Reverse_grid2"
Dist_recsites = "Dist_recsites"
Re_recsite = "Re_recsite"
Dist_schools = "Dist_schools"
Re_schools = "Re_schools"
Slope_dem = "Slope_dem"
Re_slope = "Re_slope"
land_use = "land_use"
Re_landuse = "Re_landuse"
site_result = "学校选址结果"
# Set Geoprocessing environments
print "Set Geoprocessing environments"
arcpy.env.scratchWorkspace = paths
arcpy.env.workspace = paths
arcpy.env.extent = landuse
arcpy.env.cellSize = dem
arcpy.env.mask = landuse
# Process: 要素转栅格
print "Process: 要素转栅格"
arcpy.FeatureToRaster_conversion(landuse, "Land_use", land_use, "5")
# Process: 重分类
print "Process: 重分类"
arcpy.gp.Reclassify_sa(land_use, "Land_use", "'city center' 3;transnational 7;public 10;vegetable 4;agriculture 5;forest 2;'barren land' 1", Re_landuse, "DATA")
# Process: 坡度
print "Process: 坡度"
arcpy.gp.Slope_sa(dem, Slope_dem, "DEGREE", "1", "PLANAR", "METER")
# Process: 重分类 (2)
print "Process: 重分类 (2)"
arcpy.gp.Reclassify_sa(Slope_dem, "Value", "0.108518 6.291646 10;6.291646 10.751648 9;10.751648 15.131917 8;15.131917 19.819941 7;19.819941 24.931349 6;24.931349 30.529348 5;30.529348 36.494091 4;36.494091 42.837433 3;42.837433 50.637821 2;50.637821 71.992943 1", Re_slope, "DATA")
# Process: 欧氏距离
print "Process: 欧氏距离"
arcpy.gp.EucDistance_sa(rec_sites, Dist_recsites, "", dem, Direct_grid1, "PLANAR", "", Reverse_grid1)
# Process: 欧氏距离 (2)
print "Process: 欧氏距离 (2)"
arcpy.gp.EucDistance_sa(school, Dist_schools, "", dem, Direct_grid2, "PLANAR", "", Reverse_grid2)
# Process: 重分类 (3)
print "Process: 重分类 (3)"
arcpy.gp.Reclassify_sa(Dist_recsites, "Value", "0 61.846584 10;61.846584 111.018013 9;111.018013 158.113876 8;158.113876 206.155289 7;206.155289 256.320099 6;256.320099 309.273346 5;309.273346 366.230804 4;366.230804 427.463440 3;427.463440 492.544403 2;492.544403 614.837402 1", Re_recsite, "DATA")
# Process: 重分类 (4)
print "Process: 重分类 (4)"
arcpy.gp.Reclassify_sa(Dist_schools, "Value", "0 93.941475 10;93.941475 155.724121 9;155.724121 212.896683 8;212.896683 269.258240 7;269.258240 326.955658 6;326.955658 388.490662 5;388.490662 454.009918 4;454.009918 521.176575 3;521.176575 598.539917 2;598.539917 738.782776 1", Re_schools, "DATA")
# Process: 栅格计算器
# arcpy.gp.RasterCalculator_sa("\"%Re_recsite%\" * 0.5 + \"%Re_schools%\" * 0.25 + \"%Re_slope%\" * 0.125 + \"%Re_landuse%\" * 0.125", site_result)
# Process: 乘运算、加运算
print "Process: 乘运算、加运算"
(Raster('Re_recsite') * 0.5 + Raster('Re_schools') * 0.25 + Raster('Re_slope') * 0.125 + Raster('Re_landuse') * 0.125).save(site_result)
save = [u"学校选址结果"]
rasters = arcpy.ListRasters()
for raster in rasters:
if raster.lower() not in save:
print u"正在删除{}图层".format(raster)
arcpy.Delete_management(raster)
# 结束计时
time_end = time.time()
# 计算所用时间
time_all = time_end - time_start
print time.asctime()
print "执行完毕!>>><<< 共耗时{:.0f}分{:.2f}秒".format(time_all // 60, time_all % 60)
八、结果



实验结束 byebye~
学校选址(ArcPy实现)的更多相关文章
- ArcGIS案例学习笔记2_1_学校选址适宜性分析
ArcGIS案例学习笔记2_1_学校选址适宜性分析 计划时间:第二天上午 目的:学校选址,适宜性分析 内容:栅格数据分析 教程:pdf page=323 数据:chapter8/ex1/教育,生活,土 ...
- GIS大讲堂内所有讲座的索引(更新至2008年6月26日)(转)
转自:http://www.cnblogs.com/xiexiaokui/archive/2008/11/20/1337934.html GIS大讲堂内所有讲座的索引(更新至2008年6月26日) ...
- ArcGIS案例学习笔记2_1
ArcGIS案例学习笔记2_1 联系方式:谢老师,135_4855_4328,xiexiaokui#qq.com 时间:第二天上午 案例1:学校选址 内容:栅格数据分析 教程:pdf page=323 ...
- ArcMap操作练习题目及答案
题目: 1.主观题(20分)用文字说明中学选址的过程,并说明分析过程中所用的空间分析方法和分析工具. 2.主观题(10分)计算目标区内道路网的密度.(数据框1) 3.主观题(20分)对roadnet里 ...
- zz《百度地图商业选址》
作者 | 阚长城 编辑 | 张慧芳 题图 | 站酷海阔 人类几千年的文明催生了城市的发展,计算机与复杂科学带给我们新的资源——大数据.罗马非一日建成,人力和时间成本极大,但试想一下,如果有了大数据,罗 ...
- 寻找最佳路径(ArcPy实现)
一.背景 随着社会经济发展需求,公路的重要性日益提高.在一些交通欠发达的地区,公路建设迫在眉睫.如何根据实际地形情况设计出比较合理的公路规划,是一个值得研究的问题. 二.实验目的: (1)通过练习,熟 ...
- arcpy+PyQt+py2exe快速开发桌面端ArcGIS应用程序
前段时间有一个项目,大体是要做一个GIS数据处理工具. 一般的方法是基于ArcObjects来进行开发,因为我对ArcObjects不太熟悉,所以就思考有没有其他简单快速的方法来做. 在查看ArcGI ...
- BZOJ 1226: [SDOI2009]学校食堂Dining
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 730 Solved: 446[Submit][ ...
- Atitit 教育与培训学校 的计划策划 v4 qc18
Atitit 教育与培训学校 的计划策划 v4 qc18 1.1. 版本历史12. 教育历史的前世今生12.1. 自学vs 家庭学校vs 私立学校vs 公立学校模式 vs 企业内部学校 vs 其他商业 ...
随机推荐
- go协程调度
目录 前言 1. 线程池的缺陷 2.Goroutine 调度器 3.调度策略 3.1 队列轮转 3.2 系统调用 3.3 工作量窃取 4.GOMAXPROCS设置对性能的影响 参考 前言 Gorout ...
- 手把手教你在 SuperEdge 上用 EdgeX Foundry 接入 IoT 设备
作者 连泓乔,华南理工计算机科学与技术大三在读,主要研究容器领域,Kubernetes.容器等云原生技术爱好者,SuperEdge 优秀贡献者. 王冬,腾讯云研发工程师,专注于 Kubernetes. ...
- 洛谷P2115 Sabotage G 题解
题目 [USACO14MAR]Sabotage G 题解 本蒟蒻又来了,这道题可以用二分答案来解决.我们可以设答案最小平均产奶量为 \(x \ (x \in[1,10000])\) .然后二分搜索 \ ...
- Http协议 压缩
先说结论:Request和Response可以设置gzip压缩从而节省流量/带宽,这是一个不常见的问题.具体可见连接:HTTP 协议之压缩 最近测试代理服务器时,意外的发现使用urlopen请求百度首 ...
- linux系列之:告诉他,他根本不懂kill
目录 简介 使用kill来杀死进程 kill的深入用法 僵尸进程和kill java thread dump 总结 简介 和很多程序员打过交道,这些程序员可能熟知for遍历的好几种写法,但是却对写出来 ...
- 一文搞懂Python Unittest测试方法执行顺序
大家好~我是米洛! 欢迎关注我的公众号测试开发坑货,一起交流!点赞收藏关注,不迷路. Unittest unittest大家应该都不陌生.它作为一款博主在5-6年前最常用的单元测试框架,现在正被pyt ...
- 第七章:网络优化与正则化(Part1)
任何数学技巧都不能弥补信息的缺失. --科尼利厄斯·兰佐斯(Cornelius Lanczos) 匈牙利数学家.物理学家 文章相关 1 第七章:网络优化与正则化(Part1) 2 第七章:网络优化与正 ...
- 机器学习——主成分分析(PCA)
1 前言 PCA(Principal Component Analysis)是一种常用的无监督学习方法,是一种常用的数据分析方法. PCA 通过利用 正交变换 把由 线性相关变量 表示的观测数据转换为 ...
- k8s工作负载资源之deployment
首先我们要理解:一个应用跑在k8s集群上了,那么这个应用就是一个工作负载(workloads). 在k8s中会用pod的来承载这个应用,那么负责管理这个pod的东西就叫工作负载资源(workload ...
- 使用metaweblog API实现通用博客发布 之 本地图片自动上传以及替换路径
使用metaweblog API实现通用博客发布 之 本地图片自动上传以及替换路径 通过metaweblog API 发布博文的时候,由于markdown中的图片路径是本地路径,将导致发布的文章图片不 ...