Las conexiones de entidades multiarchivo (MFC) se crean mediante el cuadro de diálogo Nueva conexión de entidades multiarchivo o la herramienta Crear conexión de entidades multiarchivo. El cuadro de diálogo y la herramienta Nueva conexión de entidades multiarchivo generan un elemento de MFC que se puede examinar y utilizar en las herramientas de geoprocesamiento. Los detalles del elemento de MFC se almacenan en un archivo .mfc. Los detalles de la MFC contienen la ubicación de los datos e información sobre cada dataset.
Se recomienda que inspeccione y modifique los datasets de la MFC para asegurarse de que representan con exactitud sus datos. Para modificar una MFC, utilice el cuadro de diálogo o las herramientas de la MFC. En algunos casos, puede ser apropiado modificar el archivo manualmente, por ejemplo, para actualizar la ruta de datos de origen o para agregar un formato de geometría complejo. Al modificar el archivo, se recomienda lo siguiente:
- Realice una copia de seguridad de su archivo .mfc actual en caso de que desee revertir los cambios.
- Valide el archivo .mfc actualizado con validación JSON, disponible de forma gratuita en línea.
Utilice un editor de texto para modificar un archivo .mfc. La especificación del archivo se describe a continuación:
"connection" : {}
"datasets":[]
La conexión incluye el tipo y las propiedades. Las propiedades especifican la ruta a la carpeta de origen. Para mover los datos, puede actualizar la ruta de propiedades.
"connection" : {
"type": "filesystem",
"properties":{
"path": <path to source folder>
}
}
Los datasets contienen uno o varios datasets en su MFC. La cantidad de datasets depende de la cantidad de carpetas que contenga su MFC. En el ejemplo siguiente existen cinco datasets:
"datasets":[
{.. dataset1 ..},
{.. dataset2 ..},
{.. dataset3 ..},
{.. dataset4 ..},
{.. dataset5 ..},
]
En cada dataset, existen cinco objetos de nivel superior que pueden ser aplicables. De estos objetos, name, format y schema y son necesarios.
{
"name": <dataset name>,
"alias": <alias name>,
"sourceName": <source name>,
"filter": <where clause>,
"properties": {},
"fields": {},
"geometry": {},
"time": {}
}
Nombre
El objeto name es necesario y define el nombre del dataset. El nombre debe ser único en el manifiesto.
Alias
El objeto alias es opcional, es un nombre alternativo y más descriptivo para el dataset y puede contener caracteres restringidos en el objeto name. El alias debe ser igual que el nombre del dataset o único dentro del archivo .mfc.
Nombre de fuente
El objeto sourceName es opcional si el objeto name coincide con el nombre de la carpeta de origen. Si el nombre no es el mismo que el de la carpeta de origen, el objeto sourceName se debe incluir y debe coincidir exactamente con el nombre de la carpeta. El objeto sourceName le permite crear varios datasets con nombres únicos utilizando la misma carpeta de origen. Por ejemplo, si tiene un dataset llamado taxis, con sourceName como taxis, puede tener datasets llamados taxi_pickup y taxi_dropoff con geometrías y formato de hora distintos. Estos datasets tienen el mismo nombre de origen y nombres distintos. Los tres datasets representan el mismo dataset original: taxis.
Filtro
El objeto filter es opcional y aplica una expresión SQL al dataset. Solamente se utilizan las entidades que cumplan la condición de filtro. El filtro repercute en el dibujo, en las entidades que aparecen en la tabla de atributos de la capa y las que se pueden seleccionar, etiquetar, identificar y procesar a través de las herramientas de geoprocesamiento. Por ejemplo, el filtro "X IS NOT NULL AND Y IS NOT NULL" solamente utilizará entidades cuando los campos x e y no sean nulos.
Propiedades
El objeto properties es obligatorio y define el tipo de dataset y su formato.
Sintaxis
"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 >"
}
Ejemplos
A continuación, encontrará un ejemplo con un shapefile:
"format" : {
"type": "shapefile",
}
A continuación, encontrará un ejemplo con un archivo delimitado:
"format" : {
"type": "delimited",
"delimited.extension": "csv",
"delimited.fieldDelimiter": ",",
"delimited.recordTerminator": "\n",
"delimited.quoteChar" "\"",
"delimited.escapeChar" "\"",
"delimited.hasHeaderRow": true,
"delimited.encoding" : "UTF-8"
}
Descripción
- type: una propiedad requerida que define la fuente de datos. Puede ser delimited, shapefile, parquet o orc.
- Los objetos restantes solamente se especifican para archivos delimitados y son obligatorios:
- delimited.extension: una propiedad requerida que indica la extensión de archivo (por ejemplo, csv o tsv).
- delimited.quoteChar: indica cómo se especifican las comillas en el archivo delimitado.
- delimited.escapeChar: indica cómo se especifican las barras diagonales inversas en el archivo delimitado.
- delimited.encoding: especifica el tipo de codificación utilizado.
- delimited.recordTerminator: especifica qué es lo que finaliza las entidades en el archivo delimitado.
- delimited.fieldDelimiter: indica qué es lo que separa a los campos en el archivo delimitado.
- delimited.hasHeaderRow: especifica si la primera fila de un archivo delimitado se tratará como un encabezado o como la primera entidad.
Campos
El objeto fields es obligatorio; define los campos del dataset, los tipos de campo y la visibilidad.
Sintaxis
"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...}
}
Ejemplo
"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"
}
]
}
Descripción
- name: una propiedad requerida que indica el nombre del campo. El nombre del campo debe ser único en el dataset y solo puede contener caracteres alfanuméricos y guiones bajos.
- sourceName: una propiedad opcional que indica el nombre del campo en el dataset de origen. Solamente se requiere si el nombre no coincide con el nombre de la carpeta.
- visible: una propiedad opcional que indica si el campo estará visible en las herramientas de geoprocesamiento. De forma predeterminada, los campos que inicialmente están establecidos como campos de tiempo y geometría utilizando las herramientas Crear conexión de entidades multiarchivo o Actualizar conexión de entidades multiarchivo tienen la visibilidad establecida en false. El resto de campos están definidos como true por defecto.
- type: una propiedad requerida que indica el tipo del campo. Entre las opciones se incluyen las siguientes:
- Int8: se representa en AllSource como un campo corto.
- Int16: se representa en AllSource como un campo corto.
- Int32: se representa en AllSource como un campo largo.
- Int64: se representa en AllSource como un campo doble.
- Float32: se representa en AllSource como un campo flotante.
- Float64: se representa en AllSource como un campo doble.
- String: se representa en AllSource como un campo de cadena de caracteres.
- Binary: se representa en AllSource como un campo de BLOB. Solamente las entradas de parquet y ORC pueden contener valores binarios.
- Date: se representa en AllSource como un campo de fecha. Solamente los shapefiles y los datasets de ORC y parquet pueden contener campos de fecha.
Geometría
El objeto geometry es opcional; no obstante, es obligatorio si un dataset contiene una representación espacial (por ejemplo, un punto, una polilínea o un polígono).
Sintaxis
"geometry" : {
"geometryType" : "< esriGeometryType >",
"spatialReference" : {
<spatial reference JSON>
},
"fields": [
{
"name": "<fieldName1>",
"formats": ["<fieldFormat1>"]
},
{
"name": "<fieldName2>",
"formats": ["<fieldFormat2>"]
}
]
}
Ejemplos
A continuación, encontrará un ejemplo con un archivo delimitado con valores x e y:
"geometry" : {
"geometryType" : "esriGeometryPoint",
"spatialReference" : {
"wkid" : 3369
},
"fields": [
{
"name": "Longitude",
"formats": ["x"]
},
{
"name": "Latitude",
"formats": ["y"]
}
]
}
A continuación, encontrará un ejemplo con un archivo delimitado con valores x, y 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"]
}
]
}
A continuación, encontrará un ejemplo con un archivo .tsv:
"geometry" : {
"geometryType" : "esriGeometryPolygon",
"spatialReference" : {
"wkid": 4326
},
"fields": [
{
"name": "Shapelocation",
"formats": ["WKT"]
}
]
}
A continuación, encontrará un ejemplo con un archivo delimitado con valores x en un campo formateado y valores y en varios campos:
"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}"]
}
]
}
Descripción
Dado que el objeto geometry es opcional, las siguientes propiedades se enumeran como necesarias u opcionales, suponiendo que se utiliza geometry:
- geometryType: una propiedad requerida que indica el tipo de geometría. Entre las opciones se incluyen las siguientes:
- esriGeometryPoint: el tipo de geometría es punto.
- esriGeometryPolyline: el tipo de geometría es polilínea.
- esriGeometryPolygon: el tipo de geometría es polígono.
- spatialReference: una propiedad requerida que indica la referencia espacial del dataset. Si el dataset tiene geometría, se deben especificar uno o ambos WKID (WKID y WKID más reciente) o el WKT.
- wkid: la referencia espacial que utiliza un WKID, por ejemplo, 4326.
- latestWkid: la referencia espacial en una versión de software determinada.
- wkt: la referencia espacial que utiliza una cadena de texto conocida.
- fields: una propiedad requerida para datasets delimitados con una representación espacial. Esto indica los formatos y los nombres o el nombre del campo de la geometría.
- name: una propiedad requerida para datasets delimitados con una representación espacial. Indica el nombre del campo de geometría. Puede haber varias instancias de estos elementos.
- formats: una propiedad requerida para datasets delimitados con una representación espacial. Indica el formato del campo utilizado para representar la geometría. Puede haber varias instancias de estos elementos. Si su ubicación está repartida en varios campos o si está formateada en una cadena de caracteres, utilice los valores o degrees, minutes o seconds para especificar las unidades o direction para especificar la dirección (N, S, O, E).
Tiempo
El objeto time es opcional; no obstante, es obligatorio si un dataset tiene una representación temporal.
Sintaxis
"time" : {
"timeType" : "< instant | interval >",
"timeReference" : {
"timeZone" : "<timeZone >"
},
"fields": [
{
"name": "<fieldName1>",
"formats": ["<fieldFormat1>"]
"role": "< start | end >"
}
]
}
Ejemplos
A continuación, encontrará un ejemplo con un instante con varios formatos en los campos de hora:
"time": {
"timeType": "instant",
"timeReference": {"timeZone": "UTC"},
"fields": [
{
"name": "iso_time",
"formats": [
"yyyy-MM-dd HH:mm:ss",
"MM/dd/yyyy HH:mm"
]
}
]
}
A continuación, encontrará un ejemplo con un intervalo con varios campos 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"
}
]
}
Descripción
Dado que el objeto time es opcional, las siguientes propiedades se enumeran como necesarias u opcionales, suponiendo que se utiliza time:
- timeType: propiedad requerida si la hora está incluida en el dataset. Entre las opciones se incluyen las siguientes:
- instant: un único momento en el tiempo
- interval: un intervalo de tiempo con horas de inicio y finalización
- timeReference: una propiedad requerida si el dataset tiene habilitada la función de tiempo, lo cual indica la zona horaria (timeZone).
- timeZone: una propiedad requerida que indica el formato de la zona horaria de los datos. Las zonas horarias se basan en Joda-Time. Para obtener más información sobre formatos de Joda-Time, consulte Zonas horarias con disponibilidad para Joda-Time. La propiedad timeZone puede tener el siguiente formato:
- El nombre completo de la zona horaria: Pacific Standard Time.
- El desplazamiento de zona horaria expresado en horas: -0100 o -01:00.
- Abreviaturas de zona horaria: solo UTC o GMT.
- timeZone: una propiedad requerida que indica el formato de la zona horaria de los datos. Las zonas horarias se basan en Joda-Time. Para obtener más información sobre formatos de Joda-Time, consulte Zonas horarias con disponibilidad para Joda-Time. La propiedad timeZone puede tener el siguiente formato:
- fields: un campo requerido que indica los nombres de campo y los formatos de hora. Las propiedades requeridas de fields son las siguientes:
- name: una propiedad requerida que indica el nombre del campo utilizado para representar el tiempo. Puede haber varias instancias de este objeto.
- formats: una propiedad requerida que indica el formato del campo utilizado para representar la hora. Puede haber varios formatos para un único campo (como se muestra arriba), así como varias instancias de este objeto. Para obtener más información sobre cómo se pueden formatear los campos de hora, consulte Formatos de hora. Si el formato de hora incluye la referencia temporal, defina la propiedad timeReference como UTC.
- role: una propiedad requerida si timeType es interval. Puede representar el startTime o el endTime de un intervalo de tiempo.