0

私はユーザーの周りの近くの場所をフィルタリングしています。私はユーザーの周りのすべてのマーカー/場所のplace_idを取得したいと思います。すべてのマーカーに対して1つのplace_idしかありません

ただし、すべてのマーカー/場所に対して1つのplace_idしか表示されません。 logcatは別のplace_idを表示しますが、アプリケーションは1つだけのスニペットですplace_id。

詳細を理解するには、サンプルビデオ:https://www.youtube.com/watch?v=-0pmjblb_G8を投稿しました。

ご覧のとおり、マーカー/場所をクリックしようとするたびに、他のマーカー/場所と同じplace_idが表示されます。

私は、説明のために他の必要なコードを掲載することができます。

UPDATE:追加情報:

私は静的な文字列のplaceIdとしてplaceIdを作りました。私は、各マーカー/場所のplaceIdを見ることができるように はその後、私はMainActivity

public boolean onMarkerClick(Marker marker) { 
     Toast.makeText(traffic.this, " " + GetNearbyPlacesData.placeId, Toast.LENGTH_SHORT).show(); 
     return true; 
    } 

にこれを追加しました。

UPDATE:追加情報:

public class GetNearbyPlacesData extends AsyncTask<Object, String, String> { 

    String googlePlacesData; 
    GoogleMap mMap; 
    String url; 
    static String placeID = ""; 

    @Override 
    protected String doInBackground(Object... params) { 
     try { 
      Log.d("GetNearbyPlacesData", "doInBackground entered"); 
      mMap = (GoogleMap) params[0]; 
      url = (String) params[1]; 
      DownloadUrl downloadUrl = new DownloadUrl(); 
      googlePlacesData = downloadUrl.readUrl(url); 
      Log.d("GooglePlacesReadTask", "doInBackground Exit"); 
     } catch (Exception e) { 
      Log.d("GooglePlacesReadTask", e.toString()); 
     } 
     return googlePlacesData; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     Log.d("GooglePlacesReadTask", "onPostExecute Entered"); 
     List<HashMap<String, String>> nearbyPlacesList = null; 
     DataParser dataParser = new DataParser(); 
     nearbyPlacesList = dataParser.parse(result); 
     ShowNearbyPlaces(nearbyPlacesList, result); 
     Log.d("GooglePlacesReadTask", "onPostExecute Exit"); 

    } 


    private void ShowNearbyPlaces(List<HashMap<String, String>> nearbyPlacesList, String result) { 
     for (int i = 0; i < nearbyPlacesList.size(); i++) { 
      Log.d("onPostExecute", "Entered into showing locations"); 

      MarkerOptions markerOptions = new MarkerOptions(); 
      HashMap<String, String> googlePlace = nearbyPlacesList.get(i); 
      double lat = Double.parseDouble(googlePlace.get("lat")); 
      double lng = Double.parseDouble(googlePlace.get("lng")); 
      String placeName = googlePlace.get("place_name"); 
      String vicinity = googlePlace.get("vicinity"); 


      try { 
       JSONObject jsonObject = new JSONObject(result); 
       //CHECK IF i IS CHANGING HERE 
       //CHECK IF RESULTS AND PLACE ID ARE CHANGING WITH DEBUGGER 
       placeID = jsonObject.getJSONArray("results").getJSONObject(i).getString("place_id"); 
       Log.d("onPostExecute", placeID); 
       LatLng latLng = new LatLng(lat, lng); 
       markerOptions.position(latLng); 
       Marker m = mMap.addMarker(new MarkerOptions() 
         .position(latLng) 
         .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)) 
         .snippet("placeId:" + placeID) 
         .title("placeId:" + placeID)); 
       m.showInfoWindow(); 
       mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
       mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 
      } catch (Exception e) { 

      } 



//   markerOptions.title(placeName + " : " + vicinity); 



      //move map camera 


     } 
    } 
} 

答えて

0

置きIDは場所API近くの検索のJSON応答に戻ってきます。

