Preview 2.0 is now in Public Beta!
Read the Announcement

@nativescript/google-maps

NativeScript binding for the Google Maps Android & iOS API.

Table of Contents

Prerequisites

  1. To use the Google Maps API, you must register your app in the Google API Console and obtain an API key.

  2. Add the Google Maps API key to your app.

Android

In the AndroidManifest.xml file, add the <meta-data> tag with the com.google.android.geo.API_KEY as its name and the key as the value.

<application
  android:name="com.tns.NativeScriptApplication"
  android:allowBackup="true"
  android:icon="@mipmap/ic_launcher"
  android:label="@string/app_name"
  android:theme="@style/AppTheme"
  android:hardwareAccelerated="true"
>
  <meta-data android:name="com.google.android.geo.API_KEY" android:value="yourKey" />
</application>

iOS

Add the TNSGoogleMapsAPIKey key and the API key as the value to the Info.plist file, located at App_Resources/iOS.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>TNSGoogleMapsAPIKey</key>
    <string>yourKey</string>
  </dict>
</plist>

Installation

npm install @nativescript/google-maps

Usage

To show the map view, add the <MapView> element to your HTML. Then to manage the mapping features, get the reference to the GoogleMap instance from the ready event data.

Core

<Page
  xmlns="http://schemas.nativescript.org/tns.xsd"
  xmlns:map="@nativescript/google-maps"
>
  <map:MapView
    lat="{{lat}}"
    lng="{{lng}}"
    zoom="{{zoom}}"
    bearing="{{bearing}}"
    tilt="{{tilt}}"
    ready="{{onReady}}"
    mapTap="{{onTap}}"
    mapLongPress="{{onLongPress}}"
    markerTap="{{onMarkerTap}}"
  />
</Page>

To use the plugin in the different NativeScript flavors, modify the main.ts to import and then register it.

Note

To handle the map features, see the GoogleMap object API.

Angular

import { GoogleMapsModule } from '@nativescript/google-maps/angular';

// Registering
@NgModule({
    imports: [
      GoogleMapsModule
    ],
    declarations: [
      AppComponent
    ],
    bootstrap: [AppComponent]
})
<MapView
  (ready)="onReady($event)"
  (mapTap)="onTap($event)"
  (mapLongPress)="onLongPress($event)"
  (markerTap)="onMarkerTap($event)"
>
</MapView>

Vue

import { createApp, registerElement } from 'nativescript-vue'
import GoogleMaps from '@nativescript/google-maps/vue'

import Home from './components/Home.vue'

const app = createApp(Home)
app.use(GoogleMaps)

Note

To handle the map features, see the GoogleMap object API.


<MapView
  @ready="onReady"
  @mapTap="onTap"
  @mapLongPress="onLongPress"
  @markerTap="onMarkerTap"
/>

Note

To handle the map features, see the GoogleMap object API.

Controlling the camera

To programatically update the camera position, call the animateCamera() method on the GoogleMap object and pass it a CameraUpdate instance.

import { CameraUpdate } from '@nativescript/google-maps'

googleMap.animateCamera(
  CameraUpdate.fromCoordinate(
    {
      lat: -32.1234,
      lng: 125.1234
    },
    googleMap.cameraPosition.zoom
  )
)

Setting The Map Type

To set the map type, set the mapType property to one of the MapType options.

import { GoogleMap, MapType } from '@nativescript/googlemap-class'

map: GoogleMap
map.mapType = MapType.Hybrid

See CameraUpdate for more methods you can call and pass to the animateCamera() method.

Styling the map

You can style the map's items, such as roads, parks, businesses, and other points of interest.

Styling works only on the normal map type. Styling does not affect indoor maps.

To style your map, use a JSON file generated by the Google Maps APIs Styling Wizard. In addition to changing the appearance of features, you can also hide features completely.

[
  {
    "featureType": "all",
    "stylers": [{ "color": "#C0C0C0" }]
  },
  {
    "featureType": "road.arterial",
    "elementType": "geometry",
    "stylers": [{ "color": "#CCFFFF" }]
  },
  {
    "featureType": "landscape",
    "elementType": "labels",
    "stylers": [{ "visibility": "off" }]
  }
]

To apply a custom style to your map you can set the mapStyle property on your GoogleMap object:

import { GoogleMap } from '@nativescript/googlemap-class'

