function transcodeBinaryProperties(
  featureCount,
  className,
  binaryProperties,
  binaryBody,
) {
  const classProperties = {};
  const featureTableProperties = {};
  const bufferViewsTypedArrays = {};
  let bufferViewCount = 0;
  for (const propertyId in binaryProperties) {
    if (!binaryProperties.hasOwnProperty(propertyId)) {
      continue;
    }

    if (!defined(binaryBody)) {
      throw new RuntimeError(
        `Property ${propertyId} requires a batch table binary.`,
      );
    }

    const property = binaryProperties[propertyId];
    const binaryAccessor = getBinaryAccessor(property);

    featureTableProperties[propertyId] = {
      bufferView: bufferViewCount,
    };

    classProperties[propertyId] = transcodePropertyType(property);

    bufferViewsTypedArrays[bufferViewCount] =
      binaryAccessor.createArrayBufferView(
        binaryBody.buffer,
        binaryBody.byteOffset + property.byteOffset,
        featureCount,
      );

    bufferViewCount++;
  }

  const schemaJson = {
    classes: {},
  };
  schemaJson.classes[className] = {
    properties: classProperties,
  };

  const transcodedSchema = MetadataSchema.fromJson(schemaJson);

  const featureTableJson = {
    class: className,
    count: featureCount,
    properties: featureTableProperties,
  };

  return {
    featureTableJson: featureTableJson,
    bufferViewsTypedArrays: bufferViewsTypedArrays,
    transcodedSchema: transcodedSchema,
    transcodedClass: transcodedSchema.classes[className],
  };
}
Transcode the binary properties of the batch table to be compatible with
<code>EXT_structural_metadata</code>

@param {number} featureCount The number of features in the batch table
@param {string} className The name of the metadata class to be created.
@param {Object<string, Object>} binaryProperties A dictionary of property ID to property definition
@param {Uint8Array} [binaryBody] The binary body of the batch table
@return {object} Transcoded data needed for constructing a {@link StructuralMetadata} object.

@private