- 네이버 맵 API를 이용해서 현재 위도 경도를 얻어오고, 위도경도를 주소로 변환하는 방법에 대해서 포스팅합니다.
- 네이버 맵 소스안에 다 있는 내용을 그대로 가져온거라서 필요없는 내용도 있습니다.
- 네이버 개발자센터에서 지도 API키를 발급받습니다.(구글맵은 키받기가 엄청 복잡한데..네이버는 간편하네요)
- public static final String API_KEY 에 발급받은 API키를 넣어주심됩니다.
- 네이버 지도 라이브러리 nmaps.jar를 iibs 폴더에 넣어줍니다.
- 주소는 동까지만 나오는데요.. 상세한 주소얻는 방법은 없나보네요?
----------------------------------------------------------------------------------------------
public class NaverMyLocation extends NMapActivity implements
OnMapStateChangeListener, OnCalloutOverlayListener {
// API-KEY
public static final String API_KEY = "159192585e12865f56dac5ec2e1ecb77";
// 네이버 맵 객체
NMapView mMapView = null;
// 맵 컨트롤러
NMapController mMapController = null;
// 맵을 추가할 레이아웃
LinearLayout MapContainer;
// 오버레이의 리소스를 제공하기 위한 객체
// NMapViewerResourceProvider mMapViewerResourceProvider = null;
// 오버레이 관리자
private NMapMyLocationOverlay mMyLocationOverlay;
private NMapLocationManager mMapLocationManager;
private NMapCompassManager mMapCompassManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// setContentView(R.layout.activity_course_01);
// 네이버 지도를 넣기 위한 LinearLayout 컴포넌트
// MapContainer = (LinearLayout) findViewById(R.id.MapContainer);
// 네이버 지도 객체 생성
mMapView = new NMapView(this);
// 지도 객체로부터 컨트롤러 추출
// mMapController = mMapView.getMapController();
// 네이버 지도 객체에 APIKEY 지정
mMapView.setApiKey(API_KEY);
// 생성된 네이버 지도 객체를 LinearLayout에 추가시킨다.
// MapContainer.addView(mMapView);
// 지도를 터치할 수 있도록 옵션 활성화
mMapView.setClickable(true);
// 확대/축소를 위한 줌 컨트롤러 표시 옵션 활성화
mMapView.setBuiltInZoomControls(true, null);
super.setMapDataProviderListener(onDataProviderListener);
// 지도에 대한 상태 변경 이벤트 연결
mMapView.setOnMapStateChangeListener(this);
}
@Override
public void onMapInitHandler(NMapView mapview, NMapError errorInfo) {
if (errorInfo == null) { // success
startMyLocation();//현재위치로 이동
// mMapController.setMapCenter(new NGeoPoint(126.978371,
// 37.5666091),
// 11);
} else { // fail
android.util.Log.e("NMAP",
"onMapInitHandler: error=" + errorInfo.toString());
}
}
@Override
public void onZoomLevelChange(NMapView mapview, int level) {
}
@Override
public void onMapCenterChange(NMapView mapview, NGeoPoint center) {
}
@Override
public void onAnimationStateChange(NMapView arg0, int animType,
int animState) {
}
@Override
public void onMapCenterChangeFine(NMapView arg0) {
}
@Override
public NMapCalloutOverlay onCreateCalloutOverlay(NMapOverlay arg0,
NMapOverlayItem arg1, Rect arg2) {
return null;
}
private void startMyLocation() {
mMapLocationManager = new NMapLocationManager(this);
mMapLocationManager
.setOnLocationChangeListener(onMyLocationChangeListener);
boolean isMyLocationEnabled = mMapLocationManager
.enableMyLocation(true);
if (!isMyLocationEnabled) {
Toast.makeText(
NaverMyLocation.this,
"Please enable a My Location source in system settings",
Toast.LENGTH_LONG).show();
Intent goToSettings = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(goToSettings);
finish();
}else{
}
//
// // compass manager
// mMapCompassManager = new NMapCompassManager(this);
//
// // create my location overlay
// mMyLocationOverlay = mOverlayManager.createMyLocationOverlay(
// mMapLocationManager, mMapCompassManager);
//
// if (mMyLocationOverlay != null) {
// if (!mOverlayManager.hasOverlay(mMyLocationOverlay)) {
// mOverlayManager.addOverlay(mMyLocationOverlay);
// }
//
// if (mMapLocationManager.isMyLocationEnabled()) {
//
// if (!mMapView.isAutoRotateEnabled()) {
// mMyLocationOverlay.setCompassHeadingVisible(true);
//
// mMapCompassManager.enableCompass();
//
// mMapView.setAutoRotateEnabled(true, false);
//
// MapContainer.requestLayout();
// } else {
// stopMyLocation();
// }
//
// mMapView.postInvalidate();
// } else {
// boolean isMyLocationEnabled = mMapLocationManager
// .enableMyLocation(true);
// if (!isMyLocationEnabled) {
// Toast.makeText(
// NaverMyLocation.this,
// "Please enable a My Location source in system settings",
// Toast.LENGTH_LONG).show();
//
// Intent goToSettings = new Intent(
// Settings.ACTION_LOCATION_SOURCE_SETTINGS);
// startActivity(goToSettings);
//
// return;
// }
// }
// }
}
private void stopMyLocation() {
if (mMyLocationOverlay != null) {
mMapLocationManager.disableMyLocation();
if (mMapView.isAutoRotateEnabled()) {
mMyLocationOverlay.setCompassHeadingVisible(false);
mMapCompassManager.disableCompass();
mMapView.setAutoRotateEnabled(false, false);
MapContainer.requestLayout();
}
}
}
private final NMapActivity.OnDataProviderListener onDataProviderListener = new NMapActivity.OnDataProviderListener() {
@Override
public void onReverseGeocoderResponse(NMapPlacemark placeMark, NMapError errInfo) {
if (errInfo != null) {
Log.e("myLog", "Failed to findPlacemarkAtLocation: error=" + errInfo.toString());
Toast.makeText(NaverMyLocation.this, errInfo.toString(), Toast.LENGTH_LONG).show();
return;
}else{
Toast.makeText(NaverMyLocation.this, placeMark.toString(), Toast.LENGTH_LONG).show();
}
}
};
private final NMapLocationManager.OnLocationChangeListener onMyLocationChangeListener = new NMapLocationManager.OnLocationChangeListener() {
@Override
public boolean onLocationChanged(NMapLocationManager locationManager,
NGeoPoint myLocation) {
// if (mMapController != null) {
// mMapController.animateTo(myLocation);
// }
Log.d("myLog", "myLocation lat " + myLocation.getLatitude());
Log.d("myLog", "myLocation lng " + myLocation.getLongitude());
findPlacemarkAtLocation(myLocation.getLongitude(), myLocation.getLatitude());
//위도경도를 주소로 변환
return true;
}
@Override
public void onLocationUpdateTimeout(NMapLocationManager locationManager) {
// stop location updating
// Runnable runnable = new Runnable() {
// public void run() {
// stopMyLocation();
// }
// };
// runnable.run();
Toast.makeText(NaverMyLocation.this,
"Your current location is temporarily unavailable.",
Toast.LENGTH_LONG).show();
}
@Override
public void onLocationUnavailableArea(
NMapLocationManager locationManager, NGeoPoint myLocation) {
Toast.makeText(NaverMyLocation.this,
"Your current location is unavailable area.",
Toast.LENGTH_LONG).show();
stopMyLocation();
}
};
}
----------------------------------------------------------------------------------------------
'안드로이드' 카테고리의 다른 글
안드로이드 네이버 밴드 연동 (0) | 2013.08.22 |
---|---|
안드로이드 페이스북 연동 (0) | 2013.08.22 |
AlertDialog.Builder 안에 텍스트 사이즈 조절하기 (0) | 2013.04.26 |
R.array 를 스트링 배열로 변환 (0) | 2013.04.18 |
Spinner 안에 텍스트 색상지정/정렬방법 (0) | 2013.04.10 |