map: GoogleMap
map.mapStyle = [
  {
    featureType: 'landscape',
    elementType: 'labels',
    stylers: [{ visibility: 'off' }]
  }
]

API

MapView Class

Properties

The following properties are available for adjusting the camera view on initialization:

PropertyTypeDescription
latnumberLatitude, in degrees
lngnumberLongitude, in degrees
zoomnumberZoom level (described here)
bearingnumberBearing, in degrees
tiltnumberTilt, in degrees

Events

MapView provides the following events:

EventDescription
readyFires when the MapView is ready for use and provides a GoogleMap instance for managing mapping featurees.
mapTapFires when a coordinate is tapped on the map
mapLongPressFires when a coordinate is long-pressed on the map
markerTapFires when a marker is tapped
myLocationTapFires when 'My Location' is tapped
myLocationButtonTapFires when the 'My Location' button is tapped
markerDragStartFires when a marker begins dragging
markerDraggingFires while a marker is being dragged
markerDragEndFires when a marker ends dragging
tileRenderingStartFires when tile rendering begins
tileRenderingEndFires when tile rendering ends
cameraPositionFires when the map viewport state changes, camera states include idle | start | moving
circleFires when a circle is tapped
polygonFires when a polygon is tapped
polylineFires when a polyline is tapped
poiFires when a POI is tapped
groundOverlayFires when a ground overlay is tapped
infoWindowTapFires when a marker's info window is tapped
infoWindowLongPressFires when a marker's info window is long-pressed
infoWindowCloseFires when a marker's info window is closed
markerInfoContentsIf this method returns a view, it will be placed within the default info window frame.
markerInfoWindowCalled when a marker is about to become selected, and provides an optional custom info window to use for that marker if this method returns a view.
activeBuildingFires when a building is focused on
activeLevelFires when the level of the focused building changes

GoogleMap Object

This class provides the mapping features and its instance is available from the MapView instance's ready event:

function onReady(event: MapReadyEvent) {
  const map: GoogleMap = event.map
}

Properties

PropertyTypeDescription
buildingsEnabledbooleanEnables Buildings
maxZoomLevelnumberMaximum level of zoom
minZoomLevelnumberMinimum level of zoom
myLocationEnabledbooleanEnables "My Location"
trafficEnabledbooleanEnables traffic
cameraPositionCameraPositionSee Camera Position
projectionProjectionSee Projection
uiSettingsIUISettingsSee UISettings Interface
mapStyleStyle[]See Map Styles
mapTypeMapTypeSee MapType
nativeanyreadonly: Platform-specific instance of the GoogleMap class. com.google.android.gms.maps.GoogleMap for Android and GMSMapView for iOS.

Methods

MethodReturnsDescription
addMarker(marker: MarkerOptions)MarkerAdds a marker to the map
removeMarker(marker: Marker)voidRemoves a marker from the map
addTileOverlay(options: TileOverlayOptions)TileOverlayAdds a tile overlay to the map
removeTileOverlay(overlay: TileOverlay)voidRemoves a tile overlay from the map
addCircle(circle: CircleOptions)CircleAdds a circle to the map
removeCircle(circle: Circle)voidRemoves a circle from the map
addGroundOverlay(options: GroundOverlayOptions)GroundOverlayAdds a ground overlay to the map
removeGroundOverlay(groundOverlay: GroundOverlay)Removes a ground overlay from the map
addPolygon(options: PolygonOptions)PolygonAdds a polygon to the map
removePolygon(polygon: Polygon)Removes a polygon from the map
addPolyline(options: PolylineOptions)PolylineAdds a polyline to the map
removePolyline(polyline: Polyline)voidRemoves a polyline from the map
animateCamera(update: CameraUpdate)voidAnimates camera to a new position
snapshot()Promise<ImageSource>Returns a platform-specific image of the map's current viewport
clear()voidClears all objects added to the map

Native Map Object

GoogleMap gives you access to the platforms native map objects native | android | ios

consult the appropriate SDK reference on how to use it: iOS | Android

Camera Position

The map's current camera position can be read from the cameraPosition property of a GoogleMap object.

PropertyTypeDescription
targetCoordinateThe camera target is the location of the center of the map, specified as lat and lng.
bearingnumberThe direction in which the camera points measured in degrees clockwise from north.
tiltnumberThe viewing angle of the camera measured in degrees
zoomnumberThe scale of the map

