如何在Android中从名称或lat获取PlaceID?

时间:2015-12-15 07:39:07

标签: android google-geocoder

这是我的代码:

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来自name或lat,从上面的代码获取PlaceID。谢谢!

4 个答案:

答案 0 :(得分:8)

看看这个docs。 您将获得https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=-33.8670522,151.1957362&radius=500&types=food&name=cruise&key=YOUR_API_KEY 的lat,long名称 然后在google api下面调用它

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

你会得到这样的回复

{{1}}

在那里,你将得到地方ID。

  

注意:请从Google Developer Console启用GeoLocation Api,否则会返回错误消息:此API项目无权使用此API。

答案 1 :(得分:3)

您还可以使用直接搜索代替 nearbysearch <table id="isc_U5" class="OBFormFieldSelectControl" cellspacing="0" cellpadding="0" style="cursor:default;WIDTH:307px;" $9a="$9f" $89="isc_OBFKComboItem_8" role="presentation"> <tbody> <tr> <td style="white-space:nowrap;"> <input id="isc_U3" class="OBFormFieldSelectInputRequired" type="TEXT" tabindex="4078" style="WIDTH:281px;HEIGHT:17px;-moz-user-focus:normal;" autocomplete="OFF" onselect="isc_OBFKComboItem_8.$1162()" oninput="isc_OBFKComboItem_8._handleInput()" spellcheck="true" $9a="$9b" $89="isc_OBFKComboItem_8" handlenativeevents="false" name="transactionDocument"/> </td> <td id="isc_U7" class="OBFormFieldSelectPickerIcon" style="font-size:21px;"> </tr> </tbody> </table>

查看Getting Started with Geocoding

答案 2 :(得分:0)

这两种提议的方式都要花钱,我认为人们应该提一下。 Google提供了-200美元,但这取决于您拥有多少用户以及您需要使用地理编码的频率。每月向地址解析器发送6万个请求-仅需300美元即可使用地址解析器https API:

2018年11月1日至30日 地理编码API地理编码:6073个计数-$ 30.38

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

2018年11月1日至30日 Places API位置详情:2389个计数$ 40.61

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

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

答案 3 :(得分:0)

我建议您像这样使用“获取位置ID”。比直接调用API更好。 我整日为这个问题而迷迷糊糊。所以我希望这会有所帮助。谁在寻找从当前位置获取位置ID的出路。 对于Android

  

科特琳

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