import BoundingRect from 'zrender/lib/core/BoundingRect.js'; 
 | 
import { HashMap } from 'zrender/lib/core/util.js'; 
 | 
import { Group } from '../../util/graphic.js'; 
 | 
import { Region } from './Region.js'; 
 | 
export declare type GeoSVGSourceInput = string | Document | SVGElement; 
 | 
export declare type GeoJSONSourceInput = string | GeoJSON | GeoJSONCompressed; 
 | 
export interface NameMap { 
 | 
    [regionName: string]: string; 
 | 
} 
 | 
export interface GeoSpecialAreas { 
 | 
    [areaName: string]: { 
 | 
        left: number; 
 | 
        top: number; 
 | 
        width?: number; 
 | 
        height?: number; 
 | 
    }; 
 | 
} 
 | 
export interface GeoJSON extends GeoJSONFeatureCollection<GeoJSONGeometry> { 
 | 
} 
 | 
export interface GeoJSONCompressed extends GeoJSONFeatureCollection<GeoJSONGeometryCompressed> { 
 | 
    UTF8Encoding?: boolean; 
 | 
    UTF8Scale?: number; 
 | 
} 
 | 
interface GeoJSONFeatureCollection<G> { 
 | 
    type: 'FeatureCollection'; 
 | 
    features: GeoJSONFeature<G>[]; 
 | 
} 
 | 
interface GeoJSONFeature<G = GeoJSONGeometry> { 
 | 
    type: 'Feature'; 
 | 
    id?: string | number; 
 | 
    properties: { 
 | 
        name?: string; 
 | 
        cp?: number[]; 
 | 
        [key: string]: any; 
 | 
    }; 
 | 
    geometry: G; 
 | 
} 
 | 
declare type GeoJSONGeometry = GeoJSONGeometryPoint | GeoJSONGeometryMultiPoint | GeoJSONGeometryLineString | GeoJSONGeometryMultiLineString | GeoJSONGeometryPolygon | GeoJSONGeometryMultiPolygon; 
 | 
declare type GeoJSONGeometryCompressed = GeoJSONGeometryPolygonCompressed | GeoJSONGeometryMultiPolygonCompressed | GeoJSONGeometryLineStringCompressed | GeoJSONGeometryMultiLineStringCompressed; 
 | 
interface GeoJSONGeometryPoint { 
 | 
    type: 'Point'; 
 | 
    coordinates: number[]; 
 | 
} 
 | 
interface GeoJSONGeometryMultiPoint { 
 | 
    type: 'MultiPoint'; 
 | 
    coordinates: number[][]; 
 | 
} 
 | 
interface GeoJSONGeometryLineString { 
 | 
    type: 'LineString'; 
 | 
    coordinates: number[][]; 
 | 
} 
 | 
interface GeoJSONGeometryLineStringCompressed { 
 | 
    type: 'LineString'; 
 | 
    coordinates: string; 
 | 
    encodeOffsets: number[]; 
 | 
} 
 | 
interface GeoJSONGeometryMultiLineString { 
 | 
    type: 'MultiLineString'; 
 | 
    coordinates: number[][][]; 
 | 
} 
 | 
interface GeoJSONGeometryMultiLineStringCompressed { 
 | 
    type: 'MultiLineString'; 
 | 
    coordinates: string[]; 
 | 
    encodeOffsets: number[][]; 
 | 
} 
 | 
export interface GeoJSONGeometryPolygon { 
 | 
    type: 'Polygon'; 
 | 
    coordinates: number[][][]; 
 | 
} 
 | 
interface GeoJSONGeometryPolygonCompressed { 
 | 
    type: 'Polygon'; 
 | 
    coordinates: string[]; 
 | 
    encodeOffsets: number[][]; 
 | 
} 
 | 
export interface GeoJSONGeometryMultiPolygon { 
 | 
    type: 'MultiPolygon'; 
 | 
    coordinates: number[][][][]; 
 | 
} 
 | 
interface GeoJSONGeometryMultiPolygonCompressed { 
 | 
    type: 'MultiPolygon'; 
 | 
    coordinates: string[][]; 
 | 
    encodeOffsets: number[][][]; 
 | 
} 
 | 
export interface GeoResource { 
 | 
    readonly type: 'geoJSON' | 'geoSVG'; 
 | 
    load(nameMap: NameMap, nameProperty: string): { 
 | 
        boundingRect: BoundingRect; 
 | 
        regions: Region[]; 
 | 
        regionsMap: HashMap<Region>; 
 | 
    }; 
 | 
} 
 | 
export interface GeoSVGGraphicRoot extends Group { 
 | 
    isGeoSVGGraphicRoot: boolean; 
 | 
} 
 | 
/** 
 | 
 * Geo stream interface compatitable with d3-geo 
 | 
 * See the API detail in https://github.com/d3/d3-geo#streams 
 | 
 */ 
 | 
export interface ProjectionStream { 
 | 
    point(x: number, y: number): void; 
 | 
    lineStart(): void; 
 | 
    lineEnd(): void; 
 | 
    polygonStart(): void; 
 | 
    polygonEnd(): void; 
 | 
    /** 
 | 
     * Not supported yet. 
 | 
     */ 
 | 
    sphere(): void; 
 | 
} 
 | 
export interface GeoProjection { 
 | 
    project(point: number[]): number[]; 
 | 
    unproject(point: number[]): number[]; 
 | 
    /** 
 | 
     * Projection stream compatitable to d3-geo projection stream. 
 | 
     * 
 | 
     * When rotate projection is used. It may have antimeridian artifacts. 
 | 
     * So we need to introduce the fule projection stream to do antimeridian clipping. 
 | 
     * 
 | 
     * project will be ignored if projectStream is given. 
 | 
     */ 
 | 
    stream?(outStream: ProjectionStream): ProjectionStream; 
 | 
} 
 | 
export {}; 
 |