代码之家  ›  专栏  ›  技术社区  ›  Dylan

如何使用googleplacesapi获得某一类型的Lat long列表而不需要双重请求?

  •  1
  • Dylan  · 技术社区  · 6 年前

    这是我的密码

    mGeoDataClient.getAutocompletePredictions("Supermarket", null, null).addOnSuccessListener {
            it.forEach {
                it.placeId?.let {
                    mGeoDataClient.getPlaceById(it).addOnSuccessListener {
                        val marker = it[0].latLng
                        val name = it[0].name.toString()
                        mMap.addMarker(MarkerOptions().position(marker).title(name))
                    }
                }
            }
        }
    

    对于每一个超市,它发现它必须再次请求获取lat,只要这个信息不包括在自动完成预测中,只有地点id。

    2 回复  |  直到 6 年前
        1
  •  1
  •   EJG    6 年前

    据我所知,您不能保存双重调用,但是由于您正在返回一个列表,因此可以使用getPlaceById(字符串。。。(ID)呼叫。

    mGeoDataClient.getAutocompletePredictions("Supermarket", null, null).addOnSuccessListener {
        it.map{ it.placeId}.filterNotNull().toTypedArray().let {
            mGeoDataClient.getPlaceById(*it).addOnSuccessListener {
                it.forEach{
                    val marker = it.latLng
                    val name = it.name.toString()
                    mMap.addMarker(MarkerOptions().position(marker).title(name))
                }
            }
        }
    }
    
        2
  •  0
  •   Chivorn    6 年前

    你可以试试这个。效果不错。

      mGeoDataClient?.getAutocompletePredictions("Supermarket", null, null)?.addOnSuccessListener{
            it.forEach { prediction ->
                val placeId = prediction.placeId
                val pendingResult = Places.GeoDataApi.getPlaceById(mGoogleApiClient!!, placeId)
                pendingResult.setResultCallback {  placeBuffer->
                    val place = placeBuffer.get(0)
                    val marker = place.latLng
                    val name = place.name.toString()
                    mMap.addMarker(MarkerOptions().position(marker).title(name))
                }
            }
        }
    

    这就是我的 mGoogleApiClient 初始化:

      private var mGoogleApiClient: GoogleApiClient? = null
    
      mGoogleApiClient = GoogleApiClient.Builder(this)
                .addApi(Places.GEO_DATA_API)
                .addApi(Places.PLACE_DETECTION_API)
                .enableAutoManage(this, this)
                .build()
    

    希望能对你有所帮助。