@nativescript/google-maps
Google Maps SDK
npm i --save @nativescript/google-maps

@nativescript/google-maps

一个插件,允许您使用 Maps SDK 来访问 Google Maps 功能。

内容

先决条件

  1. 要使用 Google Maps API,请在 Google API 控制台 中注册您的应用程序并获取 API 密钥。

  2. 将 Google Maps API 密钥添加到您的应用程序中。

Android

要为 Android 添加 API 密钥,修改 AndroidManifest.xml 文件并添加一个 <meta-data> 标签,其名称为 com.google.android.geo.API_KEY,值为密钥。

<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

要为 iOS 添加 API 密钥,将 TNSGoogleMapsAPIKey 键和 API 密钥作为值添加到位于 App_Resources/iOSInfo.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>

安装

npm install @nativescript/google-maps

要使用插件的不同 NativeScript 味道,修改 main.ts 以导入并注册它。

使用 @nativescript/google-maps 与 core

  1. 通过提供前缀(例如 map)使用 Page 的 xmlns 属性注册插件命名空间。
<Page xmlns="http://schemas.nativescript.org/tns.xsd"
xmlns:map="@nativescript/google-maps">
  1. 使用 map 前缀访问 <MapView>。
<map:MapView ...

以下是前两个步骤的完整代码

<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}}"
mapTap="{{onTap}}"
mapLongPress="{{onLongPress}}"
markerTap="{{onMarkerTap}}"
/>

</Page>
  1. 要管理映射功能,监听地图视图的 ready 事件并从事件数据中获取对 GoogleMap 实例的引用。
<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>

要使用不同 NativeScript 味道的插件,修改 main.ts 以注册它。

使用 @nativescript/google-maps 与 Angular

  1. app.module.ts 中,通过将 GoogleMapsModule 添加到 AppModuleimports 数组中注册插件。
import { GoogleMapsModule } from '@nativescript/google-maps/angular';

