Please Enable JavaScript!
Gon[ Enable JavaScript ]

안드로이드(Android) Google Map 버전2 에서 PolyLine 이용해 라인,마크 그리기

 

환경 : Eclipse Mars, Android 4.2.2

 

이번예제는 구글맵 버전 2에서 PolyLine 클래스를 이용해 라인과 마커를 추가해 보도록 하겠습니다. 이 예제는 맵에 경로를 표시하는 아주 유용한 샘플입니다. PolyLine 에 리스트를 넘기게 되면 자동으로 그려지게 되므로 편리하게 이용가능합니다.

 

안드로이드(Android) Google Map 버전2 에서 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();
	}
}
Posted by 녹두장군

댓글을 달아 주세요