ArcGis 字段計算器表達式(Field calculator expression).cal文件與標注表達式(label expression).lxp的實質及其編碼方式、解析方法


ArcGis 字段計算器表達式可以保存為一個擴展名為.cal的文件,該文件的實質是一個文本文件,編碼方式為 UTF-16-LE。

官方的說明是“ArcGIS 應用程序使用 UTF-16-LE 編碼讀寫 .cal 文件。只要輸出使用 UTF-16-LE 編碼編寫,其他應用程序(如記事本)可用於創建或修改 .cal 文件。使用任何其他編碼將導致文件無法加載到代碼段中。

在記事本編輯后保存時編碼方式應選用Unicode。

在.net中讀寫應使用Encoding.Unicode。

例:

 1  string saveFilePath = Utils.PathUtil.ShowSaveFileDialog("ArcGis字段計算器表達式|*.cal|所有文件|*.*", ".cal");
 2                 if (saveFilePath != string.Empty)
 3                 {
 4                     StringBuilder stringBuilder = new StringBuilder();
 5                     stringBuilder.Append(this.rtxtCode.Text);
 6                     stringBuilder.AppendLine();
 7                     stringBuilder.Append("__esri_field_calculator_splitter__");
 8                     stringBuilder.AppendLine();
 9                     stringBuilder.Append(this.rtxtFunctionName.Text);
10                     System.IO.FileStream fileStream = new System.IO.FileStream(saveFilePath, FileMode.Create);
11                     StreamWriter streamWriter = new StreamWriter(fileStream,Encoding.Unicode);
12                     streamWriter.Write(stringBuilder);
13                     streamWriter.Flush();
14                     streamWriter.Close();
15                     streamWriter.Dispose();
16                     fileStream.Close();
17                 }

 在python下應使用“UTF-16-LE”

例:

    cal=arcpy.GetParameterAsText(3)
    cal_cntent=codecs.open(cal,'r','utf-16-LE')
    code=''
    exp=''
    line=cal_cntent.readline()
    while line:
        if '__esri_field_calculator_splitter__' not in line:
            if line !=' ':
                code+=line
        else:
            line=cal_cntent.readline()
            break
        line=cal_cntent.readline()
    while line:
        if line !=' ':
            exp+=line
        line=cal_cntent.readline()

 

編碼方式自官方說明得之,鏈接附此:

https://pro.arcgis.com/zh-cn/pro-app/tool-reference/data-management/calculate-field.htm

.lxp與.cal同原理,不贅述。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM