通过googleMaps API

时间:2016-10-03 13:44:17

标签: android google-maps google-places google-local-search

我只是在Android中重建我的iOS应用程序,这里和那里都很糟糕。一个可怕的部分是地图事物。

我需要通过"park", "cafe", "bakery"等查询获取用户位置周围的位置。 在swift中我只使用了localSearchRequest.naturalLanguageQuery

self.localSearchRequest = MKLocalSearchRequest()
self.localSearchRequest.naturalLanguageQuery = mapSearchQuery
self.localSearchRequest.region = region
self.localSearch = MKLocalSearch(request: self.localSearchRequest)    

for item in localSearchResponse!.mapItems
     let annotation = MKPointAnnotation()
     annotation.coordinate = item.placemark.coordinate
     annotation.title = item.name
     self.mapView.addAnnotation(annotation)
}

使用GoogleMaps API在Android中使用相同的方法吗?我找到的唯一方法是通过https://developers.google.com/places/web-service/search中的JSON获取它们,我甚至不确定这是否适用于Android应用程序。

适用于Android的GooglePlaces API只会列出某个位置周围的所有位置,而无法过滤它们。

2 个答案:

答案 0 :(得分:1)

经过长时间的努力,我采用了以下解决方案。使用GooglePlaces网络服务(我的问题中的链接):

final String PLACES_API_BASE_URL = "https://maps.googleapis.com/maps/api/place/nearbysearch/json?";
    final String LOCATION_PARAM = "location";
    final String RADIUS_PARAM = "radius";
    final String KEYWORD_PARAM = "keyword";
    final String LANGUAGE_PARAM = "language";
    final String KEY_PARAM = "key";

    mDestinationUri = Uri.parse(PLACES_API_BASE_URL).buildUpon()
            .appendQueryParameter(LOCATION_PARAM, String.valueOf(latitude)+","+String.valueOf(longitude))
            .appendQueryParameter(RADIUS_PARAM, "1000")
            .appendQueryParameter(KEYWORD_PARAM, naturalLanguageQuery)
            .appendQueryParameter(KEY_PARAM, "YOUR_API_KEY")
            .build();

如果这将从谷歌接受,我们将看到。

答案 1 :(得分:0)

为了更好地区分,Android的以下API的使用如下:

  • Google Maps Android API将地图添加到您的Android应用中。集成基本地图,3D建筑物,室内平面图,街景和卫星图像,自定义标记等。
  • Google Places API for Android实施设备位置检测,自动完成并向您的应用添加有关数百万个位置的信息。

要获取用户所在位置,请尝试Current Place

您可以致电PlaceDetectionApi.getCurrentPlace()查找当地商家或设备当前所在的其他地方。您可以选择指定PlaceFilter将结果限制为一个或多个地点ID(最多10个),或仅选择当前打开的地点。如果未指定过滤器,则不会过滤结果。

以下代码示例检索设备最可能位于的位置列表,并记录每个位置的名称和可能性。

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
    .getCurrentPlace(mGoogleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
  @Override
  public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
    for (PlaceLikelihood placeLikelihood : likelyPlaces) {
      Log.i(TAG, String.format("Place '%s' has likelihood: %g",
          placeLikelihood.getPlace().getName(),
          placeLikelihood.getLikelihood()));
    }
    likelyPlaces.release();
  }
});

请尝试浏览指定的文档,以获取有关使用此API的权限和使用限制等详细信息。