如何从 Android 中的名称或纬度获取 PlaceID?

How to get PlaceID from name, or lat, long in Android?

这是我的代码:

Geocoder geocoder = new Geocoder(this, Locale.getDefault());
    List<Address> addresses = geocoder.getFromLocationName(text, 10);
    test.clear();
    for (int i = 0; i < addresses.size(); i++) {
        Address address = addresses.get(i);
        for (int j=0;j<address.getMaxAddressLineIndex();j++) {
            test.add(address.getAddressLine(j) + ", " + address.getCountryName());
//                address.getLatitude();
//                address.getLatitude();
            }
        }

但我找不到类似 address.getPlaceID() 的内容。

也许我使用另一个 API 从名称中获取 PlaceID,或者从上面的代码中获取经纬度。谢谢!

看看这个docs。 您将获得 Address 的经纬度名称 然后在下面调用 google api

https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&types=food&name=cruise&key=YOUR_API_KEY

你会得到这样的回复

{
  "html_attributions" : [],
  "results" : [
    {
      "geometry" : {
        "location" : {
          "lat" : -33.870775,
          "lng" : 151.199025
        }
      },
      ...
      "place_id" : "ChIJrTLr-GyuEmsRBfy61i59si0",
      ...
    }
  ],
  "status" : "OK"
}

在那里你会得到地点编号。

Note: Please enable the GeoLocation Api from Google Developer Console otherwise it return the error msg :This API project is not authorized to use this API.

您也可以使用 直接 搜索代替 nearbysearch https://maps.googleapis.com/maps/api/geocode/json?latlng=40.714224,-73.961452&key=YOUR_API_KEY

看看Getting Started with Geocoding

这两种提议的方式都需要花钱,我认为人们应该提一下。我们有来自 Google 的 -$200,但这完全取决于您拥有多少用户以及您需要使用地理编码的频率。每月向地理编码器发出 6 万次请求 - 使用地理编码 https API :

只需 300 美元

2018 年 11 月 1 日至 30 日 地理编码 API 地理编码:6073 次 - 30.38 美元

不要在回复中过滤您需要的内容,就像我们在其他帖子的请求中一样?期待更多:

2018 年 11 月 1 日至 30 日 地点 API 地点详情:2389 个 40.61 美元

2018 年 11 月 1 日至 30 日 地点 API 联系数据:2385 次计数 $7.17

2018 年 11 月 1 日至 30 日 地点 API 大气数据:2385 次计数 $11.95

我确实建议使用这样获取地点 ID。这比直接调用 API 更好。 我整天都在为这个问题绊倒。所以我希望这会有所帮助。谁正在寻找出路以从您当前的位置获取地点 ID。 android

Kotlin

val mPlaceDetectionClient = Places.getPlaceDetectionClient(this.context!!)  
val placeResult =  mPlaceDetectionClient.getCurrentPlace(null) 
placeResult.addOnCompleteListener(object : OnCompleteListener<PlaceLikelihoodBufferResponse>{
    override fun onComplete(p0: Task<PlaceLikelihoodBufferResponse>) {
        val likelyPlaces = p0.result
        if(likelyPlaces.any()){
            // get the place ID from code below
            placeId = likelyPlaces[0].place.id  }
    }

})

或者如果谁正在实施或开发另一种语言,例如 java。您可以根据下面的参考实施您的代码。

java

https://developers.google.com/places/android-sdk/googleapi-migration