마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

위도 경도 배열을 가지고 polyline그려주기

0 추천
안녕하세요 선배님들 가름침으로 꾸벅 json을 이용하여 위도경도 배열을 추출하는데 성공하였습니다 ~

아래     public void onCompleted(List<Lalo> laloList) 에  
Log.d("wwww", latLng.toString()); 의 latLng.toString() 가 (위도,경도)배열로 표시가 됩니다.

이 위도 경도 배열을 가지고    public void onMapReady(GoogleMap googleMap)   구문의
coordinates 으로 변환하여 polyline을 그어주려고 합니다.

위도 경도를 추출한 latLng.toString() 를 coordinates 로 변환하여 위도 경도 배열이 표시가 되게 하려면 어떻게 하여할가요.

coordinats 에 latLng.toString()를 바로 집어 넣어주니 빨간 오류글씨가 표시됩니다 .

감사합니다 ~

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback , GetLocation1.Listener{

    private List<Marker> mMarkers = new ArrayList<>();
    private Polyline mPolyline;

    private GoogleMap mMap;
    private ActivityMapsBinding binding;

    // below are the latitude and longitude of 4 different locations.
    LatLng TamWorth = new LatLng(-31.083332, 150.916672);
    LatLng NewCastle = new LatLng(-32.916668, 151.750000);
    LatLng Brisbane = new LatLng(-27.470125, 153.021072);

 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        GetLocation1 getLocation1 = new GetLocation1();
        getLocation1.setListener(this);
        getLocation1.execute("https://json 주소");

 

        binding = ActivityMapsBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());

        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

 

    public void onMapReady(GoogleMap googleMap) {
        PolylineOptions polylineOptions = new PolylineOptions().
                geodesic(true).
                color(Color.BLUE).
                width(10);

        for (int i = 0; i < coordinates.size(); i++)
            polylineOptions.add(coordinates.get(i));

        mMap.addPolyline(polylineOptions);
    }

 

    @Override
    public void onCompleted(List<Lalo> laloList) {

 

        for (Lalo lalo : laloList) {

            String a = lalo.getLati();
            String b = lalo.getLongt();

            Log.d("www", a);

            LatLng latLng = new LatLng(Double.parseDouble(a), Double.parseDouble(b));

            Log.d("wwww", latLng.toString());
           // mMap.addPolyline((new PolylineOptions()).add(new latLng.toString()).
           // latLng = new LatLng("a" , "b");

 

        }
        }

 

    @Override
    public void onError(Exception e) {

    }
}
오필리아 (750 포인트) 님이 2022년 12월 5일 질문

1개의 답변

+1 추천
 
채택된 답변

GetLocation1과 GoogleMap 모두 비동기로 동작하므로, 어느 것이 먼저 완료될지 알 수 없을 것 같습니다. GoogleMap이 로딩되고 나면 GetLocation1을 호출하는 것이 안전하게 좌표데이터를 가져올 수 있을 것 같이 보입니다. 두개의 데이터를 동시에 호출하고 동기화 시킬 수도 있지만, 이렇게 하려면 RxJava나 Coroutine같은 도구의 도움이 좀 필요해 보입니다.

public void onMapReady(GoogleMap googleMap) {
        getLcation1.execute("https://json 주소");
}

//onCompleted가 List<Lalo> 대신에 List<LatLng>을 파라미터로 받을 수 있도록 하는게 더 간단해 보임.
@Override
public void onCompleted(List<Lalo> laloList) {
     List<LatLng> latLngs = new ArrayList<>();
     for (Lalo lalo : laloList) {
            String a = lalo.getLati();
            String b = lalo.getLongt();
            LatLng latLng = new LatLng(Double.parseDouble(a), Double.parseDouble(b));
            latLngs(latLng);
     }

    drawPolyLines(latLngs);
}

private void drawPolyLines(List<LatLng> latLngs) {  
    PolylineOptions polylineOptions = new PolylineOptions().
                geodesic(true).
                color(Color.BLUE).
                width(10);

   for (LatLng latLng : latLngs) {
         polylineOptions.add(latLng);
   }
   
   mMap.addPolyline(polylineOptions);
}

 

spark (223,680 포인트) 님이 2022년 12월 5일 답변
오필리아님이 2022년 12월 7일 채택됨
spark 님 덕분에 완성하였습니다 ~
어떤 감사의 인사를 드려야 할지 모르겠습니다.~
★ ° .감사합니다~~☆  . * ● ¸
...