Android에서 Google Map을 사용하는 방법 요약
15863 단어 안드로이드GoogleMapGoogleMapsAPI
개요
요 전날 Yahoo!Japan의 해커슨 에서 GoogleMap을 사용한 Android 앱을 만들었으므로, 그 때 조사한 Map의 사용법을 정리했습니다.
화면에 지도 표시
지도를 표시하기만 하면 AndroidStudio의 New Project를 선택할 때 Google Maps Activity를 선택하면 표시할 수 있으므로 하나하나 포인트만 설명합니다.
GoogleMap Api 키 가져오기
Map을 사용하려면 Api 키가 필요하므로 여기에서 키를 만들고 res/values/google_maps_api.xml (별로 google_maps_api.xml이라는 이름이 필요하지 않음)에 씁니다.
google_maps_api.xml<resources>
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">取得したキー</string>
</resources>
AndroidManifest에 Permission 및 키 meta-data 추가
AndroidManifest.xml에 아래의 Permission과 이전 키를 추가하여 Map을 사용할 수 있도록하십시오.
AndroidManifest.xml<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application (略)>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<!-- 中略 -->
</application>
build.gradle에 gms에 dependency 추가
build.gradle compile 'com.google.android.gms:play-services:10.0.1'
레이아웃에 지도 추가
매우 간단. SupportMapFragment를 추가하기만 하면 됩니다.
activity_main.xml<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-au
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android="com.google.android.gms.maps.SupportMapFragment
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraZoom="15"/>
여기까지 하면, 화면에 맵이 표시될 것.
덧붙여서 이런 느낌으로 표시될 것 (map:cameraZoom="15"의 경우).
지도 사용법
Map은 GoogleMap 인스턴스를 통해 작업할 수 있습니다.
GoogleMap 인스턴스는 SupportMapFragment의 getMapAsync에서 onMapReadyCallback을 통해 다음과 같이 얻을 수 있습니다.
private void createMap() {
// Obtain the SupportMapFragment and get fied when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
Log.i(TAG, "Map created!");
mMap = googleMap;
(以下略)
}
섬세한 사용법은 공식 문서
내 위치를 지도에 표시
표준으로 제공되는 방법과 마커를 직접 설정하는 방법의 두 가지가 있습니다.
표준으로 제공되는 방법
일행 하기를 추기한다. 이 방법의 문제점은 표시가 표준의 푸른 원으로, 아이콘의 커스터마이즈를 할 수 없다는 것.
mMap.setMyLocationEnabled(true);
스스로 마커를 놓다
자신의 위치에 마커를 놓고 수시로 업데이트하여 표시합니다. 이 방법을 사용하면 마커 아이콘을 직접 결정할 수 있습니다.
@Override
public void onMapReady(GoogleMap googleMap) {
(中略)
mApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(mConnectionCal
.addOnConnectionFailedListener(mConnecedListener)
.build();
mApiClient.connect();
}
private GoogleApiClient.ConnectionCallbacks mConnectionCallback = new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle le) {
final long INTERVAL_MILLIS = 1000;//更新の頻度。ここでは1秒おきに更新する
LocationRequest request = new tionRequest();
request.setInterval(INTERVAL_MILLIS);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCU);
LocationServices.FusedLocationApi.requestLocationUpdatApiClient, request, mLocationListener);
}
@Override
public void onConnectionSuspended(int i) {
}
};
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
LatLng position = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
//zoom to current position:
if (mCurrentLocationMarker == null) {
markerOptions.position(position);
markerOptions.title("タイトル");
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.好きなアイコン));
mCurrentLocationMarker = mMap.addMarker(markerOptions);
} else {
mCurrentLocationMarker.setPosition(position);
}
}
};
또, 표시하고 있는 마커를 지우고 싶으면,
mCurrentLocationMarker.remove();
에서 한발. Map에 addMarker한 것을 기억해 두는 것이 포인트.
또한 addMarker는 자신의 위치뿐만 아니라 좌표 (위도 경도)를 알면 어디에나 설치할 수 있으므로 목적지에 마커를 설치하기도 쉽습니다.
지도에 선을 그립니다.
GoogleMapApi 등으로 검색한 경로를 지도상에 표시하고 싶을 때, 2점(혹은 그 이상)의 위도 경도를 알면 쉽게 선을 그릴 수 있습니다.
private void drawRoute(List<LatLng> route) {
PolylineOptions options = new lineOptions();
for (LatLng latLng : route) {
options.add(latLng);
}
options.color(色);
options.width(幅);
mMap.addPolyline(options);
}
이런 느낌
카메라 배율, 위치 변경
표시 배율, 위치를 변경하려면 CameraPosition을 다시 설정하면 OK.
아래에서는 북위 50도, 동경 50도 (카자흐스탄 서쪽 당), Zoom 레벨을 10으로 이동합니다.
CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(50.0, 50.0)).zoom(10).build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
사이고에게
많이 썼기 때문에 보충이 있으면 나중에 추가합니다.
Reference
이 문제에 관하여(Android에서 Google Map을 사용하는 방법 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuishihara/items/8955582de6fa639eb504
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
지도를 표시하기만 하면 AndroidStudio의 New Project를 선택할 때 Google Maps Activity를 선택하면 표시할 수 있으므로 하나하나 포인트만 설명합니다.
GoogleMap Api 키 가져오기
Map을 사용하려면 Api 키가 필요하므로 여기에서 키를 만들고 res/values/google_maps_api.xml (별로 google_maps_api.xml이라는 이름이 필요하지 않음)에 씁니다.
google_maps_api.xml
<resources>
<string name="google_maps_key" templateMergeStrategy="preserve" translatable="false">取得したキー</string>
</resources>
AndroidManifest에 Permission 및 키 meta-data 추가
AndroidManifest.xml에 아래의 Permission과 이전 키를 추가하여 Map을 사용할 수 있도록하십시오.
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application (略)>
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
<!-- 中略 -->
</application>
build.gradle에 gms에 dependency 추가
build.gradle
compile 'com.google.android.gms:play-services:10.0.1'
레이아웃에 지도 추가
매우 간단. SupportMapFragment를 추가하기만 하면 됩니다.
activity_main.xml
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:map="http://schemas.android.com/apk/res-au
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/map"
android="com.google.android.gms.maps.SupportMapFragment
android:layout_width="match_parent"
android:layout_height="match_parent"
map:cameraZoom="15"/>
여기까지 하면, 화면에 맵이 표시될 것.
덧붙여서 이런 느낌으로 표시될 것 (map:cameraZoom="15"의 경우).
지도 사용법
Map은 GoogleMap 인스턴스를 통해 작업할 수 있습니다.
GoogleMap 인스턴스는 SupportMapFragment의 getMapAsync에서 onMapReadyCallback을 통해 다음과 같이 얻을 수 있습니다.
private void createMap() {
// Obtain the SupportMapFragment and get fied when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
Log.i(TAG, "Map created!");
mMap = googleMap;
(以下略)
}
섬세한 사용법은 공식 문서
내 위치를 지도에 표시
표준으로 제공되는 방법과 마커를 직접 설정하는 방법의 두 가지가 있습니다.
표준으로 제공되는 방법
일행 하기를 추기한다. 이 방법의 문제점은 표시가 표준의 푸른 원으로, 아이콘의 커스터마이즈를 할 수 없다는 것.
mMap.setMyLocationEnabled(true);
스스로 마커를 놓다
자신의 위치에 마커를 놓고 수시로 업데이트하여 표시합니다. 이 방법을 사용하면 마커 아이콘을 직접 결정할 수 있습니다.
@Override
public void onMapReady(GoogleMap googleMap) {
(中略)
mApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(mConnectionCal
.addOnConnectionFailedListener(mConnecedListener)
.build();
mApiClient.connect();
}
private GoogleApiClient.ConnectionCallbacks mConnectionCallback = new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle le) {
final long INTERVAL_MILLIS = 1000;//更新の頻度。ここでは1秒おきに更新する
LocationRequest request = new tionRequest();
request.setInterval(INTERVAL_MILLIS);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCU);
LocationServices.FusedLocationApi.requestLocationUpdatApiClient, request, mLocationListener);
}
@Override
public void onConnectionSuspended(int i) {
}
};
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
LatLng position = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
//zoom to current position:
if (mCurrentLocationMarker == null) {
markerOptions.position(position);
markerOptions.title("タイトル");
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.好きなアイコン));
mCurrentLocationMarker = mMap.addMarker(markerOptions);
} else {
mCurrentLocationMarker.setPosition(position);
}
}
};
또, 표시하고 있는 마커를 지우고 싶으면,
mCurrentLocationMarker.remove();
에서 한발. Map에 addMarker한 것을 기억해 두는 것이 포인트.
또한 addMarker는 자신의 위치뿐만 아니라 좌표 (위도 경도)를 알면 어디에나 설치할 수 있으므로 목적지에 마커를 설치하기도 쉽습니다.
지도에 선을 그립니다.
GoogleMapApi 등으로 검색한 경로를 지도상에 표시하고 싶을 때, 2점(혹은 그 이상)의 위도 경도를 알면 쉽게 선을 그릴 수 있습니다.
private void drawRoute(List<LatLng> route) {
PolylineOptions options = new lineOptions();
for (LatLng latLng : route) {
options.add(latLng);
}
options.color(色);
options.width(幅);
mMap.addPolyline(options);
}
이런 느낌
카메라 배율, 위치 변경
표시 배율, 위치를 변경하려면 CameraPosition을 다시 설정하면 OK.
아래에서는 북위 50도, 동경 50도 (카자흐스탄 서쪽 당), Zoom 레벨을 10으로 이동합니다.
CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(50.0, 50.0)).zoom(10).build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
사이고에게
많이 썼기 때문에 보충이 있으면 나중에 추가합니다.
Reference
이 문제에 관하여(Android에서 Google Map을 사용하는 방법 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuishihara/items/8955582de6fa639eb504
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
private void createMap() {
// Obtain the SupportMapFragment and get fied when the map is ready to be used.
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
Log.i(TAG, "Map created!");
mMap = googleMap;
(以下略)
}
mMap.setMyLocationEnabled(true);
@Override
public void onMapReady(GoogleMap googleMap) {
(中略)
mApiClient = new GoogleApiClient.Builder(this)
.addApi(LocationServices.API)
.addConnectionCallbacks(mConnectionCal
.addOnConnectionFailedListener(mConnecedListener)
.build();
mApiClient.connect();
}
private GoogleApiClient.ConnectionCallbacks mConnectionCallback = new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnected(@Nullable Bundle le) {
final long INTERVAL_MILLIS = 1000;//更新の頻度。ここでは1秒おきに更新する
LocationRequest request = new tionRequest();
request.setInterval(INTERVAL_MILLIS);
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCU);
LocationServices.FusedLocationApi.requestLocationUpdatApiClient, request, mLocationListener);
}
@Override
public void onConnectionSuspended(int i) {
}
};
private LocationListener mLocationListener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
LatLng position = new LatLng(location.getLatitude(), location.getLongitude());
MarkerOptions markerOptions = new MarkerOptions();
//zoom to current position:
if (mCurrentLocationMarker == null) {
markerOptions.position(position);
markerOptions.title("タイトル");
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.mipmap.好きなアイコン));
mCurrentLocationMarker = mMap.addMarker(markerOptions);
} else {
mCurrentLocationMarker.setPosition(position);
}
}
};
mCurrentLocationMarker.remove();
private void drawRoute(List<LatLng> route) {
PolylineOptions options = new lineOptions();
for (LatLng latLng : route) {
options.add(latLng);
}
options.color(色);
options.width(幅);
mMap.addPolyline(options);
}
CameraPosition cameraPosition = new CameraPosition.Builder().target(new LatLng(50.0, 50.0)).zoom(10).build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));
많이 썼기 때문에 보충이 있으면 나중에 추가합니다.
Reference
이 문제에 관하여(Android에서 Google Map을 사용하는 방법 요약), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuishihara/items/8955582de6fa639eb504텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)