import type SpatialReference from "../../geometry/SpatialReference.js";
import type { ClonableMixin } from "../../core/Clonable.js";
import type { JSONSupport } from "../../core/JSONSupport.js";
import type { GeometryUnion } from "../../geometry/types.js";
import type { MeshProperties } from "../../geometry/Mesh.js";
import type { PolylineProperties } from "../../geometry/Polyline.js";
import type { PolygonProperties } from "../../geometry/Polygon.js";
import type { PointProperties } from "../../geometry/Point.js";
import type { MultipointProperties } from "../../geometry/Multipoint.js";
import type { ExtentProperties } from "../../geometry/Extent.js";
import type { SpatialReferenceProperties } from "../../geometry/SpatialReference.js";

export interface ImageToMapMultirayParametersProperties extends Partial<Pick<ImageToMapMultirayParameters, "rasterIds">> {
  /** An array of geometries in image space coordinates representing the same map location on different images. */
  geometries?: ((ExtentProperties & { type: "extent" }) | (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }) | (MeshProperties & { type: "mesh" }))[];
  /**
   * The spatial reference for the output geometry. If not specified, the spatial
   * reference of the image service is used.
   */
  outSpatialReference?: SpatialReferenceProperties | null;
}

/**
 * Input parameters for the [ImageryLayer.imageToMapMultiray()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#imageToMapMultiray)
 * or [imageToMapMultiray()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#imageToMapMultiray) methods.
 *
 * The `imageToMapMultiray` operation computes a 3D geometry in a map from multiple image space geometries on multiple corresponding raster items
 * of one same object. For example, a house is shown in several raster items. Users can specify the house location on each image using the
 * [geometries](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageToMapMultirayParameters.html#geometries) parameter. Then in the [rasterIds](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageToMapMultirayParameters.html#rasterIds) parameter, specify the rasterIds of the images in the same order as the geometries.
 * The `imageToMapMultiray` operation will find and return the house location in the map space on all specified images.
 *
 * @since 4.29
 * @see [ImageryLayer.imageToMapMultiray()](https://developers.arcgis.com/javascript/latest/api-reference/esri-layers-ImageryLayer.html#imageToMapMultiray)
 * @see [imageToMapMultiray()](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-imageService.html#imageToMapMultiray)
 */
export default class ImageToMapMultirayParameters extends ImageToMapMultirayParametersSuperclass {
  constructor(properties?: ImageToMapMultirayParametersProperties);
  /** An array of geometries in image space coordinates representing the same map location on different images. */
  get geometries(): GeometryUnion[];
  set geometries(value: ((ExtentProperties & { type: "extent" }) | (MultipointProperties & { type: "multipoint" }) | (PointProperties & { type: "point" }) | (PolygonProperties & { type: "polygon" }) | (PolylineProperties & { type: "polyline" }) | (MeshProperties & { type: "mesh" }))[]);
  /**
   * The spatial reference for the output geometry. If not specified, the spatial
   * reference of the image service is used.
   */
  get outSpatialReference(): SpatialReference | null | undefined;
  set outSpatialReference(value: SpatialReferenceProperties | null | undefined);
  /** The rasterIds of the raster items that correspond to the input [geometries](https://developers.arcgis.com/javascript/latest/api-reference/esri-rest-support-ImageToMapMultirayParameters.html#geometries). */
  accessor rasterIds: number[];
}
declare const ImageToMapMultirayParametersSuperclass: typeof JSONSupport & typeof ClonableMixin