CameraUpdate Class

CameraUpdate provides multiple methods to create a target CameraPosition.

MethodDescription
fromCoordinate(coordinate: Coordinate, zoom: number)Returns a CameraUpdate from a single coordinate
fromCoordinates(coordinates: Coordinate[], padding: number)Returns a CameraUpdate from multiple coordinates
fromCoordinates(coordinates: Coordinate[], width: number, height: number, padding: number)Returns a CameraUpdate from multiple coordinates with specified height, width and padding
fromCameraPosition(position: CameraPosition)Returns a CameraUpdate from a CameraPosition
zoomIn()Returns a CameraUpdate that has zoomed in
zoomOut()Returns a CameraUpdate that has zoomed out
zoomTo(value: number)Returns a CameraUpdate that has zoomed to a value
zoomBy(amount: number, point?: { x: number; y: number })Returns a CameraUpdate that has zoomed and panned
scrollBy(x: number, y: number)Returns a panned CameraUpdate

Projection

A projection is used to translate between on screen location and geographic coordinates on the surface of the Earth.

MethodDescription
fromScreenLocation(point: { x: number; y: number })Returns the geographic location that corresponds to a screen location.
getVisibleRegion()Gets a projection of the viewing frustum for converting between screen coordinates and geo-latitude/longitude coordinates.
toScreenLocation(coordinate: Coordinate)Returns a screen location that corresponds to a geographical coordinate.
containsCoordinate(coordinate: Coordinate)Returns true if the coordinate is visible in the current viewport.

UISettings Interface

You can adjust the maps UI settings from the GoogleMap object by configuring the following properties of the uiSettings property:

PropertyTypeDescription
compassEnabledbooleanWhether the compass is enabled or not
indoorLevelPickerEnabledbooleanWhether the indoor level picker is enabled or not
mapToolbarEnabledbooleanWhether the map toolbar is enabled or not
myLocationButtonEnabledbooleanWhether the 'My Location' button is enabled or not
rotateGesturesEnabledbooleanWhether the compass is enabled or not
scrollGesturesEnabledbooleanWhether map scroll gestures are enabled or not
tiltGesturesEnabledbooleanWhether map tilt gestures are enabled or not
zoomGesturesEnabledbooleanWhether map zoom gestures are enabled or not
zoomControlsEnabledbooleanWhether map zoom controls are enabled or not
scrollGesturesEnabledDuringRotateOrZoombooleanWhether scroll gestures are enabled while rotating or zooming

MapType Enum

The Google Maps API offers five types of maps:

TypeDescription
NoneNo tiles. The map is rendered as an empty grid with no tiles loaded.
NormalTypical road map. Shows roads, some features built by humans, and important natural features such as rivers. Road and feature labels are also visible.
SatelliteSatellite photograph data. Road and feature labels are not visible.
TerrainTopographic data. The map includes colors, contour lines and labels, and perspective shading. Some roads and labels are also visible.
HybridSatellite photograph data with road maps added. Road and feature labels are also visible.

Markers

Adding Markers

You can create markers using the GoogleMap's object addMarker method by passing it a MarkerOptions object.

function addMarker(map: GoogleMap, markerOptions: MarkerOptions): Marker {
  return map.addMarker(markerOptions)
}

addMarker returns a Marker

Marker Object

It implements the [MarkerOptions] interface and has the following additional methods.

MethodReturns
hideInfoWindow()void
showInfoWindow()void

MarkerOptions

PropertyTypeDescription
positionCoordinateThe position of the marker, specified as lat and lng
colorstring | ColorColor of the marker, shades are unavailable.
opacitynumberOpacity of the marker.
titlestringA string that's displayed in the info window when the user taps the marker
snippetstringAdditional text that's displayed below the title
iconImageSource | UIImage | BitmapA image that's displayed in place of the default marker image
draggablebooleanSet to true if you want to allow the user to move the marker. Defaults to false
flatbooleanBy default, markers are oriented against the screen, and will not rotate or tilt with the camera. Flat markers are oriented against the surface of the earth, and will rotate and tilt with the camera
rotationbooleanThe orientation of the marker, specified in degrees clockwise
anchorUnumberHorizontal icon offset from the marker position
anchorVnumberVertical icon offset from the marker position
userDataanyAdditional information assigned to the marker
zIndexnumberZ-index of the marker

Coordinate

PropertyType
latnumber
lngnumber

