import type EsriMap from "@arcgis/core/Map";
import Collection from "@arcgis/core/core/Collection";
import type { GeometryUnion } from "@arcgis/core/geometry/types.js";
import type { Feature } from "../../data/Feature.js";
import type { FeatureSource } from "../../data/FeatureSource.js";
import { MapExtension } from "../../mapping/MapExtension.js";
import { InitializableBase } from "../../support/InitializableBase.js";
import type { CountResult } from "../CountResult.js";
import { IdentifyOptions } from "./IdentifyOptions.js";
import type { IdentifyProvider } from "./IdentifyProvider.js";
/**
 * Allows identifying features by geometry.
 */
export declare class IdentifyService extends InitializableBase {
    /**
     * Providers that implement the identify functionality. The collection is
     * initially populated with built-in Geocortex providers, however providers
     * can be added or removed. The order is significant -- the first registered
     * provider that is able to handle a given
     * {@link data/FeatureSource!FeatureSource} will be used for that source (see
     * {@link tasks/identify/IdentifyProvider!IdentifyProvider.isSupported}).
     */
    readonly providers: Collection<IdentifyProvider>;
    /**
     * Determines whether this service supports identify operations for the
     * given source, i.e. whether there is at least one registered provider for
     * that source.
     *
     * @param source The source to check.
     * @param geometry The geometry to check.
     * @param options The options to check.
     */
    isSupported(source: FeatureSource, geometry: GeometryUnion, options?: IdentifyOptions): boolean;
    /**
     * Identifies features that intersect a given geometry.
     *
     * @param sources The feature sources to identify.
     * @param geometry The geometry to match.
     * @param options Options that affect the identify operation.
     * @returns An iterator of {@link data/FeatureSet!FeatureSet} containing
     *   identify results. If the operation is canceled, the returned iterator
     *   might end prematurely and reject with an instance of
     *   {@link support/Cancellable!Cancellation}, though it may still succeed
     *   and return all results.
     */
    identify(sources: Iterable<FeatureSource> | Collection<FeatureSource>, geometry: GeometryUnion | GeometryUnion[], options?: IdentifyOptions): AsyncIterable<Feature>;
    /**
     * Identifies features that intersect a given geometry.
     *
     * @param mapExtension The extension of the map to identify.
     * @param geometry The geometry to match.
     * @param options Options that affect the identify operation.
     * @returns An iterator of {@link data/FeatureSet!FeatureSet} containing
     *   identify results. If the operation is canceled, the returned iterator
     *   might end prematurely and reject with an instance of
     *   {@link support/Cancellable!Cancellation}, though it may still succeed
     *   and return all results.
     */
    identify(mapExtension: MapExtension, geometry: GeometryUnion | GeometryUnion[], options?: IdentifyOptions): AsyncIterable<Feature>;
    /**
     * Identifies features that intersect a given geometry.
     *
     * @param map The map to identify.
     * @param geometry The geometry to match.
     * @param options Options that affect the identify operation.
     * @returns An iterator of {@link data/FeatureSet!FeatureSet} containing
     *   identify results. If the operation is canceled, the returned iterator
     *   might end prematurely and reject with an instance of
     *   {@link support/Cancellable!Cancellation}, though it may still succeed
     *   and return all results.
     */
    identify(map: EsriMap, geometry: GeometryUnion | GeometryUnion[], options?: IdentifyOptions): AsyncIterable<Feature>;
    /**
     * Counts the features that intersect a given geometry.
     *
     * @param sources The feature sources to identify.
     * @param geometry The geometry to match.
     * @param options Options that affect the identify operation.
     * @returns An iterator of {@link tasks/CountResult!CountResult} containing
     *   count results. If the operation is canceled, the returned iterator
     *   might end prematurely and reject with an instance of
     *   {@link support/Cancellable!Cancellation}, though it may still succeed
     *   and return all count results.
     */
    count(sources: Iterable<FeatureSource> | Collection<FeatureSource>, geometry: GeometryUnion, options?: IdentifyOptions): AsyncIterable<CountResult>;
    /**
     * Count the features that intersect a given geometry.
     *
     * @param mapExtension The extension of the map to identify.
     * @param geometry The geometry to match.
     * @param options Options that affect the identify operation.
     * @returns An iterator of {@link tasks/CountResult!CountResult} containing
     *   count results. If the operation is canceled, the returned iterator
     *   might end prematurely and reject with an instance of
     *   {@link support/Cancellable!Cancellation}, though it may still succeed
     *   and return all count results.
     */
    count(mapExtension: MapExtension, geometry: GeometryUnion, options?: IdentifyOptions): AsyncIterable<CountResult>;
    /**
     * Count the features that intersect a given geometry.
     *
     * @param map The map to identify.
     * @param geometry The geometry to match.
     * @param options Options that affect the identify operation.
     * @returns An iterator of {@link tasks/CountResult!CountResult} containing
     *   count results. If the operation is canceled, the returned iterator
     *   might end prematurely and reject with an instance of
     *   {@link support/Cancellable!Cancellation}, though it may still succeed
     *   and return all count results.
     */
    count(map: EsriMap, geometry: GeometryUnion, options?: IdentifyOptions): AsyncIterable<CountResult>;
    protected _onInitialize(): Promise<void>;
}
/**
 * Determines whether a features source should be included by default in
 * identify operations.
 *
 * @param source The source to check.
 */
export declare function isIdentifiable(source: FeatureSource): boolean;