... 
"results":[ 
{ 
    "geometry":{ 
    "location":{ 
     "lat":-33.8688197,"lng":151.2092955 
    }, 
    "viewport":{ 
     "northeast":{ 
     "lat":-33.5782519,"lng":151.3429976 
     }, 
     "southwest":{ 
     "lat":-34.118328,"lng":150.5209286 
     } 
    } 
    }, 
    "icon":"https://maps.gstatic.com/mapfiles/place_api/icons/geocode-71.png", 
    "id":"044785c67d3ee62545861361f8173af6c02f4fae", 
    "name":"Sydney", 
    "photos":[ 
    { 
     "height":2448, 
     "html_attributions":[ 
     "Hatim Ghadhban Abood" 
     ], 
     "photo_reference":"CoQBdwAAAMIVPsN50AxLsKj-QiQ2pCrKaXTZd-OpHHcQ4BrHkrFYylWZS1MP0GDqAA8GrZIsqvgg97eDsQVV7UPGeGnIvRTJHPPbnkOmW6VhoxKXAKX_0NqCYAiK4twz4a4ELPwPC0tyCeU1KtkYcKknhhgohG41F4JbFru4m0NiFE3TtAp_EhC1wpA1LN68NZOJ1l_iXctoGhTNz_68e8x-dPM6G0PAZiWezSkvsg", 
     "width":3264 
    } 
    ], 
    "place_id":"ChIJP3Sa8ziYEmsRUKgyFmh9AQM", 
    "reference":"CmRbAAAA5LVfsLJXuBE1N7KDgJUTSgHHbGpGUVGgnLPVkobaylk6n9MsiPlqlYMmC0AdkqgzITScK_qDs05-n3ut6RMcrT2rHRwN36_pI8RoPNbNe9fPbOIyO2kTX9o7svURRqTpEhB4Phdre1afknnC5Ex2AewpGhRNNL5e4kxo1_L4BJgGZrRZlmWnmQ", 
    "scope":"GOOGLE", 
    "types":[ 
    "colloquial_area","locality","political" 
    ], 
    "vicinity":"Sydney" 
},... 

あなたが抽出する必要がフィールドplace_idがあります:

あなたはそこのようなものを見ることができます。あなたが言及したチュートリアルに従うならば、あなたはDataParserクラスのJSON応答を解析することを見ることができるので、あなたは場所のHashMapに場所のIDを追加するprivate HashMap<String, String> getPlace(JSONObject googlePlaceJson)方法を変更する必要があります。

private HashMap<String, String> getPlace(JSONObject googlePlaceJson) { 
    HashMap<String, String> googlePlaceMap = new HashMap<String, String>(); 
    String placeName = "-NA-"; 
    String vicinity = "-NA-"; 
    String latitude = ""; 
    String longitude = ""; 
    String reference = ""; 
    String placeID = ""; 

    Log.d("getPlace", "Entered"); 

    try { 
     if (!googlePlaceJson.isNull("name")) { 
      placeName = googlePlaceJson.getString("name"); 
     } 
     if (!googlePlaceJson.isNull("vicinity")) { 
      vicinity = googlePlaceJson.getString("vicinity"); 
     } 
     latitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lat"); 
     longitude = googlePlaceJson.getJSONObject("geometry").getJSONObject("location").getString("lng"); 
     reference = googlePlaceJson.getString("reference"); 
     //Let's get place ID here 
     placeID = googlePlaceJson.getString("place_id"); 

     googlePlaceMap.put("place_name", placeName); 
     googlePlaceMap.put("vicinity", vicinity); 
     googlePlaceMap.put("lat", latitude); 
     googlePlaceMap.put("lng", longitude); 
     googlePlaceMap.put("reference", reference); 
     //Let's add place ID to hash map 
     googlePlaceMap.put("place_id", placeID); 

     Log.d("getPlace", "Putting Places"); 
    } catch (JSONException e) { 
     Log.d("getPlace", "Error"); 
     e.printStackTrace(); 
    } 
    return googlePlaceMap; 
} 

次のことができるようになりますその後(ShowNearbyPlaces方法を見て)マーカーを示し、あなたの非同期タスクに場所のIDを取得:

public class GetNearbyPlacesData extends AsyncTask<Object, String, String> { 

String googlePlacesData; 
GoogleMap mMap; 
String url; 

@Override 
protected String doInBackground(Object... params) { 
    try { 
     Log.d("GetNearbyPlacesData", "doInBackground entered"); 
     mMap = (GoogleMap) params[0]; 
     url = (String) params[1]; 
     DownloadUrl downloadUrl = new DownloadUrl(); 
     googlePlacesData = downloadUrl.readUrl(url); 
     Log.d("GooglePlacesReadTask", "doInBackground Exit"); 
    } catch (Exception e) { 
     Log.d("GooglePlacesReadTask", e.toString()); 
    } 
    return googlePlacesData; 
} 

@Override 
protected void onPostExecute(String result) { 
    Log.d("GooglePlacesReadTask", "onPostExecute Entered"); 
    List<HashMap<String, String>> nearbyPlacesList = null; 
    DataParser dataParser = new DataParser(); 
    nearbyPlacesList = dataParser.parse(result); 
    ShowNearbyPlaces(nearbyPlacesList); 
    Log.d("GooglePlacesReadTask", "onPostExecute Exit"); 
} 

private void ShowNearbyPlaces(List<HashMap<String, String>> nearbyPlacesList) { 
    for (int i = 0; i < nearbyPlacesList.size(); i++) { 
     Log.d("onPostExecute","Entered into showing locations"); 
     MarkerOptions markerOptions = new MarkerOptions(); 
     HashMap<String, String> googlePlace = nearbyPlacesList.get(i); 
     double lat = Double.parseDouble(googlePlace.get("lat")); 
     double lng = Double.parseDouble(googlePlace.get("lng")); 
     String placeName = googlePlace.get("place_name"); 
     String vicinity = googlePlace.get("vicinity"); 

     //Retrieve a place ID here 
     String placeID = googlePlace.get("place_id"); 

     LatLng latLng = new LatLng(lat, lng); 
     markerOptions.position(latLng); 
     markerOptions.title(placeName + " : " + vicinity); 
     mMap.addMarker(markerOptions); 
     markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_RED)); 
     //move map camera 
     mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng)); 
     mMap.animateCamera(CameraUpdateFactory.zoomTo(11)); 
    } 
} 
}  
+0

私はこれを試してみましたが、各マーカーのplace_idは常に同じです。つまり、私は次のようなマーカーにスニペットを入れます:markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.travel_agency))。snippet( "placeId:" + placeID);毎回地図のマーカーをクリックするたびに、そのマーカー/場所では表示されていないplace_idが表示され、間違った場所のplace_idが表示されます。 – AndroidProgrammerThatWantsMe

+0

私はonMarkerClickを使用しています。私はplace_idを乾杯します。私はマップ内のすべてのマーカーをクリックしようとしましたが、トーストは同じplace_idを何度も繰り返し表示し続けます。 – AndroidProgrammerThatWantsMe

+0

https://www.youtube.com/watch?v=-0pmjblb_G8 – AndroidProgrammerThatWantsMe

関連する問題