Android

[Android] 블로그 이전 - Naver Map API 사용해보기 (2) Geocoding

pearhyunjin 2024. 6. 10. 09:28

 

2022 - 2023년도에 사용하던 블로그 내용을 이전해 온 기록입니다.

해당 블로그는 링크로 첨부하였으며

글 내용은 동일합니다.


 

지난 게시글에서 Naver Map API를 사용해서 지도를 가져오고, 권한을 요청하고, 현재위치를 나타내는 것까지 실행해보았다.

이번 글에서는 Geocoding을 이용해 주소를 위도, 경도로 바꾸고 해당 위치에 마커를 찍어보기로 한다.

 

+) 이전 게시글 참고 (NaverMap API 사용해보기)

https://baehj.tistory.com/105

 

[Android] Naver Map API 사용해보기 (1)

안드로이드에서 지도를 구현하기 위해 Naver Map API를 사용해보았다. 우선, Naver Map API를 사용하기 위해서 네이버 클라우드 플랫폼에 접속하고 회원가입을 진행해야한다. 이전에 Naver API를 사용하

baehj.tistory.com

 

 

 

MainActivity.java

public class MainActivity extends AppCompatActivity implements OnMapReadyCallback {
    private NaverMap naverMap;
    private FusedLocationSource locationSource;
    private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000;

    private static final String[] PERMISSIONS = {
            Manifest.permission.ACCESS_FINE_LOCATION,
            Manifest.permission.ACCESS_COARSE_LOCATION
    };

    // 지오코딩
	private static final String REVERSE_GEOCODING_URL = "";
    private static final String CLIENT_ID = "";
    private static final String CLIENT_SECRET = "";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                .permitDiskReads()
                .permitDiskWrites()
                .permitNetwork().build());

        FragmentManager fragmentManager = getSupportFragmentManager();
        MapFragment mapFragment = (MapFragment)fragmentManager.findFragmentById(R.id.mapFragment);
        if (mapFragment == null) {
            fragmentManager.beginTransaction().add(R.id.mapFragment, mapFragment).commit();
        }
        mapFragment.getMapAsync(this);
        locationSource = new FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE);
    }

    @Override
    public void onMapReady(@NonNull NaverMap naverMap) {
        this.naverMap = naverMap;

        // 현재위치
        naverMap.setLocationSource(locationSource);
        // 권한확인
        ActivityCompat.requestPermissions(this, PERMISSIONS, LOCATION_PERMISSION_REQUEST_CODE);

        getDBStoreAddr();
//        Geocoding();
        // 마커표시
//        Marker marker = new Marker();
//        marker.setPosition(new LatLng(37.4967449, 127.030570));
//        marker.setPosition(new LatLng(indexFirst, inderLast));
//        marker.setMap(naverMap);

    }

    // 권한확인
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if (locationSource.onRequestPermissionsResult(requestCode, permissions, grantResults)) {
            if (!locationSource.isActivated()) {
                naverMap.setLocationTrackingMode(LocationTrackingMode.None);
                return;
            }
            else {
                naverMap.setLocationTrackingMode(LocationTrackingMode.Follow);
            }
        }
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

    public void getDBStoreAddr() {
        Response.Listener<String> responseListener = new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                try {
                    JSONObject jsonObject = new JSONObject(response);
                    Log.d("addr", String.valueOf(jsonObject));

                    boolean success = jsonObject.getBoolean("success");
                    if (success) {
                        int length = jsonObject.length();
                        for (int i = 0; i <= length; i++) {
                            String addr = jsonObject.getString(String.valueOf(i));
                            Log.d("addr", String.valueOf(jsonObject.length()));
                            Log.d("addr", addr);

                            Geocoding(addr);
                        }
                    } else {
                        Toast.makeText(getApplicationContext(), "인터넷 연결을 확인해주세요", Toast.LENGTH_SHORT).show();
                        return;
                    }
            } catch (JSONException e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "인터넷 연결을 확인해주세요.", Toast.LENGTH_SHORT).show();
                    return;
                } catch (Exception e) {
                    e.printStackTrace();
                    Toast.makeText(getApplicationContext(), "인터넷 연결을 확인해주세요.", Toast.LENGTH_SHORT).show();
                    return;
                }
            }
        };

        int num = 0;
        MarkerRequest markerRequest = new MarkerRequest(num, responseListener);
        RequestQueue queue = Volley.newRequestQueue(MainActivity.this);
        queue.add(markerRequest);
    }

    public void Geocoding(String addrInfo) {
        try {
            BufferedReader bufferedReader;
            StringBuilder stringBuilder = new StringBuilder();
//            addr = "경기도 하남시 덕풍서로 65";
//            String query = GEOCODING_URL + "?query=" + URLEncoder.encode(addr, "UTF-8");
            String query = GEOCODING_URL + "?query=" + URLEncoder.encode(addrInfo, "UTF-8") + "&X-NCP-APIGW-API-KEY-ID=" + CLIENT_ID + "&X-NCP-APIGW-API-KEY=" + CLIENT_SECRET;
            Log.d("ck", "query : " + query);
            URL url = new URL(query);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            if (conn != null) {
                conn.setConnectTimeout(5000);
                conn.setReadTimeout(5000);
                // 전송방식
                conn.setRequestMethod("GET");
//                conn.setRequestProperty("X-NCP-APIGW-API-KEY_ID", CLIENT_ID);
//                conn.setRequestProperty("X-NCP-APIGW-API-KEY", CLIENT_SECRET);
                // 데이터를 읽어오기로 설정
                conn.setDoInput(true);

                int responseCode = conn.getResponseCode();

                if (responseCode == 200) {
                    bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                } else {
                    bufferedReader = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
                }

                String line = null;
                while ((line = bufferedReader.readLine()) != null) {
                    stringBuilder.append(line + "\n");
                }

                int indexFirst;
                int indexLast;

                indexFirst = stringBuilder.indexOf("\"x\":\"");
                indexLast = stringBuilder.indexOf("\",\"y\":");
                Double x = Double.valueOf(stringBuilder.substring(indexFirst + 5, indexLast));
                Log.d("ck", "x : " + x);

                indexFirst = stringBuilder.indexOf("\"y\":\"");
                indexLast = stringBuilder.indexOf("\",\"distance\":");
                Double y = Double.valueOf(stringBuilder.substring(indexFirst + 5, indexLast));
                Log.d("ck", "y : " + y);

                Marker marker = new Marker();
//        marker.setPosition(new LatLng(37.4967449, 127.030570));
                marker.setPosition(new LatLng(y, x));
                marker.setMap(naverMap);

                bufferedReader.close();
                conn.disconnect();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

 

 


 

https://baehj.tistory.com/106