// Registering
@NgModule({
imports: [
GoogleMapsModule
],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
  1. MapView 添加到您的标记中。
<MapView
(mapTap)="onTap($event)"
(mapLongPress)="onLongPress($event)"
(markerTap)="onMarkerTap($event)"
>

</MapView>
  1. 管理
<MapView
(ready)="onReady($event)"
(mapTap)="onTap($event)"
(mapLongPress)="onLongPress($event)"
(markerTap)="onMarkerTap($event)"
>

</MapView>
  1. 要管理映射功能,监听地图视图的 ready 事件并从事件数据中获取对 GoogleMap 实例的引用。

使用 @nativescript/google-maps 与 Vue

  1. app.ts 文件中,通过将插件的引用传递给 app 实例的 use() 方法注册插件。

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)

注意 要处理地图功能,请参阅 GoogleMap 对象 API。


  1. MapView 组件添加到标记中。
<MapView
@ready="onReady"
@mapTap="onTap"
@mapLongPress="onLongPress"
@markerTap="onMarkerTap"

/>

注意 要处理地图功能,请参阅 GoogleMap 对象 API。

  1. 要管理映射功能,监听地图视图的 ready 事件并从事件数据中获取对 GoogleMap 实例的引用。

控制相机

要程序化更新相机位置,请在 GoogleMap 对象上调用 animateCamera() 方法,并传入一个 CameraUpdate 实例。

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

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

设置地图类型

要设置地图类型,将 mapType 属性设置为 MapType 选项之一。

import { GoogleMap, MapType } from '@nativescript/google-maps';

map: GoogleMap;
map.mapType = MapType.Hybrid;

有关可以调用并传递给 animateCamera() 方法的更多方法,请参阅 CameraUpdate

地图样式

您可以对地图的项目进行样式设置,例如道路、公园、商业和其它兴趣点。

样式仅在 普通 地图类型上有效。样式不影响室内地图。

要样式化您的地图,请使用由 Google Maps APIs Styling Wizard 生成的 JSON 文件。除了更改功能的外观外,您还可以完全隐藏功能。

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

要应用自定义样式到您的地图,您可以在您的 GoogleMap 对象上设置 mapStyle 属性。

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

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

API

MapView 类

属性

以下属性可用于在初始化时调整相机视图

属性 类型 描述
lat 数字 纬度,以度为单位
lng 数字 经度,以度为单位
zoom 数字 缩放级别(描述见此处
bearing 数字 方向,以度为单位
tilt 数字 倾斜,以度为单位

事件

MapView 提供以下事件

事件 描述
ready 当 MapView 准备使用时触发,并提供一个 GoogleMap 实例来管理映射功能。
mapTap 当在地图上点击坐标时触发
mapLongPress 当在地图上长按时触发
markerTap 当点击标记时触发
myLocationTap 当点击“我的位置”时触发
myLocationButtonTap 当点击“我的位置”按钮时触发
markerDragStart 当标记开始拖动时触发
markerDragging 当标记正在拖动时触发
markerDragEnd 当标记停止拖动时触发
tileRenderingStart 当开始渲染瓦片时触发
tileRenderingEnd 当渲染瓦片结束时触发
cameraPosition 当地图视口状态改变时触发,相机状态包括 idle | start | moving
circle 当点击圆时触发
polygon 当点击多边形时触发
polyline 当点击折线时触发
poi 当点击 POI 时触发
groundOverlay 当点击地面叠加层时触发
infoWindowTap 当点击标记的提示信息窗口时触发
infoWindowLongPress 当长按标记的提示信息窗口时触发
infoWindowClose 当标记的提示信息窗口关闭时触发
markerInfoContents 如果此方法返回一个视图,它将被放置在默认的提示信息窗口框架内。
markerInfoWindow 当标记即将被选中时调用,并提供一个可选的自定义提示信息窗口以供该标记使用(如果此方法返回一个视图)。
activeBuilding 当聚焦到建筑物上时触发
activeLevel 当聚焦的建筑物级别改变时触发

GoogleMap 对象

此类提供映射功能,其实例可通过 MapView 实例的 ready 事件 获取。

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

属性

属性 类型 描述
buildingsEnabled 布尔值 启用建筑物
maxZoomLevel 数字 最大缩放级别
minZoomLevel 数字 最小缩放级别
myLocationEnabled 布尔值 启用“我的位置”
trafficEnabled 布尔值 启用交通
cameraPosition CameraPosition 相机位置
projection 投影 投影
uiSettings IUISettings UISettings 接口
mapStyle 样式[] 地图样式
mapType MapType MapType
native 任何类型 只读:特定平台的GoogleMap类实例。Android平台使用com.google.android.gms.maps.GoogleMap,iOS平台使用GMSMapView

方法

方法 返回值 描述
addMarker(marker: MarkerOptions) 标记 将一个标记添加到地图上
removeMarker(marker: Marker) void 从地图上移除标记
addTileOverlay(options: TileOverlayOptions) 瓦片覆盖层 将瓦片覆盖层添加到地图上
removeTileOverlay(overlay: TileOverlay) void 移除地图上的瓦片覆盖层
addCircle(circle: CircleOptions) 圆形 将圆形添加到地图上
removeCircle(circle: Circle) void 从地图上移除圆形
addGroundOverlay(options: GroundOverlayOptions) 地面覆盖层 将地面覆盖层添加到地图上
removeGroundOverlay(groundOverlay: GroundOverlay) 从地图上移除地面覆盖层
addPolygon(options: PolygonOptions) 多边形 将多边形添加到地图上
removePolygon(polygon: Polygon) 从地图上移除多边形
addPolyline(options: PolylineOptions) 折线 将折线添加到地图上
removePolyline(polyline: Polyline) void 从地图上移除折线
animateCamera(update: CameraUpdate) void 将相机动画移动到新位置
snapshot() Promise<ImageSource> 返回地图当前视口的一个平台特定图像
clear() void 清除地图上添加的所有对象

本地地图对象

GoogleMap让您访问平台的本地地图对象 native | android | ios

有关如何使用它的信息,请参阅适当的SDK参考:[iOS](https://developers.google.com/maps/documentation/ios-sdk/reference/interface_g_m_s_map_view) | [Android](https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap)

相机位置

可以从GoogleMap对象的cameraPosition属性中读取地图的当前相机位置。

属性 类型 描述
目标 坐标 相机目标是地图中心的位置,指定为latlng
bearing 数字 相机指向的方向,以顺时针方向从北开始测量的度数。
tilt 数字 相机的视场角,以度为单位。
zoom 数字 地图的缩放比例。

CameraUpdate 类

CameraUpdate 提供了多种方法来创建目标 CameraPosition

方法 描述
fromCoordinate(coordinate: Coordinate, zoom: number) 从单个坐标返回一个 CameraUpdate
fromCoordinates(coordinates: Coordinate[], padding: number) 从多个坐标返回一个 CameraUpdate
fromCoordinates(coordinates: Coordinate[], width: number, height: number, padding: number) 从多个坐标返回一个 CameraUpdate,具有指定的高度、宽度和填充
fromCameraPosition(position: CameraPosition) 从一个 CameraPosition 返回一个 CameraUpdate
zoomIn() 返回一个放大后的 CameraUpdate
zoomOut() 返回一个缩小后的 CameraUpdate
zoomTo(value: number) 返回一个缩放到指定值的 CameraUpdate
zoomBy(amount: number, point?: { x: number; y: number }) 返回一个缩放并平移的 CameraUpdate
scrollBy(x: number, y: number) 返回一个平移的 CameraUpdate

投影

投影用于在屏幕位置和地球表面的地理坐标之间进行转换。

方法 描述
fromScreenLocation(point: { x: number; y: number }) 返回与屏幕位置相对应的地理位置。
getVisibleRegion() 获取视锥体的投影,以在屏幕坐标和经纬度坐标之间进行转换。
toScreenLocation(coordinate: Coordinate) 返回与地理坐标相对应的屏幕位置。
containsCoordinate(coordinate: Coordinate) 如果坐标在当前视口中可见,则返回 true。

UISettings 接口

您可以通过配置 uiSettings 属性的以下属性来从 GoogleMap 对象调整地图的 UI 设置:

属性 类型 描述
compassEnabled 布尔值 是否启用指南针
indoorLevelPickerEnabled 布尔值 是否启用室内楼层选择器
mapToolbarEnabled 布尔值 是否启用地图工具栏
myLocationButtonEnabled 布尔值 是否启用“我的位置”按钮
rotateGesturesEnabled 布尔值 是否启用指南针
scrollGesturesEnabled 布尔值 是否启用地图滚动手势
tiltGesturesEnabled 布尔值 是否启用地图倾斜手势
zoomGesturesEnabled 布尔值 是否启用地图缩放手势
zoomControlsEnabled 布尔值 是否启用地图缩放控件
scrollGesturesEnabledDuringRotateOrZoom 布尔值 是否在旋转或缩放时启用滚动手势

MapType 枚举

Google Maps API 提供以下五种类型的地图

类型 描述
None 没有瓦片。地图被渲染为没有加载瓦片的空网格。
Normal 典型的道路地图。显示道路、一些人类建造的特征以及重要的自然特征,如河流。道路和特征标签也可见。
Satellite 卫星照片数据。道路和特征标签不可见。
Terrain 地形数据。地图包括颜色、等高线和标签,以及透视阴影。一些道路和标签也可见。
Hybrid 添加了道路地图的卫星照片数据。道路和特征标签也可见。

标记

添加标记

您可以使用 GoogleMap 对象的 addMarker 方法创建标记,通过传递一个 MarkerOptions 对象。

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

addMarker 返回一个 Marker

标记对象

它实现了 [MarkerOptions] 接口,并具有以下附加方法。

方法 返回值
hideInfoWindow() void
showInfoWindow() void

标记选项

属性 类型 描述
position 坐标 标记的位置,指定为 latlng
color string | Color 标记的颜色,阴影不可用。
opacity 数字 标记的不透明度。
title string 用户点击标记时在信息窗口中显示的字符串
snippet string 在标题下方显示的附加文本
icon ImageSource | UIImage | Bitmap 显示在默认标记图像位置的图像
draggable 布尔值 设置为 true 如果您想允许用户移动标记。默认为 false
flat 布尔值 默认情况下,标记面向屏幕,不会随着相机旋转或倾斜。扁平标记面向地球表面,会随着相机旋转和倾斜
rotation 布尔值 标记的方向,指定为顺时针度数
anchorU 数字 从标记位置到水平图标偏移量
anchorV 数字 从标记位置到垂直图标偏移量
userData 任何类型 分配给标记的附加信息
zIndex 数字 标记的 Z-index

坐标

属性 类型
lat 数字
lng 数字

移除标记

要从地图中删除标记,请在 GoogleMap 实例上调用 removeMarker() 方法,并传递要删除的标记。

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

圆形

添加圆形

要向地图中添加圆圈,请调用 addCircle() 方法,并使用 CircleOptions 对象指定其属性。

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

圆形选项

属性 类型
center 坐标
fillColor Color | string
radius 数字
描边颜色 Color | string
描边图案 PatternItem & Partial[]
描边宽度 数字
可触摸 布尔值
可见 布尔值
zIndex 数字
userData { [key: string]: any }

移除圆形

您可以使用GoogleMap的removeCircle()方法删除圆。

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

多边形

添加多边形

您可以使用GoogleMap的addPolygon()方法创建多边形,方法是通过传递指定的PolygonOptions

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

多边形选项

属性 类型
坐标[]
坐标[]
可触摸 布尔值
描边宽度 数字
描边颜色 颜色 | 字符串
fillColor 颜色 | 字符串
描边图案 PatternItem & Partial[]
zIndex 数字
大地测量线 布尔值
描边连接类型 连接类型
可见 布尔值
userData { [key: string]: any }

移除多边形

您可以使用GoogleMap的removePolygon函数删除多边形,如下所示

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

多段线

添加多段线

您可以通过传递一个PolylineOptions对象来使用GoogleMap的对象addPolyline函数创建折线。

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

多段线选项

属性 类型
宽度 数字
坐标[]
可触摸 布尔值
大地测量线 布尔值
可见 布尔值
zIndex 数字
连接类型 连接类型
图案 PatternItem & Partial[]
color 颜色 | 字符串
起始端帽 端帽 & Partial
结束端帽 端帽 & Partial
userData { [key: string]: any }

移除多段线

您可以使用GoogleMap的removePolyline函数删除折线,如下所示

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

地面覆盖

添加地面覆盖

您可以通过传递指定的GroundOverlay Options来使用GoogleMap的对象addGroundOverlay函数创建地面覆盖。

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

地面覆盖选项

属性 类型
zIndex 数字
可见 布尔值
透明度 数字
position 坐标
边界 CoordinateBounds
可触摸 布尔值
bearing 数字
图片 ImageSource
userData 任何类型
宽度 数字
高度 数字
anchorU 数字
anchorV 数字

移除地面覆盖

您可以使用GoogleMap的removeGroundOverlay函数删除地面覆盖,如下所示

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

瓦片覆盖

添加瓦片覆盖

您可以通过传递指定的TileOverlay Options来使用GoogleMap的对象addTileOverlay函数创建瓦片覆盖。

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

瓦片覆盖选项

属性 类型
渐入 布尔值
透明度 数字
可见 布尔值
瓦片提供者 瓦片提供者 & Partial
zIndex 数字
clearTileCache() void

在将瓦片覆盖添加到地图之后设置瓦片覆盖选项可能对瓦片覆盖没有影响。要更新瓦片覆盖,可能需要调用clearTileCache()

移除瓦片覆盖

您可以使用GoogleMap的removeTileOverlay函数删除瓦片覆盖,如下所示

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

瓦片提供者

瓦片提供者是提供用于瓦片覆盖的瓦片的对象。

提供者 描述
瓦片提供者 瓦片提供者的基类
UrlTileProvider 从URL返回瓦片的瓦片提供者

例如,可以创建一个UrlTileProvider,如下所示

const tileProvider = new UrlTileProvider((x, y, z) => {
return `https://tiles.example.com/${z}/${x}/${y}.png`;
});

许可证

Apache License Version 2.0