如何使用 "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();