zoukankan      html  css  js  c++  java
  • 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同原理,不赘述。

  • 相关阅读:
    复用$.ajax方式传递参数错误处理
    JS传递函数并且调用
    JQuery $.axaj的基本格式
    AOP的具体实践-简化结果返回的处理
    将Python打包成可执行文件exe的心路历程
    通过Python实现一个文档的半自动录入工具
    我的第一次实习感悟
    docker nginx+php-fpm+mysql
    使用Harbor搭建docker私服
    python 验证码获取后处理降噪、灰度、保存
  • 原文地址:https://www.cnblogs.com/yzhyingcool/p/11182220.html
Copyright © 2011-2022 走看看