Removing Markers

To remove a marker from the map, call the removeMarker() method on the GoogleMap instance and pass it the marker to be removed.

function removeMarker(map: GoogleMap, marker: Marker) {
  map.removeMarker(marker)
}

Circles

Adding Circles

To add a circle to the map, call the addCircle() method and specify its properties with a CircleOptions object.

function addCircle(map: GoogleMap, circleOptions: CircleOptions): Circle {
  return map.addCircle(circleOptions)
}

CircleOptions

PropertyType
centerCoordinate
fillColorColor | string
radiusnumber
strokeColorColor | string
strokePatternPatternItem & Partial<NativeObject>[]
strokeWidthnumber
tappableboolean
visibleboolean
zIndexnumber
userData{ [key: string]: any }

Removing Circles

You can remove a circle using the GoogleMap's removeCircle() method.

function removeCircle(map: GoogleMap, circle: Circle) {
  map.removeCircle(circle)
}

Polygons

Adding Polygons

You can create polygons using the GoogleMap's object addPolygon() method by passing in the specified PolygonOptions.

function addPolygon(map: GoogleMap, polygonOptions: PolygonOptions): Polygon {
  return map.addPolygon(polygonOptions)
}

PolygonOptions

PropertyType
pointsCoordinate[]
holesCoordinate[]
tappableboolean
strokeWidthnumber
strokeColorColor | string
fillColorColor | string
strokePatternPatternItem & Partial<NativeObject>[]
zIndexnumber
geodesicboolean
strokeJointTypeJointType
visibleboolean
userData{ [key: string]: any }

Removing Polygons

You can remove a Polygon using the GoogleMap's removePolygon function, like so:

function removePolygon(map: GoogleMap, polygon: Polygon) {
  map.removePolygon(polygon)
}

Polylines

Adding Polylines

You can create Polylines using the GoogleMap's object addPolyline function by passing it a PolylineOptions object.

function addPolyline(map: GoogleMap, polylineOptions: PolylineOptions): Polyline {
  return map.addPolyline(polylineOptions)
}

PolylineOptions

PropertyType
widthnumber
pointsCoordinate[]
tappableboolean
geodesicboolean
visibleboolean
zIndexnumber
jointTypeJointType
patternPatternItem & Partial<NativeObject>[]
colorColor | string
startCapCap & Partial<NativeObject>
endCapCap & Partial<NativeObject>
userData{ [key: string]: any }

Removing Polylines

You can remove a Polyline using the GoogleMap's removePolyline function, like so:

function removePolyline(map: GoogleMap, polyline: Polyline) {
  map.removePolyline(polyline)
}

Ground Overlays

Adding Ground Overlays

You can create Ground Overlays using the GoogleMap's object addGroundOverlay function by passing in the specified GroundOverlay Options.

function addGroundOverlay(
  map: GoogleMap,
  groundOverlayOptions: GroundOverlayOptions
): GroundOverlay {
  return map.addGroundOverlay(groundOverlayOptions)
}

GroundOverlayOptions

PropertyType
zIndexnumber
visibleboolean
transparencynumber
positionCoordinate
boundsCoordinateBounds
tappableboolean
bearingnumber
imageImageSource
userDataany
widthnumber
heightnumber
anchorUnumber
anchorVnumber

Removing Ground Overlays

You can remove a GroundOverlay using the GoogleMap's removeGroundOverlay function, like so:

function removeGroundOverlay(map: GoogleMap, groundOverlay: GroundOverlay) {
  map.removeGroundOverlay(groundOverlay)
}

Tile Overlays

Adding Tile Overlays

You can create Tile Overlays using the GoogleMap's object addTileOverlay function by passing in the specified TileOverlay Options.

function addTileOverlay(
  map: GoogleMap,
  tileOverlayOptions: TileOverlayOptions
): TileOverlay {
  return map.addTileOverlay(tileOverlayOptions)
}

TileOverlayOptions

PropertyType
fadeInboolean
transparencynumber
visibleboolean
tileProviderTileProvider & Partial<NativeObject>
zIndexnumber

Removing Tile Overlays

You can remove a TileOverlay using the GoogleMap's removeTileOverlay function, like so:

function removeTileOverlay(map: GoogleMap, tileOverlay: TileOverlay) {
  map.removeTileOverlay(tileOverlay)
}

License

Apache License Version 2.0