1.0.42 • Published 3 years ago

@dante1304/nativescript-google-maps v1.0.42

Weekly downloads
-
License
Apache-2.0
Repository
github
Last release
3 years ago

@dante1304/google-maps

ns plugin add @dante1304/nativescript-google-maps

Usage

NativeScript plugin for the Google Maps SDK

This is a cross-platform (iOS & Android) Nativescript plugin for the Google Maps API.

Prerequisites

iOS - Cocoapods must be installed.

Android - The latest version of the Google Play Services SDK must be installed.

Google Maps API Key - Visit the Google Developers Console, create a project, and enable the Google Maps Android API and Google Maps SDK for iOS APIs. Then, under credentials, create an API key.

Configure API Key for Android

Start by copying the necessary template resource files in to the Android app resources folder:

cp -r node_modules/nativescript-google-maps-sdk/platforms/android/res/values app/App_Resources/Android/src/main/res

Next, modify your app/App_Resources/Android/src/main/res/values/nativescript_google_maps_api.xml file by uncommenting the nativescript_google_maps_api_key string, and replace PUT_API_KEY_HERE with the API key you created earlier.

Finally, modify your app/App_Resources/Android/src/main/AndroidManifest.xml file by inserting the following in between your <application> tags:

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="@string/nativescript_google_maps_api_key" />

The plugin will default to the latest available version of the Google Play Services SDK for Android. If you need to change the version, you can add a project.ext property, googlePlayServicesVersion, like so:

//   /app/App_Resources/Android/app.gradle

project.ext {
    googlePlayServicesVersion = "+"
}

Configure API Key for iOS

In your app.js, use the following code to add your API key (replace PUT_API_KEY_HERE with the API key you created earlier):

if (application.ios) {
    GMSServices.provideAPIKey("PUT_API_KEY_HERE");
}

If you are using Angular, modify your app.module.ts as follows:

import * as platform from "platform";
declare var GMSServices: any;

....

if (platform.isIOS) {
    GMSServices.provideAPIKey("PUT_API_KEY_HERE");
}

Adding the MapView

Modify your view by adding the xmlns:maps="nativescript-google-maps-sdk" namespace to your <Page> tag, then use the <maps:mapView /> tag to create the MapView:

<!-- /app/main-page.xml -->

<Page
    xmlns="http://www.nativescript.org/tns.xsd"
    xmlns:maps="nativescript-google-maps-sdk"
>
    <GridLayout>
        <maps:mapView
            latitude="{{ latitude }}"
            longitude="{{ longitude }}"
            zoom="{{ zoom }}"
            bearing="{{ bearing }}"
            tilt="{{ tilt }}"
            mapAnimationsEnabled="{{ mapAnimationsEnabled }}"
            padding="{{ padding }}"
            mapReady="onMapReady"
            markerSelect="onMarkerSelect"
            markerBeginDragging="onMarkerBeginDragging"
            markerEndDragging="onMarkerEndDragging"
            markerDrag="onMarkerDrag"
            cameraChanged="onCameraChanged"
            cameraMove="onCameraMove"
        />
    </GridLayout>
</Page>

Properties

The following properties are available for adjusting the camera view:

PropertyDescription and Data Type
latitudeLatitude, in degrees: number
longitudeLongitude, in degrees: number
zoomZoom level (described here): number
bearingBearing, in degrees: number
tiltTilt, in degrees: number
paddingTop, bottom, left and right padding amounts, in Device Independent Pixels: number[] (array)
mapAnimationsEnabledWhether or not to animate camera changes: Boolean

Events

The following events are available:

EventDescription
mapReadyFires when the MapView is ready for use
myLocationTappedFires when the 'My Location' button is tapped
coordinateTappedFires when a coordinate is tapped on the map
coordinateLongPressFires when a coordinate is long-pressed on the map
markerSelectFires when a marker is selected
markerBeginDraggingFires when a marker begins dragging
markerEndDraggingFires when a marker ends dragging
markerDragFires repeatedly while a marker is being dragged
markerInfoWindowTappedFires when a marker's info window is tapped
markerInfoWindowClosedFires when a marker's info window is closed
shapeSelectFires when a shape (e.g., Circle, Polygon, Polyline) is selected (Note: you must explicity configure shape.clickable = true; for this event to fire)
cameraChangedFires after the camera has changed
cameraMoveFires repeatedly while the camera is moving
indoorBuildingFocusedFires when a building is focused on (the building currently centered, selected by the user or by the location provider)
indoorLevelActivatedFires when the level of the focused building changes

Native Map Object

The MapView's gMap property gives you access to the platform's native map object–––consult the appropriate SDK reference on how to use it: iOS | Android

UI Settings

You can adjust the map's UI settings after the mapReady event has fired by configuring the following properties on mapView.settings:

