如何使用 "nativescript-google-maps-sdk" 在 google 地图中获取当前位置?
How to get current location in google maps using "nativescript-google-maps-sdk"?
我正在 nativescript+Angular2 上构建应用程序。我已经从 npm 下载了 "nativescript-google-maps-sdk" 插件。如果我启用 setMyLocationEnabled(true)
,我会在屏幕右上角看到 "my-location" 按钮,单击它会转到我的实际位置。
我想做的是以编程方式获取这些坐标,因为我将需要它们进行其他操作(标记、邻近值等)。
运行 通过他们的代码,但找不到他们如何获得当前位置。 gMap.getMyLocation()
已弃用,所以我不能使用它,根据此处所写:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap
我们应该使用 FusedLocationProviderApi。如果这个插件没有使用它,那么它如何获取当前位置?
任何人都可以解释一下吗?
mapReady(args) {
console.log("Map Ready");
var gMap = args.gMap;
gMap.setMyLocationEnabled(true);
// gMap.getMyLocation(); deprecated
// need to get current location coordinates, somehow...
}
nativescript-google-maps-sdk 插件不支持从设备获取您的位置。
您需要从 nativescript-geolocation 获取位置(您已经这样做了),然后将其传递给 google-map。
如果您检查 google-maps 插件的 AndroidManifest.xml,它没有访问设备位置的权限。
事实证明,您可以通过两种方式从您的设备获取您的位置:
- 内置 android LocationManager
- with google 播放服务位置模块,它使用
FusedLocationProviderApi
构建在默认 android LocationManager 上
根据我的阅读,不同之处在于 googles 的版本更高级 - 它会自动从不同的定位模式(gps、wifi)切换并节省电池电量。
因此,为了使用 googles 的方式,我们需要:
导入google播放服务位置模块(+表示最新版本):
dependencies {
compile 'com.google.android.gms:play-services-location:+'
}
然后初始化播放服务API:
declare var com: any;
GoogleApiClient = com.google.android.gms.common.api.GoogleApiClient;
LocationServices = com.google.android.gms.location.LocationServices;
var dis = this; // writing in typescript, so this is reference to our current component where this code will lay
// Create an instance of GoogleAPIClient.
if (this.googleApiClient == null) {
this.googleApiClient = new dis.GoogleApiClient.Builder(application.android.context)
.addConnectionCallbacks(new dis.GoogleApiClient.ConnectionCallbacks({
onConnected: function() {
console.log("GoogleApiClient: CONNECTED");
}.bind(this),
onConnectionSuspended: function() {
console.log("GoogleApiClient: SUSPENDED");
}.bind(this)
}))
.addOnConnectionFailedListener(new dis.GoogleApiClient.OnConnectionFailedListener({
onConnectionFailed: function() {
console.log("GoogleApiClient: CONNECTION ERROR");
}.bind(this)
}))
.addApi(dis.LocationServices.API)
.build();
}
this.googleApiClient.connect();
我正在 nativescript+Angular2 上构建应用程序。我已经从 npm 下载了 "nativescript-google-maps-sdk" 插件。如果我启用 setMyLocationEnabled(true)
,我会在屏幕右上角看到 "my-location" 按钮,单击它会转到我的实际位置。
我想做的是以编程方式获取这些坐标,因为我将需要它们进行其他操作(标记、邻近值等)。
运行 通过他们的代码,但找不到他们如何获得当前位置。 gMap.getMyLocation()
已弃用,所以我不能使用它,根据此处所写:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap
我们应该使用 FusedLocationProviderApi。如果这个插件没有使用它,那么它如何获取当前位置?
任何人都可以解释一下吗?
mapReady(args) {
console.log("Map Ready");
var gMap = args.gMap;
gMap.setMyLocationEnabled(true);
// gMap.getMyLocation(); deprecated
// need to get current location coordinates, somehow...
}
nativescript-google-maps-sdk 插件不支持从设备获取您的位置。
您需要从 nativescript-geolocation 获取位置(您已经这样做了),然后将其传递给 google-map。
如果您检查 google-maps 插件的 AndroidManifest.xml,它没有访问设备位置的权限。
事实证明,您可以通过两种方式从您的设备获取您的位置:
- 内置 android LocationManager
- with google 播放服务位置模块,它使用
FusedLocationProviderApi
构建在默认 android LocationManager 上
根据我的阅读,不同之处在于 googles 的版本更高级 - 它会自动从不同的定位模式(gps、wifi)切换并节省电池电量。
因此,为了使用 googles 的方式,我们需要:
导入google播放服务位置模块(+表示最新版本):
dependencies {
compile 'com.google.android.gms:play-services-location:+'
}
然后初始化播放服务API:
declare var com: any;
GoogleApiClient = com.google.android.gms.common.api.GoogleApiClient;
LocationServices = com.google.android.gms.location.LocationServices;
var dis = this; // writing in typescript, so this is reference to our current component where this code will lay
// Create an instance of GoogleAPIClient.
if (this.googleApiClient == null) {
this.googleApiClient = new dis.GoogleApiClient.Builder(application.android.context)
.addConnectionCallbacks(new dis.GoogleApiClient.ConnectionCallbacks({
onConnected: function() {
console.log("GoogleApiClient: CONNECTED");
}.bind(this),
onConnectionSuspended: function() {
console.log("GoogleApiClient: SUSPENDED");
}.bind(this)
}))
.addOnConnectionFailedListener(new dis.GoogleApiClient.OnConnectionFailedListener({
onConnectionFailed: function() {
console.log("GoogleApiClient: CONNECTION ERROR");
}.bind(this)
}))
.addApi(dis.LocationServices.API)
.build();
}
this.googleApiClient.connect();