안드로이드(Android) Google Map 버전2 에서 PolyLine 이용해 라인,마크 그리기 |
환경 : Eclipse Mars, Android 4.2.2 |
이번예제는 구글맵 버전 2에서 PolyLine 클래스를 이용해 라인과 마커를 추가해 보도록 하겠습니다. 이 예제는 맵에 경로를 표시하는 아주 유용한 샘플입니다. PolyLine 에 리스트를 넘기게 되면 자동으로 그려지게 되므로 편리하게 이용가능합니다.
▶ 구글 맵을 이용하기 위해 우선 퍼미션을 설정합니다. 이전에도 많이 언급을 하였지만 처음 이글을 접하시면 이부분을 빼 먹을수 있기 때문에 참고로 추가 하도록 하겠습니다.
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
▶ 아래 예제는 맵에 클릭을 하게 되면 마커와 이전에 클릭한 곳과 연결해서 라인을 그리게 됩니다. 그리고 맵을 길게 누르게 되면 이전에 설정한 라인들이 다 사라지게 하는 기능입니다. 먼저 맵에 지도를 클릭할 때 마다 라인이 그려지는 부분에 대해서 이야기 하겠습니다.
클래스에 OnMapClickListener 상속받아야 합니다. 상속받게 되면 필수구현함수인 onMapClick() 구현해야 되는데 이곳에 맵을 클릭하면 마커와 라인이 그려지도록 소스가 들어가게 됩니다. 함수에 인수로 넘어온 방위로 addMarker() 함수를 사용해 마커를 표시합니다. 그리고 라인은 현재까지 저장된 방위 리스트인 arrayPoints 객체를 넘기게 되면 자동으로 라인이 그려집니다.
@Override public void onMapClick(LatLng latLng) { //add marker MarkerOptions marker=new MarkerOptions(); marker.position(latLng); mGoogleMap.addMarker(marker); // 맵셋팅 polylineOptions = new PolylineOptions(); polylineOptions.color(Color.RED); polylineOptions.width(5); arrayPoints.add(latLng); polylineOptions.addAll(arrayPoints); mGoogleMap.addPolyline(polylineOptions); }
▶ 다음은 맵에 마우스를 오래클릭하게 되면 이전에 설정한 맵에 마커와 라인을 없애는 함수 입니다. 맵에 오래도록 클릭하면 발생하는 이벤트를 캡쳐하기 위해 OnMapLongClickListener 상속받습니다. 그리고 필수 함수인 OnMapLong() 를 구현합니다. GoogleMap 에 clear() 함수로 표시했던 것들을 모두 삭제합니다.
@Override public void onMapLongClick(LatLng arg0) { mGoogleMap.clear(); arrayPoints.clear(); }
▶ 메인 activity 의 전체 레이아웃 xml 입니다.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#fff" android:orientation="vertical" > <fragment android:id="@+id/map" android:name="com.example.GoogleMapVersion2.Fragment" class="com.google.android.gms.maps.SupportMapFragment" android:layout_width="match_parent" android:layout_height="match_parent" > </fragment> </RelativeLayout>
▶ 메인 activity 의 전체 소스입니다.
import java.util.ArrayList; import android.graphics.Color; import android.os.Bundle; import android.support.v4.app.FragmentActivity; import com.google.android.gms.common.GooglePlayServicesUtil; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.GoogleMap.OnMapClickListener; import com.google.android.gms.maps.GoogleMap.OnMapLongClickListener; import com.google.android.gms.maps.MapsInitializer; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.MarkerOptions; import com.google.android.gms.maps.model.PolylineOptions; public class DrawPolyLineActivity extends FragmentActivity implements OnMapClickListener,OnMapLongClickListener { GoogleMap mGoogleMap; private PolylineOptions polylineOptions; private ArrayList<LatLng> arrayPoints; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // BitmapDescriptorFactory 생성하기 위한 소스 MapsInitializer.initialize(getApplicationContext()); mGoogleMap = ((SupportMapFragment) getSupportFragmentManager() .findFragmentById(R.id.map)).getMap(); mGoogleMap.setMyLocationEnabled(true); mGoogleMap.setOnMapClickListener(this); mGoogleMap.setOnMapLongClickListener(this); this.init(); } /** * 초기화 * * @author gon 2014. 2. 16. */ private void init() { String coordinates[] = { "37.517180", "127.041268" }; double lat = Double.parseDouble(coordinates[0]); double lng = Double.parseDouble(coordinates[1]); LatLng position = new LatLng(lat, lng); GooglePlayServicesUtil.isGooglePlayServicesAvailable( DrawPolyLineActivity.this); // 맵 위치이동. mGoogleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(position, 15)); arrayPoints = new ArrayList<LatLng>(); } @Override public void onMapClick(LatLng latLng) { //add marker MarkerOptions marker=new MarkerOptions(); marker.position(latLng); mGoogleMap.addMarker(marker); // 맵셋팅 polylineOptions = new PolylineOptions(); polylineOptions.color(Color.RED); polylineOptions.width(5); arrayPoints.add(latLng); polylineOptions.addAll(arrayPoints); mGoogleMap.addPolyline(polylineOptions); } @Override public void onMapLongClick(LatLng arg0) { mGoogleMap.clear(); arrayPoints.clear(); } }
'안드로이드 개발' 카테고리의 다른 글
안드로이드(Android) Thread 를 이용해 로딩페이지 만들기 (2) | 2015.02.23 |
---|---|
안드로이드(Android) GPS LocationListener 이용해서 도시이름 가져오기 (0) | 2015.02.12 |
안드로이드(Android) PopupWindow 위젯을 이용해 팝업창 만들기 (5) | 2015.02.08 |
안드로이드(Android) 카메라, 갤러리 호출후 이미지 잘래내서 화면에 표시 (12) | 2015.02.05 |
안드로이드(Android) Sdcard 미디어 파일 읽어 MP3 실행하기 (0) | 2015.01.29 |
안드로이드(Android) MediaPlayer 이용해 raw 폴더의 MP3 듣기 (0) | 2015.01.26 |
안드로이드(Android) 행열(Matrix) 클래스의 postConcat() 함수이용해 거울이미지구현 (0) | 2015.01.25 |
안드로이드(Android) 비트맵 이미지를 다양한 방법으로 변형하는 예제 (0) | 2015.01.19 |