多文件要素连接规范

可通过新建多文件要素连接对话框创建多文件要素连接工具创建多文件要素连接 (MFC)。 新建多文件要素连接对话框和工具将生成一个 MFC 项目,您可以在地理处理工具中浏览和使用该项目。 MFC 项目详细信息存储在 .mfc 文件中。 MFC 详细信息包含数据位置以及有关各个数据集的信息。

建议您检查和修改 MFC 数据集,以确保它们准确表示您的数据。 要修改 MFC,请使用对话框或 MFC 工具。 在某些情况下,手动修改文件(例如,更新源数据路径或添加复杂几何格式)可能比较合适。 修改文件时,建议执行以下操作:

  • 如果恢复更改,则需要备份当前 .mfc 文件。
  • 通过在线免费获取的 JSON 验证来验证您的更新 .mfc 文件。

使用文本编辑器修改 .mfc 文件。 下面将对文件的规范进行简要介绍。


"connection" : {}
"datasets":[]

该连接包含类型和属性。 属性用于指定源文件夹的路径。 要移动数据,您可以更新属性路径。


"connection" : {
  "type": "filesystem",
  "properties":{
      "path": <path to source folder>
      }
}

数据集包括 MFC 中的一个或多个数据集。 数据集的数量取决于 MFC 中包含的文件夹数。 在下面的示例中,有 5 个数据集:


"datasets":[
  {.. dataset1 ..},
  {.. dataset2 ..},
  {.. dataset3 ..},
  {.. dataset4 ..},
  {.. dataset5 ..},
]

在每个数据集中,有 5 个可能适用的顶级对象。 在这些对象中,nameformatschema 是必需项。

{
 "name": <dataset name>,
 "alias": <alias name>,
 "sourceName": <source name>,
 "filter": <where clause>,
 "properties": {},
 "fields": {},
 "geometry": {},
 "time": {}
}

名称

需要 name 对象来定义数据集的名称。 清单内部的名称必须唯一。

别名

alias 对象是可选项,并且是数据集的替代名称,该名称更具描述性,且可以包含在 name 对象中受限制的字符。 别名必须与数据集名称相同或在 .mfc 文件中唯一。

源名称

sourceName 对象与源文件夹名称匹配时,name 对象为可选项。 当名称与源文件夹不同时,sourceName 对象必须包括在内,并与文件夹名称完全匹配。 sourceName 对象允许您使用同一源文件夹创建具有唯一名称的多个数据集。 例如,如果您已有一个名为 taxis 的数据集(sourceName 为出租车),则您可以拥有名为 taxi_pickuptaxi_dropoff 的数据集,它们具有不同的几何和时间格式。这些数据集具有相同的源名称和不同的名称。 这三个数据集都代表相同的原始数据集,即 taxis。

过滤

filter 对象为可选项,并将 SQL 表达式应用于数据集。 仅使用满足过滤条件的要素。 过滤器会影响绘图,图层属性表中显示的要素,以及可以通过地理处理工具进行选择、标注、标识和处理的要素。 例如,过滤器 "X IS NOT NULL AND Y IS NOT NULL" 将仅使用 x 和 y 字段不为空的要素。

属性

需要 properties 对象来定义数据集类型及其格式。

语法

"properties" : {
 "fileformat" :  "< delimited | shapefile | orc | parquet >",
 "delimited.extension" : "< csv | tsv | txt | other >",
 "delimited.fieldDelimiter" : "< delimiter >",
 "delimited.recordTerminator: "< terminator >",
 "delimited.quoteChar":  "< character for quotes>",
 "delimited.escapeChar":  "< character for escape>",
 "delimited.hasHeaderRow" :  < true | false >, 
 "delimited.encoding" : "< encoding format >"
}

示例

以下是使用 shapefile 的示例:

"format" : {
 "type": "shapefile",
}

以下是使用分隔文件的示例:

"format" : {
 "type": "delimited",
 "delimited.extension": "csv",
 "delimited.fieldDelimiter": ",",
 "delimited.recordTerminator": "\n", 
 "delimited.quoteChar" "\"",
 "delimited.escapeChar" "\"",
 "delimited.hasHeaderRow": true,
 "delimited.encoding" : "UTF-8"
}

