react-native-maps
Version:
React Native Mapview component for iOS + Android
424 lines (366 loc) • 14 kB
TypeScript
declare module "react-native-maps" {
import * as React from 'react';
import {
Animated,
ImageRequireSource,
ImageURISource,
NativeSyntheticEvent,
ViewProperties
} from 'react-native';
export interface Region {
latitude: number;
longitude: number;
latitudeDelta: number;
longitudeDelta: number;
}
export interface LatLng {
latitude: number;
longitude: number;
}
export interface Point {
x: number;
y: number;
}
// helper interface
export interface MapEvent<T = {}> extends NativeSyntheticEvent<T & {
coordinate: LatLng;
position: Point;
}> {}
export type LineCapType = 'butt' | 'round' | 'square';
export type LineJoinType = 'miter' | 'round' | 'bevel';
// =======================================================================
// AnimatedRegion
// =======================================================================
interface AnimatedRegionTimingConfig extends Animated.AnimationConfig, Partial<Region> {
easing?: (value: number) => number;
duration?: number;
delay?: number;
}
interface AnimatedRegionSpringConfig extends Animated.AnimationConfig, Partial<Region> {
overshootClamping?: boolean;
restDisplacementThreshold?: number;
restSpeedThreshold?: number;
velocity?: number | Point;
bounciness?: number;
speed?: number;
tension?: number;
friction?: number;
stiffness?: number;
mass?: number;
damping?: number;
}
export class AnimatedRegion extends Animated.AnimatedWithChildren {
latitude: Animated.Value
longitude: Animated.Value
latitudeDelta: Animated.Value
longitudeDelta: Animated.Value
constructor(region?: Region);
setValue(value: Region): void;
setOffset(offset: Region): void;
flattenOffset(): void;
stopAnimation(callback?: (region: Region) => void): void;
addListener(callback: (region: Region) => void): string;
removeListener(id: string): void;
spring(config: AnimatedRegionSpringConfig): Animated.CompositeAnimation;
timing(config: AnimatedRegionTimingConfig): Animated.CompositeAnimation;
}
// =======================================================================
// MapView (default export)
// =======================================================================
/**
* takeSnapshot options
*/
export interface SnapshotOptions {
/** optional, when omitted the view-width is used */
width?: number;
/** optional, when omitted the view-height is used */
height?: number;
/** __iOS only__, optional region to render */
region?: Region;
/** image formats, defaults to 'png' */
format?: 'png' | 'jpg';
/** image quality: 0..1 (only relevant for jpg, default: 1) */
quality?: number;
/** result types, defaults to 'file' */
result?: 'file' | 'base64';
}
/**
* onUserLocationChange parameters
*/
export interface EventUserLocation extends NativeSyntheticEvent<{}> {
nativeEvent: {
coordinate: {
latitude: number,
longitude: number,
altitude: number,
timestamp: number,
accuracy: number,
speed: number,
isFromMockProvider: boolean,
},
};
}
/**
* Map style elements.
* @see https://developers.google.com/maps/documentation/ios-sdk/styling#use_a_string_resource
* @see https://developers.google.com/maps/documentation/android-api/styling
*/
export type MapStyleElement = {
featureType?: string,
elementType?: string,
stylers: object[],
};
export type EdgePadding = {
top: Number,
right: Number,
bottom: Number,
left: Number,
};
export type EdgeInsets = {
top: Number,
right: Number,
bottom: Number,
left: Number,
};
export type KmlMarker = {
id: String,
title: String,
description: String,
coordinate: LatLng,
position: Point,
};
/**
* onKmlReady parameter
*/
export interface KmlMapEvent extends NativeSyntheticEvent<{ markers: KmlMarker[] }> {
}
type MapTypes = 'standard' | 'satellite' | 'hybrid' | 'terrain' | 'none' | 'mutedStandard';
export interface MapViewProps extends ViewProperties {
provider?: 'google' | null;
customMapStyle?: MapStyleElement[];
customMapStyleString?: string;
showsUserLocation?: boolean;
userLocationAnnotationTitle?: string;
showsMyLocationButton?: boolean;
followsUserLocation?: boolean;
showsPointsOfInterest?: boolean;
showsCompass?: boolean;
zoomEnabled?: boolean;
zoomControlEnabled?: boolean;
rotateEnabled?: boolean;
cacheEnabled?: boolean;
loadingEnabled?: boolean;
loadingBackgroundColor?: string;
loadingIndicatorColor?: string;
scrollEnabled?: boolean;
pitchEnabled?: boolean;
toolbarEnabled?: boolean;
moveOnMarkerPress?: boolean;
showsScale?: boolean;
showsBuildings?: boolean;
showsTraffic?: boolean;
showsIndoors?: boolean;
showsIndoorLevelPicker?: boolean;
mapType?: MapTypes;
region?: Region;
initialRegion?: Region;
liteMode?: boolean;
mapPadding?: EdgePadding;
maxDelta?: number;
minDelta?: number;
legalLabelInsets?: EdgeInsets;
onMapReady?: () => void;
onKmlReady?: (values: KmlMapEvent) => void;
onRegionChange?: (region: Region) => void;
onRegionChangeComplete?: (region: Region) => void;
onPress?: (event: MapEvent) => void;
onLongPress?: (event: MapEvent) => void;
onUserLocationChange?: (event: EventUserLocation) => void;
onPanDrag?: (event: MapEvent) => void;
onPoiClick?: (event: MapEvent<{ placeId: string, name: string }>) => void;
onMarkerPress?: (event: MapEvent<{ action: 'marker-press', id: string }>) => void;
onMarkerSelect?: (event: MapEvent<{ action: 'marker-select', id: string }>) => void;
onMarkerDeselect?: (event: MapEvent<{ action: 'marker-deselect', id: string }>) => void;
onCalloutPress?: (event: MapEvent<{ action: 'callout-press' }>) => void;
onMarkerDragStart?: (event: MapEvent) => void;
onMarkerDrag?: (event: MapEvent) => void;
onMarkerDragEnd?: (event: MapEvent) => void;
minZoomLevel?: number;
maxZoomLevel?: number;
kmlSrc?: string;
}
export default class MapView extends React.Component<MapViewProps, any> {
animateToNavigation(location: LatLng, bearing: number, angle: number, duration?: number): void;
animateToRegion(region: Region, duration?: number): void;
animateToCoordinate(latLng: LatLng, duration?: number): void;
animateToBearing(bearing: number, duration?: number): void;
animateToViewingAngle(angle: number, duration?: number): void;
fitToElements(animated: boolean): void;
fitToSuppliedMarkers(markers: string[], options?: { edgePadding?: EdgePadding, animated?: boolean }): void;
fitToCoordinates(coordinates?: LatLng[], options?: { edgePadding?: EdgePadding, animated?: boolean }): void;
setMapBoundaries(northEast: LatLng, southWest: LatLng): void;
takeSnapshot(options?: SnapshotOptions): Promise<string>;
}
export class MapViewAnimated extends MapView {
}
// =======================================================================
// Marker
// =======================================================================
export interface MarkerProps extends ViewProperties {
identifier?: string;
reuseIdentifier?: string;
title?: string;
description?: string;
image?: ImageURISource | ImageRequireSource;
opacity?: number;
pinColor?: string;
coordinate: LatLng | AnimatedRegion;
centerOffset?: Point;
calloutOffset?: Point;
anchor?: Point;
calloutAnchor?: Point;
flat?: boolean;
draggable?: boolean;
tracksViewChanges?: boolean
tracksInfoWindowChanges?: boolean
stopPropagation?: boolean
onPress?: (event: MapEvent<{ action: 'marker-press', id: string }>) => void;
onSelect?: (event: MapEvent<{ action: 'marker-select', id: string }>) => void;
onDeselect?: (event: MapEvent<{ action: 'marker-deselect', id: string }>) => void;
onCalloutPress?: (event: MapEvent<{ action: 'callout-press' }>) => void;
onDragStart?: (event: MapEvent) => void;
onDrag?: (event: MapEvent) => void;
onDragEnd?: (event: MapEvent) => void;
rotation?: number;
zIndex?: number;
}
export class Marker extends React.Component<MarkerProps, any> {
/**
* Shows the callout for this marker
*/
showCallout(): void;
/**
* Hides the callout for this marker
*/
hideCallout(): void;
/**
* Animates marker movement.
* __Android only__
*/
animateMarkerToCoordinate(coordinate: LatLng, duration?: number): void;
}
export class MarkerAnimated extends Marker {
}
// =======================================================================
// Callout
// =======================================================================
export interface MapCalloutProps extends ViewProperties {
tooltip?: boolean;
onPress?: (event: MapEvent<{ action: 'callout-press' }>) => void;
}
export class Callout extends React.Component<MapCalloutProps, any> {
}
// =======================================================================
// Polyline
// =======================================================================
export interface MapPolylineProps extends ViewProperties {
coordinates: LatLng[];
onPress?: (event: MapEvent) => void;
tappable?: boolean;
fillColor?: string;
strokeWidth?: number;
strokeColor?: string;
strokeColors?: string[];
zIndex?: number;
lineCap?: LineCapType;
lineJoin?: LineJoinType;
miterLimit?: number;
geodesic?: boolean;
lineDashPhase?: number;
lineDashPattern?: number[];
}
export class Polyline extends React.Component<MapPolylineProps, any> {
}
// =======================================================================
// Polygon
// =======================================================================
export interface MapPolygonProps extends ViewProperties {
coordinates: LatLng[];
holes?: LatLng[][];
onPress?: (event: MapEvent) => void;
tappable?: boolean;
strokeWidth?: number;
strokeColor?: string;
fillColor?: string;
zIndex?: number;
lineCap?: LineCapType;
lineJoin?: LineJoinType;
miterLimit?: number;
geodesic?: boolean;
lineDashPhase?: number;
lineDashPattern?: number[];
}
export class Polygon extends React.Component<MapPolygonProps, any> {
}
// =======================================================================
// Circle
// =======================================================================
export interface MapCircleProps extends ViewProperties {
center: LatLng;
radius: number;
onPress?: (event: MapEvent) => void;
strokeWidth?: number;
strokeColor?: string;
fillColor?: string;
zIndex?: number;
lineCap?: LineCapType;
lineJoin?: LineJoinType;
miterLimit?: number;
lineDashPhase?: number;
lineDashPattern?: number[];
}
export class Circle extends React.Component<MapCircleProps, any> {
}
// =======================================================================
// UrlTile & LocalTile
// =======================================================================
export interface MapUrlTileProps extends ViewProperties {
urlTemplate: string;
maximumZ?: number;
zIndex?: number;
}
export class UrlTile extends React.Component<MapUrlTileProps, any> {
}
export interface MapLocalTileProps extends ViewProperties {
pathTemplate: string;
tileSize?: number;
zIndex?: number;
}
export class LocalTile extends React.Component<MapLocalTileProps, any> {
}
// =======================================================================
// Overlay
// =======================================================================
type Coordinate = [number, number]
export interface MapOverlayProps extends ViewProperties {
image?: ImageURISource | ImageRequireSource;
bounds: [Coordinate, Coordinate];
}
export class Overlay extends React.Component<MapOverlayProps, any> {
}
export class OverlayAnimated extends Overlay {
}
// =======================================================================
// Constants
// =======================================================================
export const MAP_TYPES: {
STANDARD: MapTypes,
SATELLITE: MapTypes,
HYBRID: MapTypes,
TERRAIN: MapTypes,
NONE: MapTypes,
MUTEDSTANDARD: MapTypes,
}
export const PROVIDER_DEFAULT: null;
export const PROVIDER_GOOGLE: 'google';
}