1, 背景
如何找到環境好、購物方便、小孩上學方便的居住區地段是購房者最關心的問題。因此購房者就需要從總體上對商品房的信息進行研究分析,選擇最適宜的購房地段。
2,目的
學會利用緩沖區分析和疊置分析解決實際問題。
3,數據
試驗數據位於,“\Chp7\Ex_1.
4,要求
所尋求的市區是噪聲要小,距離商業中心和各大名牌高中要近,是為了環境優雅離名勝古跡較近。綜合上述條件,給定一個定量的限定如下:
(1)離主要市區交通要道200m之外,交通要道的車流量大,噪聲產生的主要源於此(ST為道路類型中的主要市區交通要道);
(2)距大型商業中心的影響,以商業中心的大小來確定影響區域,具體是以其屬性字段YUZHI;
(3)距名牌高中在750m之內,以便小孩上學便捷;
(4)距名勝古跡500m之內環境優雅;
具體流程圖如下:
5,模型構建器
6,ArcPy實現
# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# 7-1 市區擇房分析.py
# Created on: 2021-10-09 20:55:29.00000
# (generated by ArcGIS/ModelBuilder)
# Description:
# ---------------------------------------------------------------------------
# Import arcpy module
import arcpy
import os
path = raw_input("請輸入所需數據的對應絕對路徑:").decode("utf-8")
paths = path + '\\result'
if not os.path.exists(paths):
os.mkdir(paths)
# Local variables:
network = path + "\\network.shp"
network_Select_shp = "network_Select.shp"
network_Select_Buffer200_shp = "network_Select_Buffer200.shp"
Marketplace = path + "\\Marketplace.shp"
Marketplace_Buffer_shp = "Marketplace_Buffer.shp"
school = path + "\\school.shp"
school_Buffer_shp = "school_Buffer.shp"
famous_place = path + "\\famous place.shp"
famousplace_Buffer_shp = "famousplace_Buffer.shp"
suitable_shp = u"區域居住適宜性分級.shp"
# Set Geoprocessing environments
arcpy.env.scratchWorkspace = paths
arcpy.env.workspace = paths
# Process: 篩選
print "print Process: 篩選"
arcpy.Select_analysis(network, network_Select_shp, "\"TYPE\" = 'ST'")
# Process: 緩沖區
print "Process: 緩沖區"
arcpy.Buffer_analysis(network_Select_shp, network_Select_Buffer200_shp, "200 Meters", "FULL", "ROUND", "ALL", "", "PLANAR")
# Process: 添加字段
print "Process: 添加字段"
arcpy.AddField_management(network_Select_Buffer200_shp, "voice", "SHORT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: 計算字段
print "Process: 計算字段"
arcpy.CalculateField_management(network_Select_Buffer200_shp, "voice", "-1", "VB", "")
# Process: 緩沖區 (2)
print "Process: 緩沖區 (2)"
arcpy.Buffer_analysis(Marketplace, Marketplace_Buffer_shp, "YUZHI_", "FULL", "ROUND", "ALL", "", "PLANAR")
# Process: 添加字段 (2)
print "Process: 添加字段 (2)"
arcpy.AddField_management(Marketplace_Buffer_shp, "market", "SHORT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: 計算字段 (2)
print "Process: 計算字段 (2)"
arcpy.CalculateField_management(Marketplace_Buffer_shp, "market", "1", "VB", "")
# Process: 緩沖區 (3)
print "Process: 緩沖區 (3)"
arcpy.Buffer_analysis(school, school_Buffer_shp, "750 Meters", "FULL", "ROUND", "ALL", "", "PLANAR")
# Process: 添加字段 (3)
print "Process: 添加字段 (3)"
arcpy.AddField_management(school_Buffer_shp, "school", "SHORT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: 計算字段 (3)
print "Process: 計算字段 (3)"
arcpy.CalculateField_management(school_Buffer_shp, "school", "1", "VB", "")
# Process: 緩沖區 (4)
print "Process: 緩沖區 (4)"
arcpy.Buffer_analysis(famous_place, famousplace_Buffer_shp, "500 Meters", "FULL", "ROUND", "ALL", "", "PLANAR")
# Process: 添加字段 (4)
print "Process: 添加字段 (4)"
arcpy.AddField_management(famousplace_Buffer_shp, "famous", "SHORT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: 計算字段 (4)
print "Process: 計算字段 (4)"
arcpy.CalculateField_management(famousplace_Buffer_shp, "famous", "1", "VB", "")
# Process: 聯合
print "Process: 聯合"
arcpy.Union_analysis(u"{}\\network_Select_Buffer200.shp #;{}\\Marketplace_Buffer.shp #;{}\\school_Buffer.shp #;{}\\famousplace_Buffer.shp #".format(paths,paths,paths,paths), suitable_shp, "ALL", "", "GAPS")
# Process: 刪除字段
print "Process: 刪除字段"
arcpy.DeleteField_management(suitable_shp, "METERS;NAME;TYPE;L_F_ADD;R_T_ADD;CALLE;ONEWAY;L_T_ADD;R_F_ADD;FT_SPEED;TF_SPEED;TF_MINUTES;FT_MINUTES;MINUTES;SPEED;value;BUFF_DIST;ORIG_FID;ID;NAME_1;TYPE_1;YUZHI_;LABEL;value_1;BUFF_DIS_1;ORIG_FID_1;Id_1;name_12;value_12;BUFF_DIS_2;ORIG_FID_2;ID_12;NAME_12_13;LABEL_1;ADDRESS;ʱDDͨESS;ʱDDͨͨSS;ʱDDͨͨ_1;ʱDDͨͨ_2;value_1_13;BUFF_DIS_3;ORIG_FID_3")
# Process: 添加字段 (5)
print "Process: 添加字段 (5)"
arcpy.AddField_management(suitable_shp, "class", "SHORT", "", "", "", "", "NULLABLE", "NON_REQUIRED", "")
# Process: 計算字段 (5)
print "Process: 計算字段 (5)"
arcpy.CalculateField_management(suitable_shp, "class", "[voice] + [market] + [famous] + [school]", "VB", "")
ListFeatureClasses = arcpy.ListFeatureClasses() # 統計要素類個數
for Feature in ListFeatureClasses: # 循環遍歷,刪除不必要要素類
if u"適宜" not in Feature:
print "正在刪除{}".format(Feature)
arcpy.Delete_management(Feature)
print "運行完畢~~~"
注意:刪除字段那里,如果出現錯誤的話,可能是亂碼問題,干脆直接把刪除字段這代碼刪除,繼續執行也可以,
刪除字段只是簡化屬性表罷了!
7,結果展示
后面對最終結果分五個等級,越綠的,說明評分越高,適宜性越好,越紅的,說明評分越低,適宜性越差。區域居住適宜性分級就制作完畢了。
繼續下一個實驗O(∩_∩)O~~~