import geopandas as gpd import arcpy from arcpy import env import pandas as pd import matplotlib.pyplot as plt import numpy as np import matplotlib.patches as mpatches from mpl_toolkits.basemap import Basemap from matplotlib_scalebar.scalebar import ScaleBar plt.rcParams['font.family'] = ['sans-serif'] plt.rcParams['font.sans-serif'] = ['SimHei']# 替換sans-serif字體為黑體 plt.rcParams['axes.unicode_minus'] = False # 解決坐標軸負數的負號顯示問題 path = r'F:\ArcGIS\ArcGIS文件\ModelBuilder\data\chp05' env.workspace = path par_path = path+'\宗地.shp' floor_path = path + '\樓層數.shp' ## 定義投影 ## 都建議大家這么寫,有異常捕捉 try: # set local variables in_dataset = par_path #"forest.shp" # get the coordinate system by describing a feature class dsc = arcpy.Describe(floor_path) coord_sys = dsc.spatialReference # run the tool arcpy.DefineProjection_management(in_dataset, coord_sys) # print messages when the tool runs successfully print(arcpy.GetMessages(0)) except arcpy.ExecuteError: print(arcpy.GetMessages(2)) except Exception as ex: print(ex.args[0]) ## 如何疊圖,關鍵ax = ax fig, ax = plt.subplots(figsize=(8, 8)) floor['coords'] = floor['geometry'].apply(lambda x: x.representative_point().coords[0]) for n, i in enumerate(floor['coords']): plt.text(i[0], i[1], floor['floor'][n], size=20) parcels.plot(ax=ax,alpha=0.3, edgecolor='k',label='宗地') floor.plot(ax=ax,label='大樓') #plt.savefig('待處理.png',dpi=300) ## 就是開頭的圖片,這里就不演示了 ## arcpy獲取字段 featureclass = par_path field_names = [f.name for f in arcpy.ListFields(featureclass)] field_names ## 刪除文件,我做過一遍的 in_data = 'F:\ArcGIS\ArcGIS文件\ModelBuilder\data\chp05\樓層數_SpatialJoin.shp' try: #arcpy.Delete_management (in_data) # print messages when the tool runs successfully print(arcpy.GetMessages(0)) except arcpy.ExecuteError: print(arcpy.GetMessages(2)) except Exception as ex: print(ex.args[0]) ## 空間連接 try: # set local variables target_features = 'F:\ArcGIS\ArcGIS文件\ModelBuilder\data\chp05\樓層數.shp' join_features = 'F:\ArcGIS\ArcGIS文件\ModelBuilder\data\chp05\宗地.shp' out_feature_class = 'F:\ArcGIS\ArcGIS文件\ModelBuilder\data\chp05\樓層數_SpatialJoin.shp' field_mapping = ['floor','宗地號'] # run the tool arcpy.SpatialJoin_analysis(target_features, join_features, out_feature_class,) # print messages when the tool runs successfully print(arcpy.GetMessages(0)) except arcpy.ExecuteError: print(arcpy.GetMessages(2)) except Exception as ex: print(ex.args[0]) ## 刪除字段 f_Spat = 'F:\ArcGIS\ArcGIS文件\ModelBuilder\data\chp05\樓層數_SpatialJoin.shp' try: featureclass = 'F:\ArcGIS\ArcGIS文件\ModelBuilder\data\chp05\樓層數_SpatialJoin.shp' field_names = [f.name for f in arcpy.ListFields(featureclass)] field_names del_features = ['Text','街坊號','宗地預','Sum_占地','Sum_建築','土地用','登記號','權利人', '宗地類','土地坐','面積','土地證','權屬性','使用權','宗地四','宗地面'] arcpy.DeleteField_management(f_Spat,del_features ) # print messages when the tool runs successfully print(arcpy.GetMessages(0)) except arcpy.ExecuteError: print(arcpy.GetMessages(2)) except Exception as ex: print(ex.args[0])
表面上沒有什么變化,但是結果屬性表多了宗地號,還有其他兩個字段,接下來可視化一下。
注意
- 第21行語句如果用“w”,則只會保存一條信息
f = open("F:\code\輸出目標文件夾下圖片信息\OutPixel.txt", "a+")
- “w” 只能操作寫入,“r” 只能讀取,“a” 向文件追加
- “w+” 可讀可寫,"r+"可讀可寫,"a+"可讀可追加
- "wb+"寫入進制數據
- "w"模式打開文件,如果文件中有數據,再次寫入內容,會把原來的覆蓋掉
- 打開txt文件時,如有中文需要使用gbk