天天看點

【辦公自動化】國土空間用地的符号系統加載工具

前面發了【GIS實操】空間規劃的用地顔色及樣式怎麼設? 就有規劃的同學反應剛好需要,本期來看符号系統加載工具,省去了昨天教程裡那麼多設定步驟!

采用标準如下:

  • 國标用地标準依據《國土空間規劃用地用海分類指南》[2020.2],
  • 江蘇用地标準依據《江蘇省村莊規劃編制指南》(試行)[2020.8],
  • 南京用地标準依據《南京市村莊規劃編制技術指南》[2020.3]

1.加載操作

  • 把三調轉換工具箱(後文擷取)放到你友善使用的連接配接檔案夾内,可拖至我的工具箱内。
【辦公自動化】國土空間用地的符号系統加載工具
  • 輕按兩下加載符号系統工具,在工具界面,選擇圖層>選擇樣式lyr檔案,

    我們提供了國家用地标準、江蘇村莊标準、南京村莊标準對應的樣式lyr檔案,亦可自行編制。

    選用lyr檔案應與用地标準一緻,比對關鍵字為layer,與三調轉換工具比對。

    【辦公自動化】國土空間用地的符号系統加載工具
  • 第三項可選,自定義标注字元可以自行修改 自定義标注字元.xls (後文擷取),若不選則使用預設字元。
    【辦公自動化】國土空間用地的符号系統加載工具
  • 自定義标注字元.xls 就三列,ydbm:用地編碼,ydmc:用地名稱,ydfh:用地符号,均可自行修改。

    工具中通過比對ydbm+ydmc的layer字段,添加ydfh内字元

    【辦公自動化】國土空間用地的符号系統加載工具
  • 确定後,看進度提示,至加載完成,GIS會重新整理結果。
【辦公自動化】國土空間用地的符号系統加載工具

就形成了空間規劃的色彩和符号。

【辦公自動化】國土空間用地的符号系統加載工具

注意:

這裡,我們會發現圖紙上的符号會随着放大縮小而改變,點選 視圖>資料框屬性…>參考比例 或者 圖層(Layer)>屬性>參考比例進行設定,這裡我們設定的是1:10000,具體大小可自行測試。

2、腳本檔案

腳本檔案.py,比三調轉換複雜不少,代碼邏輯如下

【辦公自動化】國土空間用地的符号系統加載工具
#!/usr/bin/python
# 工具箱釋出公衆号:規劃醬
# 有使用問題請至公衆号反應

import arcpy
#arcpy函數,擷取面闆上的三個參數
ly_name = arcpy.GetParameterAsText(0)   
lyrfile  = arcpy.GetParameterAsText(1)
fh_excel = arcpy.GetParameterAsText(2)

arcpy.AddMessage(u'> 添加标注字段 ..')
arcpy.AddField_management(ly_name, 'bzfh', "TEXT", "", "", "20")

arcpy.AddMessage(u'> 生成标注字元 ..')
if fh_excel :   #如果有選excel,采用自定義,否則預設标準
    arcpy.AddMessage(u'> 自定義标準 ..')
    dzb_dic = {}
    table = arcpy.SearchCursor(fh_excel) 
    for row in table:
        #判斷ydfh不為空
        if not row.ydfh is None : dzb_dic[row.ydbm+row.ydmc] =  row.ydfh
else:
    arcpy.AddMessage(u'> 預設标準 ..')
    #預設标準集合了南京、江蘇、國标三個标準的符号
    dzb_dic = {u'1108\u73af\u536b\u7528\u5730': u'\u536b', u'18301\u6cbf\u6d77\u6ee9\u6d82': u'\u6ee9', u'1602\u5916\u4e8b\u7528\u5730': u'\u5916', u'1504\u673a\u573a\u7528\u5730': u'\u673a', u'1701\u91c7\u77ff\u7528\u5730': u'\u77ff', u'1304\u673a\u573a\u7528\u5730': u'\u673a', u'1601\u519b\u4e8b\u8bbe\u65bd\u7528\u5730': u'\u519b'} #省略了

n = 0.0
getcount = arcpy.GetCount_management(ly_name)
count = int(getcount.getOutput(0))

table1 = arcpy.UpdateCursor(ly_name)
for row in table1:
    #判斷有符号的圖斑,寫入符号
    if row.layer in dzb_dic.keys() :  row.bzfh = dzb_dic[row.layer]
    table1.updateRow(row)
    n += 1    
    if n/int(count/100) % 10 == 0:  # 每10%顯示一次進度
        arcpy.AddMessage('> '+str(int(n/int(count/100)))+'% ..')

arcpy.AddMessage(u'> 加載lyr符号系統 ..')    
mxd = arcpy.mapping.MapDocument("CURRENT")
df  = arcpy.mapping.ListDataFrames(mxd)[0]
layer1 =  arcpy.mapping.ListLayers(mxd, ly_name)[0]

name = layer1.name
data_name = layer1.datasetName # 擷取資料源名稱

lyr = arcpy.mapping.Layer(lyrfile) # 擷取lyr檔案
arcpy.mapping.AddLayer(df, lyr)    # 加載lyr檔案

layer2 = arcpy.mapping.ListLayers(mxd)[0]  # 擷取lyr檔案圖層

if layer1.workspacePath[-3:] == u'gdb' :   #判斷不同資料源
    #通過修改資料源的辦法,保證符号系統和标注同時生效
    layer2.replaceDataSource(layer1.workspacePath,"FILEGDB_WORKSPACE" , data_name)

elif layer1.workspacePath[-3:] == u'mdb' :
    layer2.replaceDataSource(layer1.workspacePath,"ACCESS_WORKSPACE" , data_name)
    
else:
    layer2.replaceDataSource(layer1.workspacePath, "SHAPEFILE_WORKSPACE" , data_name)

# 删除原圖層,設定新圖層名字
arcpy.Delete_management(name)
layer2.name = name

arcpy.RefreshActiveView() #重新整理gGIS
arcpy.AddMessage('== 符号加載完成 ==')
           

————————————————

9月3日更新了

三調轉換工具箱1.2.tbx

自定義标注字元.xls

————————————————

需要GIS工具箱的同學,關注

版權聲明:本文為CSDN部落客「fenfee」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/fenfee/article/details/108646207