2017-02-05 2 views
0

상점 분기의 다양한 경도와 위도가 포함 된 JSON 배열을 가져 왔습니다.현재 위치에서 가장 가까운 마커 가져 오기 (Android, Google지도)

private class Markers { 
    public float latitude; 
    public float longitude; 
} 

지금 내 현재 위치를 검색 할 수 있어요 Google지도 API v2를 사용하여 좌표 :

LatLng latLng = new LatLng(location.getLatitude(), location.getLongitude()); 
    MarkerOptions markerOptions = new MarkerOptions(); 
    markerOptions.position(latLng); 
    markerOptions.title("Current Location"); 
    markerOptions.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_MAGENTA)); 
    mCurrLocationMarker = mMap.addMarker(markerOptions); 

를이 내 Markers 클래스

 @Override 
     protected void onPostExecute(Object o) { 
      super.onPostExecute(o); 
      try { 
       Intent mapsIntent = getIntent(); 
       String jSonArray = mapsIntent.getStringExtra("jsonArray"); 
       jsonArray = new JSONArray(jSonArray); 

       for(int i = 0; i < jsonArray.length(); i++) { 
        Markers branch = new Markers(); 
        branch.latitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("latitude")); 
        branch.longitude = Float.parseFloat(jsonArray.getJSONObject(i).getString("longitude")); 

        marker.add(branch); 
       } 

      } catch (Exception ex) { 
       Log.d("Error", ex.toString()); 
      } 
     } 

이다 : 나는 목록 내부를 배치 이제는 매장 지점 위치 목록과 내 현재 위치 목록이있는 경우 궁금합니다. 현재 위치에서 가장 가까운 지점을 가져 와서 마커를 배치하는 방법은 무엇입니까? 나는 내가 본 몇몇 구현을 이해하지 못한다. 그래서 누군가 이걸 어떻게 달성하는지 가르쳐 준다면 큰 도움이 될 것이다. 건배!

답변

0

한 가지 방법은 마커를 정렬하고 정렬 된 배열의 첫 번째 요소를 사용하는 것입니다 :

Collections.sort(marker, new Comparator<Markers>() { 

    @Override 
    public int compare(Markers a, Markers b) { 
     Location locationA = new Location("point A");  
     locationA.setLatitude(a.latitude); 
     locationA.setLongitude(a.longitude); 
     Location locationB = new Location("point B"); 
     locationB.setLatitude(b.latitude); 
     locationB.setLongitude(b.longitude); 
     float distanceOne = location.distanceTo(locationA); 
     float distanceTwo = location.distanceTo(locationB); 
     return Float.compare(distanceOne, distanceTwo); 
    } 
} 

그런 다음 당신은 당신의 현재 위치까지의 거리에 따라 마커를 분류했다. 그런 다음 marker-Array의 첫 번째 요소를 사용하여 mMap 인스턴스에 추가합니다.

+0

내 for 루프를 onPostExecute 메서드에 넣은 다음이 작업을 수행합니까? 나는 이것에 대해 약 1 시간 동안 일해 왔으며 여전히 null 값을 반환합니다 ... – Paradigm

+0

for-each stuff, yes. null 값은 어디에서 얻습니까? – Boni2k

+0

글쎄, 그 문제 자체가 정렬에 있지 않았습니다 ... 내 위치 목록에서 null 값을 얻었습니다. 답변을 주셔서 감사합니다. 관심이 있다면 여기 내 다른 질문 : [link] (http://stackoverflow.com/questions/42055198/arraylist-element-suddenly-becomes-null) – Paradigm

관련 문제