描述

  • type - 用于定义源数据的必要属性。 可以为 delimitedshapefileparquetorc
  • 其余对象仅为分隔文件指定的,并且是必需项:
    • delimited.extension - 用于表示分隔文件扩展名的必要属性(例如,csvtsv)。
    • delimited.quoteChar - 用于表示如何在分隔文件中指定引号。
    • delimited.escapeChar - 用于表示如何在分隔文件中指定反斜线。
    • delimited.encoding - 用于指定所用的编码类型。
    • delimited.recordTerminator - 用于指定在分隔文件中终止要素的内容。
    • delimited.fieldDelimiter - 用于表示在分隔文件中分隔字段的内容。
    • delimited.hasHeaderRow - 用于指定分隔文件中的第一行将被视为标题还是第一个要素。

字段

fields 对象为必需项;用于定义数据集字段、字段类型和可见性。

语法

"fields" : [{
  "name": <fieldName>,
  "sourceName": <field name in source>,
  "type" : < Int8 | Int16 | Int32 | Int64 | Float32 | Float64 | String | 
     Binary | Date >,
  "visible" : <true | false>
 },
 {...field 2...}, 
 {...field 3...}
 ...
 {...field n...}
}

示例

"fields" : {
  {
   "name": "trackid",
   "type": "String"
  },
  {
   "name": "x",
   "type": "Float32",
   "visible" : false
  },
  {
   "name": "y",
   "type": "Float32",
   "visible" : false
  },
  {
   "name": "time",
   "type": "Int64",
   "visible" : false
  },
  {
   "name": "value",
   "type": "Float64"
  }
 ]
}

描述

  • name - 用于表示字段名称的必要属性。 数据集中的字段名称必须唯一,且仅可包含字母数字字符和下划线。
  • sourceName - 用于表示源数据集中字段名称的可选属性。 仅当名称与文件夹名称不匹配时,其才为必需项。
  • visible - 可选属性,用于表示该字段在地理处理工具中是否可见。 默认情况下,对于最初使用创建多文件要素连接刷新多文件要素连接工具设置为时间和几何字段的字段,其可见性已设置为 false。 默认情况下,所有其他字段均设置为 true
  • type - 用于表示字段类型的必要属性。 具体包括如下选项:
    • Int8 - 在 ArcGIS AllSource 表示为短型字段。
    • Int16 - 在 ArcGIS AllSource 表示为短型字段。
    • Int32 - 在 ArcGIS AllSource 表示为长型字段。
    • Int64 - 在 ArcGIS AllSource 表示为双精度字段。
    • Float32 - 在 ArcGIS AllSource 表示为浮点型字段。
    • Float64 - 在 ArcGIS AllSource 表示为双精度字段。
    • String - 在 ArcGIS AllSource 表示为字符串字段。
    • Binary - 在 ArcGIS AllSource 表示为 BLOB 字段。 仅 parquet 和 ORC 输入可以包含二进制值。
    • Date - 在 ArcGIS AllSource 表示为日期字段。 仅 shapefile、ORC 和 parquet 数据集可以具有日期字段。

几何

geometry 对象为可选项;但是如果数据集具有空间表示(如点、线、或面),则需要该项。

语法

"geometry" : {
 "geometryType" : "< esriGeometryType >",
 "spatialReference" : {
 <spatial reference JSON>
  },
 "fields": [
 {
  "name": "<fieldName1>",
  "formats": ["<fieldFormat1>"]
 },
 {
  "name": "<fieldName2>",
  "formats": ["<fieldFormat2>"]
 }
 ]
}

示例

以下为使用具有 x 和 y 值的分隔文件的示例:

"geometry" : {
 "geometryType" : "esriGeometryPoint",
 "spatialReference" : {
  "wkid" : 3369
 },
 "fields": [
 {
  "name": "Longitude",
  "formats": ["x"]
 },
 {
  "name": "Latitude",
  "formats": ["y"]
 }
 ]
}

以下为使用具有 x,y 和 z 值的分隔文件的示例:

"geometry" : {
 "geometryType" : "esriGeometryPoint",
 "spatialReference" : {
  "wkt" : "GEOGCS[\"GCS_WGS_1984_Perfect_Sphere\",DATUM[\"D_Sphere\",SPHEROID[\"Sphere\",6371000.0,0.0]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]"
 },
 "fields": [
 {
  "name": "Longitude",
  "formats": ["x"]
 },
 {
  "name": "Latitude",
  "formats": ["y"]
 },
 {
  "name": "Height",
  "formats": ["z"]
 }
 ]
}

以下为使用 .tsv 文件的示例:

"geometry" : {
 "geometryType" : "esriGeometryPolygon",
 "spatialReference" : {
  "wkid": 4326
 },
 "fields": [
 {
  "name": "Shapelocation",
  "formats": ["WKT"]
 }
 ]
}

