- 版本:1.7.1
- GitHub: https://github.com/NativeScript/plugins
- NPM: https://npmjs.net.cn/package/%40nativescript%2Fgoogle-maps
- 下载
- 昨日:121
- 上周:580
- 上个月:2754
@nativescript/google-maps
一个插件,允许您使用 Maps SDK 来访问 Google Maps 功能。
内容
先决条件
-
要使用 Google Maps API,请在 Google API 控制台 中注册您的应用程序并获取 API 密钥。
-
将 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/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>
安装
npm install @nativescript/google-maps
要使用插件的不同 NativeScript 味道,修改 main.ts
以导入并注册它。
使用 @nativescript/google-maps 与 core
- 通过提供前缀(例如
map
)使用 Page 的xmlns
属性注册插件命名空间。
<Page xmlns="http://schemas.nativescript.org/tns.xsd"
xmlns:map="@nativescript/google-maps">
- 使用
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>
- 要管理映射功能,监听地图视图的
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
- 在
app.module.ts
中,通过将GoogleMapsModule
添加到AppModule
的imports
数组中注册插件。
import { GoogleMapsModule } from '@nativescript/google-maps/angular';
// Registering
@NgModule({
imports: [
GoogleMapsModule
],
declarations: [
AppComponent
],
bootstrap: [AppComponent]
})
- 将 MapView 添加到您的标记中。
<MapView
(mapTap)="onTap($event)"
(mapLongPress)="onLongPress($event)"
(markerTap)="onMarkerTap($event)"
>
</MapView>
- 管理
<MapView
(ready)="onReady($event)"
(mapTap)="onTap($event)"
(mapLongPress)="onLongPress($event)"
(markerTap)="onMarkerTap($event)"
>
</MapView>
- 要管理映射功能,监听地图视图的
ready
事件并从事件数据中获取对 GoogleMap 实例的引用。
使用 @nativescript/google-maps 与 Vue
- 在
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。
- 将 MapView 组件添加到标记中。
<MapView
@ready="onReady"
@mapTap="onTap"
@mapLongPress="onLongPress"
@markerTap="onMarkerTap"
/>
注意 要处理地图功能,请参阅 GoogleMap 对象 API。
- 要管理映射功能,监听地图视图的
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
属性中读取地图的当前相机位置。
属性 | 类型 | 描述 |
---|---|---|
目标 |
坐标 | 相机目标是地图中心的位置,指定为lat 和lng 。 |
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 |
坐标 | 标记的位置,指定为 lat 和 lng |
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