Nuke Olaf - Log Store

[Android] 안드로이드 - google map marker 검색 본문

Android

[Android] 안드로이드 - google map marker 검색

NukeOlaf 2020. 1. 15. 20:32

내 구글맵에서 모든 장소를 검색할 수 있게 하는것이 아니라, 내가 지정해놓은 장소들만 검색할 수 있게 하는 것이 좋을 것 같다는 생각이 들었다. 그래서 GeoCoder 로 주소를 가져와서 검색하는 것이 아니라, 내가 미리 하드코딩 해둔 마커들의 이름을 검색할 수 있게 하는 것이 좋을 것 같다는 생각이 들었다.

이 방법이 최선은 아닌것 같다. 더 좋은 방법이 있는지 찾아보고 싶은데 시간 관계상 이렇게 구현했다.

 

1. marker 들을 미리 추가해놓기

    HashMap<String, LatLng> shops = new HashMap<>();
    
    // 구글 맵에 업체에 관련된 markers 추가함
    public void addMarkers() {
        MarkerOptions markerOptions = new MarkerOptions();

        LatLng shop1 = new LatLng(37.566807, 126.992853);
        markerOptions
                .position(shop1)
                .title("태성볼트");
        map.addMarker(markerOptions);
        shops.put("태성볼트", shop1);

        LatLng shop2 = new LatLng(37.566889, 126.993245);
        markerOptions
                .position(shop2)
                .title("대덕금속");
        map.addMarker(markerOptions);
        shops.put("대덕금속", shop2);

        LatLng shop3 = new LatLng(37.571503, 126.993567);
        markerOptions
                .position(shop3)
                .title("영진재료사");
        map.addMarker(markerOptions);
        shops.put("영진재료사", shop3);

        LatLng shop4 = new LatLng(37.570748, 126.993135);
        markerOptions
                .position(shop4)
                .title("삼정사");
        map.addMarker(markerOptions);
        shops.put("삼정사", shop4);

        LatLng shop5 = new LatLng(37.572019, 126.992209);
        markerOptions
                .position(shop5)
                .title("아림주물");
        map.addMarker(markerOptions);
        shops.put("아림주물", shop5);

        LatLng shop6 = new LatLng(37.567230, 126.993630);
        markerOptions
                .position(shop6)
                .title("명진시보리");
        map.addMarker(markerOptions);
        shops.put("명진시보리", shop6);
    }

 

2. 검색하기 메서드 

shops 해쉬맵에서 검색한 key 값의 LatLng 을 가져와서 그 위치로 카메라를 이동시켜준다

    // 업체검색 메서드
    public void searchShop(String name) {
        LatLng latLng = shops.get(name);
        map.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        map.animateCamera(CameraUpdateFactory.zoomTo(20));
    }

 

3. 검색에 따른 결과 출력

// 구글맵 검색 하는 부분
        Button searchButton = findViewById(R.id.shop_button_search);
        searchButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // 검색창에서 텍스트를 가져온다
                String searchText = searchBox.getText().toString();

                if (shops.containsKey(searchText)) { // 검색한 업체가 등록되어있는 경우
                    searchShop(searchText); // 해당 업체를 검색한다

                }else  { // 검색한 업체가 등록되어 있지 않은 경우
                    // 다이얼로그를 띄워준다
                    AlertDialog.Builder builder = new AlertDialog.Builder(ShopActivity.this);
                    builder.setTitle("알림").setMessage("금속인에 등록되어있지 않은 업체입니다.");
                    AlertDialog alertDialog = builder.create();
                    alertDialog.show();
                }


            }
        });
Comments