在以下示例中所使用的分隔文件中,x 值位于格式化字段中,y 值位于多个字段中:

"geometry" : {
 "geometryType" : "esriGeometryPoint",
 "spatialReference" : {
  "wkid": 3857
 },
 "fields": [
 {
  "name": "XValue",
  "formats": ["{x:degrees}° {x:minutes}' {x:seconds}" ]
 },
 {
  "name": "YDegrees",
  "formats": ["{y:degrees}"]
 },
 {
  "name": "YMinutes",
  "formats": ["{y:minutes}"]
 },
 {
  "name": "YSeconds",
  "formats": ["{y:seconds}"]
 }
 ]
}

描述

由于 geometry 对象是可选项,因此将以下属性列为必需项或可选项(假定使用 geometry):

  • geometryType - 用于表示几何类型的必要属性。 具体包括如下选项:
    • esriGeometryPoint - 几何类型为点。
    • esriGeometryPolyline - 几何类型为折线。
    • esriGeometryPolygon - 几何类型为面。
  • spatialReference - 用于表示数据集的空间参考的必要属性。 如果数据集具有几何,则必须指定 WKID (WKID 和最新 WKID)或 WKT 中的一个或两个。
    • wkid - 使用 WKID 的空间参考,例如 4326。
    • latestWkid - 给定软件版本的空间参考。
    • wkt - 使用知名文本字符串的空间参考。
  • fields - 包含空间表示的分隔数据集的必要属性。 此项表示字段名称或几何的名称和格式。
    • name - 包含空间表示的分隔数据集的必要属性。 表示几何字段的名称。 此项可以有多个实例。
    • formats - 包含空间表示的分隔数据集的必要属性。 此项表示用于表示几何的字段格式。 此项可以有多个实例。 如果您的位置分布在多个字段中或以字符串设置格式,请使用值或 degreesminutesseconds 指定单位或 direction 指定方向(N、S、W、E)。

时间

time 对象为可选项;但是,如果数据集具有时间表示,则为必需项。

语法

"time" : {
 "timeType" : "< instant | interval >",
 "timeReference" : {
  "timeZone" : "<timeZone >"
  },
  "fields": [
  {
   "name": "<fieldName1>",
   "formats": ["<fieldFormat1>"]
   "role": "< start | end >"
  }
 ]
}

示例

以下为在时间字段中使用具有多种格式的时刻的示例:

"time": {
 "timeType": "instant",
 "timeReference": {"timeZone": "UTC"},
 "fields": [
 {
  "name": "iso_time",
  "formats": [
   "yyyy-MM-dd HH:mm:ss",
   "MM/dd/yyyy HH:mm"
   ]
  }
 ]
}

以下为在多个 startTime 字段中使用间隔的示例:

"time": {
 "timeType": "interval",
 "timeReference": {"timeZone": "-0900"},
 "dropSourceFields" : true,
 "fields": [
 {
  "name": "time_start",
  "formats": ["HH:mm:ss"],
  "role" : "start"
  },
 {
  "name": "date_start",
  "formats": ["yyyy-MM-dd"],
  "role" : "start"
  },
 {
  "name": "datetime_ending",
  "formats": ["yyyy-MM-dd HH:mm:ss"],
  "role" : "end"
  }
 ]
}

描述

由于 time 对象是可选项,因此将以下属性列为必需项或可选项(假定使用 time):

  • timeType - 如果数据集中包含时间,则为必需属性。 具体包括如下选项:
    • instant - 单个时间点
    • interval - 包含开始时间和结束时间的时间间隔
  • timeReference - 如果数据集已启用时间表示时区 (timeZone),则此项为必需属性。
    • timeZone - 用于表示数据时区格式的必需属性。 时区基于 Joda-Time。 如需了解有关 Joda-Time 格式的信息,请参阅 Joda-Time 可用时区timeZone 属性的格式如下:
      • 时区全称:Pacific Standard Time
      • 以小时表示的时区偏差:-0100-01:00
      • 时区缩写:仅限 UTCGMT
  • fields - 用于表示字段名称和时间格式的必填字段。 fields 的必需属性如下:
    • name - 用于表示代表时间的字段名称的必需属性。 此对象可以有多个实例。
    • formats - 用于表示代表时间的字段格式的必需属性。 单个字段(如上所示)可以具有多种格式,也可以具有此对象的多个实例。 要了解如何格式化时间字段,请参阅时间格式。 当时间格式包含时间参考时,请将 timeReference 属性设置为 UTC
    • role - 当 timeTypeinterval 时需要此属性。 它可以表示时间间隔的 startTimeendTime