import { NgZone } from '@angular/core';
import { Observable } from 'rxjs';
import { BoundsLiteral, CircleOptions, GeoPoint, MapOptions, MapsAPILoader, MapsApiWrapper, MarkerOptions, RectangleOptions } from '@ng-maps/core';
import * as i0 from "@angular/core";
/**
 * Wrapper class that handles the communication with the Google Maps Javascript
 * API v3
 */
export declare class GoogleMapsAPIWrapper extends MapsApiWrapper<google.maps.Map, google.maps.Circle, google.maps.Rectangle> {
    constructor(_loader: MapsAPILoader, _zone: NgZone);
    protected _api?: Promise<google.maps.Map>;
    protected _mapResolver?: (value: google.maps.Map) => void;
    createMap(el: HTMLElement, center: GeoPoint, options: MapOptions): Promise<void>;
    setMapOptions(options: google.maps.MapOptions): Promise<void>;
    /**
     * Creates a google map drawing manager with the map context
     */
    createDrawingManager(options?: google.maps.drawing.DrawingManagerOptions, addToMap?: boolean): Promise<google.maps.drawing.DrawingManager>;
    /**
     * Creates a google map marker with the map context
     */
    createMarker(position: GeoPoint, options: MarkerOptions, addToMap?: boolean): Promise<google.maps.Marker>;
    createInfoWindow(position: GeoPoint | null, options?: google.maps.InfoWindowOptions): Promise<google.maps.InfoWindow>;
    /**
     * Creates a google.map.Circle for the current map.
     *
     * @todo check how to improve type casting
     */
    createCircle(center: GeoPoint, options: CircleOptions): Promise<google.maps.Circle>;
    /**
     * Creates a google.map.Rectangle for the current map.
     */
    createRectangle(bounds: BoundsLiteral, options: RectangleOptions): Promise<google.maps.Rectangle>;
    createPolyline(options: google.maps.PolylineOptions): Promise<google.maps.Polyline>;
    createPolygon(options: google.maps.PolygonOptions): Promise<google.maps.Polygon>;
    /**
     * Creates a new google.map.Data layer for the current map
     */
    createDataLayer(options?: google.maps.Data.DataOptions): Promise<google.maps.Data | undefined>;
    /**
     * Determines if given coordinates are insite a Polygon path.
     */
    containsLocation(latLng: google.maps.LatLng, polygon: google.maps.Polygon): boolean;
    /**
     * @fixme typings
     */
    subscribeToMapEvent(eventName: string): Observable<any>;
    clearInstanceListeners(): void;
    setCenter(latLng: google.maps.LatLngLiteral): Promise<void>;
    getZoom(): Promise<number | undefined>;
    getBounds(): Promise<BoundsLiteral | undefined>;
    getMapTypeId(): Promise<google.maps.MapTypeId | string | undefined>;
    setZoom(zoom: number): Promise<void>;
    getCenter(): Promise<GeoPoint | undefined>;
    panTo(latLng: google.maps.LatLng | google.maps.LatLngLiteral): Promise<void>;
    panBy(x: number, y: number): Promise<void>;
    fitBounds(latLng: BoundsLiteral, padding?: number | google.maps.Padding): Promise<void>;
    panToBounds(latLng: BoundsLiteral, padding?: number | google.maps.Padding): Promise<void>;
    /**
     * Triggers the given event name on the map instance.
     */
    triggerMapEvent(eventName: string): Promise<void>;
    protected _isLatLngBoundsLiteral(bounds: google.maps.LatLngBounds | google.maps.LatLngBoundsLiteral): bounds is google.maps.LatLngBoundsLiteral;
    static ɵfac: i0.ɵɵFactoryDeclaration<GoogleMapsAPIWrapper, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<GoogleMapsAPIWrapper>;
}
