Google Maps
Prerequisites
To use the Google Maps API, you must register your app in the Google API Console and obtain an API key.
Config
Android
Modify the AndroidManifest
to include the new meta tag along with your API key, the manifest is located in App_Resources/Android/AndroidManifest.xml
<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
Modify the Info.plist
to include the new meta tag along with your API key, the manifest is located in App_Resources/iOS/Info.plist
<?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>
Usage
Core
Ensure you’ve included xmlns:map="@nativescript/google-maps" on the Page element |
<map:MapView
lat="{{lat}}"
lng="{{lng}}"
zoom="{{zoom}}"
bearing="{{bearing}}"
tilt="{{tilt}}"
ready="{{onReady}}"
mapTap="{{onTap}}"
mapLongPress="{{onLongPress}}"
markerTap="{{onMarkerTap}}"
/>
Angular
import { GoogleMapsModule } from '@nativescript/google-maps/angular';
@NgModule({
imports: [
GoogleMapsModule
],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
<MapView
(ready)="onReady($event)"
(mapTap)="onTap($event)"
(mapLongPress)="onLongPress($event)"
(markerTap)="onMarkerTap($event)"
>
</MapView>
MapView API
Properties
The following properties are available for adjusting the camera view on initialization:
Property | type | Description and Data Type |
---|---|---|
|
number |
Latitude, in degrees |
|
number |
Longitude, in degrees |
|
number |
Zoom level (described here) |
|
number |
Bearing, in degrees |
|
number |
Tilt, in degrees |
Events
The following events are available:
Event | Description |
---|---|
|
Fires when the MapView is ready for use see GoogleMap |
|
Fires when a coordinate is tapped on the map |
|
Fires when a coordinate is long-pressed on the map |
|
Fires when a marker is tapped |
|
Fires when 'My Location' is tapped |
|
Fires when the 'My Location' button is tapped |
|
Fires when a marker begins dragging |
|
Fires while a marker is being dragged |
|
Fires when a marker ends dragging |
|
Fires when tile rendering begins |
|
Fires when tile rendering ends |
|
Fires when the map viewport state changes, camera states include |
|
Fires when a circle is tapped |
|
Fires when a polygon is tapped |
|
Fires when a polyline is tapped |
|
Fires when a POI is tapped |
|
Fires when a ground overlay is tapped |
|
Fires when a marker’s info window is tapped |
|
Fires when a marker’s info window is long-pressed |
|
Fires when a marker’s info window is closed |
|
|
|
|
|
Fires when a building is focused on |
|
Fires when the level of the focused building changes |
Google Map
Instance
A GoogleMap instance is required from the map view to access many of the mapping features.
The GoogleMaps instance is available from the MapView
s ready
event:
function onReady(event: MapReadyEvent) {
const map: GoogleMap = event.map
}
API
Properties
Property | Type | Description |
---|---|---|
|
Style[] |
See Map Styles |
|
MapType |
See Map Type |
|
boolean |
Enables Buildings |
|
number |
Maximum level of zoom |
|
number |
Minimum level of zoom |
|
boolean |
Enables "My Location" |
|
boolean |
Enables traffic |
|
IUISettings |
See UI Settings |
|
CameraPosition |
See Camera Position |
|
Projection |
See Projection |
|
any |
Functions
Func | Description |
---|---|
addMarker(marker: MarkerOptions): Marker |
Adds a marker to the map |
removeMarker(marker: Marker) |
Removes a marker from the map |
addTileOverlay(options: TileOverlayOptions): TileOverlay |
Adds a tile overlay to the map |
removeTileOverlay(overlay: TileOverlay) |
Removes a tile overlay from the map |
addCircle(circle: CircleOptions): Circle |
Adds a circle to the map |
removeCircle(circle: Circle) |
Removes a circle from the map |
addGroundOverlay(options: GroundOverlayOptions): GroundOverlay |
Adds a ground overlay to the map |
removeGroundOverlay(groundOverlay: GroundOverlay) |
Removes a ground overlay from the map |
addPolygon(options: PolygonOptions): Polygon |
Adds a polygon to the map |
removePolygon(polygon: Polygon) |
Removes a polygon from the map |
addPolyline(options: PolylineOptions): Polyline |
Adds a polyline to the map |
removePolyline(polyline: Polyline#polyline) |
Removes a polyline from the map |
animateCamera(update: CameraUpdate) |
Animates camera to a new position |
snapshot(): Promise<ImageSource> |
Returns a platform specific image of the maps current viewport |
clear() |
Clears all objects added to the map |
Native Map Object
GoogleMap
gives you access to the platforms native map objects native
| android
| ios
Camera Position
The maps current camera position can be read from the GoogleMap
s object cameraPosition
.
Property | Type | Description |
---|---|---|
|
Coordinate |
The camera target is the location of the center of the map, specified as |
|
number |
The direction in which the camera points measured in degrees clockwise from north. |
|
number |
The viewing angle of the camera measured in degrees |
|
number |
The scale of the map |
Controlling The Camera
To programatically update the camera position you can call animateCamera
from the GoogleMap
object, like so:
import { CameraPosition } from '@nativescript/google-maps'
googleMap.animateCamera(
CameraPosition.fromCoordinates(
{
lat: -32.1234,
lng: 125.1234
},
googleMap.cameraPosition.zoom
)
)
CameraPosition
provides multiple methods to create a target CameraUpdate position.
Method | Description |
---|---|
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 |
UI Settings
You can adjust the maps UI settings from the GoogleMap
object by configuring the following properties of uiSettings
:
Property | Type | Description |
---|---|---|
|
boolean |
Whether the compass is enabled or not |
|
boolean |
Whether the indoor level picker is enabled or not |
|
boolean |
Whether the map toolbar is enabled or not |
|
boolean |
Whether the 'My Location' button is enabled or not |
|
boolean |
Whether the compass is enabled or not |
|
boolean |
Whether map scroll gestures are enabled or not |
|
boolean |
Whether map tilt gestures are enabled or not |
|
boolean |
Whether map zoom gestures are enabled or not |
|
boolean |
Whether map zoom controls are enabled or not |
|
boolean |
Whether scroll gestures are enabled while rotating or zooming |
Map Type
The Google Maps API offers five types of maps:
Type | Description |
---|---|
|
No tiles. The map is rendered as an empty grid with no tiles loaded. |
|
Typical road map. Shows roads, some features built by humans, and important natural features such as rivers. Road and feature labels are also visible. |
|
Satellite photograph data. Road and feature labels are not visible. |
|
Topographic data. The map includes colors, contour lines and labels, and perspective shading. Some roads and labels are also visible. |
|
Satellite photograph data with road maps added. Road and feature labels are also visible. |
To set the type of a map, adjust the GoogleMap
objects mapType
.
You can pass in one map type from the MapType
Enum.
For example:
import { GoogleMap, MapType } from '@nativescript/google-map';
...
map: GoogleMap;
map.mapType = MapType.Hybrid;
Map Styles
You can customize the presentation of the standard Google Map styles, changing the visual display of features like roads, parks, businesses, and other points of interest. This means that you can emphasize particular components of the map or make the map look good with your app.
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, like so:
import { GoogleMap } from '@nativescript/google-map';
...
map: GoogleMap;
map.mapStyle = [{
"featureType": "landscape",
"elementType": "labels",
"stylers": [
{ "visibility": "off" }
]
}];
Markers
Adding Markers
You can create markers using the GoogleMaps object addMarker
function by passing in the specified Marker Options.
function addMarker(map: GoogleMap, markerOptions: MarkerOptions): Marker {
return map.addMarker(markerOptions)
}
Marker Options
Property | Type | Description |
---|---|---|
|
Coordinate |
The position of the marker, specified as |
|
string | Color |
Color of the marker, shades are unavailable. |
|
string |
A string that’s displayed in the info window when the user taps the marker |
|
string |
Additional text that’s displayed below the title |
|
Image |
A image that’s displayed in place of the default marker image |
|
boolean |
Set to |
|
boolean |
By 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 |
|
boolean |
The orientation of the marker, specified in degrees clockwise |
|
number |
Horizontal icon offset from the marker position |
|
number |
Vertical icon offset from the marker position |
|
any |
Additional information assigned to the marker |
|
number |
Z-index of the marker |
Removing Markers
You can remove a marker using the GoogleMaps removeMarker
function, like so:
function removeMarker(map: GoogleMap, marker: Marker) {
map.removeMarker(marker)
}
Circle
Adding Circles
You can create Circles using the GoogleMaps object addCircle
function by passing in the specified Circle Options.
function addCircle(map: GoogleMap, circleOptions: CircleOptions): Circle {
return map.addCircle(circleOptions)
}
Removing Circles
You can remove a Circle using the GoogleMaps removeCircle
function, like so:
function removeCircle(map: GoogleMap, circle: Circle) {
map.removeCircle(circle)
}
Polygons
Adding Polygons
You can create polygons using the GoogleMaps object addPolygon
function by passing in the specified Polygon Options.
function addPolygon(map: GoogleMap, polygonOptions: PolygonOptions): Polygon {
return map.addPolygon(polygonOptions)
}
Polygon Options
Property | Type |
---|---|
|
Coordinate[] |
|
Coordinate[] |
|
boolean |
|
number |
|
Color | string |
|
Color | string |
|
PatternItem & Partial<NativeObject>[] |
|
number |
|
boolean |
|
JointType |
|
boolean |
|
|
Removing Polygons
You can remove a Polygon using the GoogleMaps removePolygon
function, like so:
function removePolygon(map: GoogleMap, polygon: Polygon) {
map.removePolygon(polygon)
}
Polyline
Adding Polylines
You can create Polylines using the GoogleMaps object addPolyline
function by passing in the specified Polyline Options.
function addPolyline(map: GoogleMap, polylineOptions: PolylineOptions): Polyline {
return map.addPolyline(polylineOptions)
}
Polyline Options
Property | Type |
---|---|
|
number |
|
Coordinate[] |
|
boolean |
|
boolean |
|
boolean |
|
number |
|
JointType |
|
PatternItem & Partial<NativeObject>[] |
|
Color | string |
|
Cap & Partial<NativeObject> |
|
Cap & Partial<NativeObject> |
|
|
Removing Polylines
You can remove a Polyline using the GoogleMaps 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 GoogleMaps object addGroundOverlay
function by passing in the specified GroundOverlay Options.
function addGroundOverlay(
map: GoogleMap,
groundOverlayOptions: GroundOverlayOptions
): GroundOverlay {
return map.addGroundOverlay(groundOverlayOptions)
}
Removing Ground Overlays
You can remove a GroundOverlay using the GoogleMaps 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 GoogleMaps object addTileOverlay
function by passing in the specified TileOverlay Options.
function addTileOverlay(
map: GoogleMap,
tileOverlayOptions: TileOverlayOptions
): TileOverlay {
return map.addTileOverlay(tileOverlayOptions)
}
Removing Tile Overlays
You can remove a TileOverlay using the GoogleMaps removeTileOverlay
function, like so:
function removeTileOverlay(map: GoogleMap, tileOverlay: TileOverlay) {
map.removeTileOverlay(tileOverlay)
}