PropertyDescription and Data Type
compassEnabledWhether the compass is enabled or not: Boolean
indoorLevelPickerEnabledWhether the indoor level picker is enabled or not: Boolean
mapToolbarEnabled** Android only ** Whether the map toolbar is enabled or not: Boolean
myLocationButtonEnabledWhether the 'My Location' button is enabled or not: Boolean
rotateGesturesEnabledWhether the compass is enabled or not: Boolean
scrollGesturesEnabledWhether map scroll gestures are enabled or not: Boolean
tiltGesturesEnabledWhether map tilt gestures are enabled or not: Boolean
zoomGesturesEnabledWhether map zoom gestures are enabled or not: Boolean
zoomControlsEnabled** Android only ** Whether map zoom controls are enabled or not: Boolean

Styling

Use gMap.setStyle(style); to set the map's styling (Google Maps Style Reference | Styling Wizard).

Angular

Use this.mapView.setStyle(<MapStyle>JSON.parse(this.styles)); inside of the onMapReady event handler. In this example, this.mapView is the MapView object and this.styles is a reference to a JSON file that was created using the Styling Wizard. The <MapStyle> type was imported from the plugin as { MapStyle }.

Basic Example

//  /app/main-page.js

var mapsModule = require("dante1304/nativescript-google-maps");

function onMapReady(args) {
    var mapView = args.object;

    console.log("Setting a marker...");
    var marker = new mapsModule.Marker();
    marker.position = mapsModule.Position.positionFromLatLng(-33.86, 151.20);
    marker.title = "Sydney";
    marker.snippet = "Australia";
    marker.userData = { index : 1};
    mapView.addMarker(marker);

    // Disabling zoom gestures
    mapView.settings.zoomGesturesEnabled = false;
}

function onMarkerSelect(args) {
    console.log("Clicked on " +args.marker.title);
}

function onCameraChanged(args) {
    console.log("Camera changed: " + JSON.stringify(args.camera));
}

function onCameraMove(args) {
    console.log("Camera moving: "+JSON.stringify(args.camera));
}

exports.onMapReady = onMapReady;
exports.onMarkerSelect = onMarkerSelect;
exports.onCameraChanged = onCameraChanged;
exports.onCameraMove = onCameraMove;

Usage with Angular

// /app/map-example.component.ts

import {Component, ElementRef, ViewChild} from '@angular/core';
import {registerElement} from "nativescript-angular/element-registry";

// Important - must register MapView plugin in order to use in Angular templates
registerElement("MapView", () => require("nativescript-google-maps-sdk").MapView);

@Component({
    selector: 'map-example-component',
    template: `
    <GridLayout>
        <MapView (mapReady)="onMapReady($event)"></MapView>
    </GridLayout>
    `
})
export class MapExampleComponent {

    @ViewChild("MapView") mapView: ElementRef;

    //Map events
    onMapReady = (event) => {
        console.log("Map Ready");

}

Marker clustering

To setup the marker cluster use MapView's setupMarkerCluster instead of adding markers to map like this:

function onMapReady(args) {
	var mapView = args.object;
	var markers = [];

	for (i = 0; i < 5; i++) {
		var marker = new mapsModule.Marker();
		marker.position = mapsModule.Position.positionFromLatLng(-33.86, 151.2);
		marker.title = `Marker ${i + 1}`;
		marker.snippet = `Marker ${i + 1}`;
		marker.userData = { index: i };
		markers.push(marker);
	}

	// The second argument is the minimum number of items that should form a cluster
	mapView.setupMarkerCluster(markers, 2);

	// Disabling zoom gestures
	mapView.settings.zoomGesturesEnabled = false;
}

License

Apache License Version 2.0

1.0.19

3 years ago

1.0.18

3 years ago

1.0.39

3 years ago

1.0.17

3 years ago

1.0.38

3 years ago

1.0.16

3 years ago

1.0.9

3 years ago

1.0.8

3 years ago

1.0.7

3 years ago

1.0.6

3 years ago

1.0.40

3 years ago

1.0.22

3 years ago

1.0.21

3 years ago

1.0.42

3 years ago

1.0.20

3 years ago

1.0.41

3 years ago

1.0.26

3 years ago

1.0.25

3 years ago

1.0.24

3 years ago

1.0.23

3 years ago

1.0.29

3 years ago

1.0.28

3 years ago

1.0.27

3 years ago

1.0.33

3 years ago

1.0.11

3 years ago

1.0.32

3 years ago

1.0.10

3 years ago

1.0.31

3 years ago

1.0.30

3 years ago

1.0.37

3 years ago

1.0.15

3 years ago

1.0.36

3 years ago

1.0.14

3 years ago

1.0.35

3 years ago

1.0.13

3 years ago

1.0.34

3 years ago

1.0.12

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago