본문 바로가기
Coding/Android

안드로이드 Volley 공공데이터 가져오기 (3)- 구글맵 설정

by 루민즈 2022. 5. 31.
반응형

공공데이터는 여러 가지 유형이 있지만 

그중 하나가 위치 정보를 제공하고 있습니다. 

여기서 쓰는 공공데이터는 수원 전기차 충전소에 관한 데이터인데요 

위치(위도 경도) 데이터를 제공하고 있습니다. 물론 모든 데이터가 위도 경도가 있는 건 아닙니다.

하나 다행히도 수원 전기차 충전소 데이터는 위도 경도가 있어서 구글맵에 마커 표시하는 게 수월해졌습니다. 

그럼 먼저 안드로이드에 구글맵을 설정해 봅시다. 

 

본 포스팅은 

1편 - 안드로이드 Volley 공공데이터 가져오기 (1) - 공공데이터 설정

2편 - 안드로이드 Volley 공공데이터 가져오기 (2)- Volley 설정 및 공공데이터 가져오기

의 내용이 이어집니다. 혹시 안보셨다면 참고해주시길 바랍니다. 

 

 

 

1. https://console.developers.google.com/apis/dashboard 접속하기 

구글에서 운영하는 구글맵 api를 제공하는 사이트입니다. 프로젝트 만들기를 클릭해주세요 

프로젝트 만들기

 

2. 프로젝트 이름을 설정하고 만들기를 눌러주세요 

프로젝트 이름은 아무거나 해줘도 상관없습니다. 

새 프로젝트

 

3. API 및 서비스 사용 설정을 클릭해주세요 

 

4. maps sdk for android를 검색해주시고 밑에 Maps SDK for android를 클릭해주세요 

Maps SDK for Android

 

5. 사용 클릭

 

6. 메뉴 -> API 및 서비스 -> 사용자 인증 정보를 클릭해주세요 

 

7. 사용자 인증 정보 만들기를 눌러주세요

 

8. API키를 눌러주세요 그럼 API 키가 생성이 됩니다. 

 

9. API키가 생성이 되었습니다. 이 키는 코드에서 써야 되므로 복사해주세요 

API키

10. API 키가 1개 생성이 되었네요 클릭해줍시다. 

 

11. 밑으로 스크롤을 내려주세요 그러면 제한사항이 나오는데 

 Android앱 그리고 패키지 이름은 자신의 안드로이드 패키지 파일 이름으로 해주세요 

 

13. cmd창을 열어주세요 실행 -> cmd를 입력해서 cmd를 실행해줍시다. 

그런 다음 

keytool -list -v -alias androiddebugkey -keystore%USERPROFILE%\.android\debug.keystore

이걸 복사해서 붙여 넣기 한 다음 엔터를 입력해주세요 

그러면 키 저장소 비밀번호 입력이  뜹니다. 여기서 android를 입력해주세요 

입력할 땐 보이지 않지만 입력되어지는 겁니다. 다 입력 후 엔터를 누르면 

인증서 지문 : 

                  SHA1: 

SHA1 : 이 부분을 복사해주세요 

그리고 다시 구글 클라우드 플랫폼에서 붙여 넣기를 해줍시다. 

 

 

14.  마지막으로 API 제한사항에서 키 제한을 눌러주고 

Maps SDK for Android 눌러주고 저장을 누릅니다.

 

이제 설정은 끝났습니다. 이젠 안드로이드 스튜디오에서 코드를 입력하여 구글맵을 띄어보도록 하겠습니다. 

 

 

 

 

15. 안드로이드 스튜디오에서 구글맵을 띄어 봅시다. 

제1편, 2편을 보고 오셨다면 그대로 그 프로젝트를 가지고 해도 되고 만약 아니면 

본인이 11번에서 설정한 패키지로 프로젝트를 지정해주세요 

 

매니패스트 파일에서 AndroidManifest.xml파일로 들어가 주세요 그다음 애플리케이션 태그 밑에 

<meta-data
    android:name="com.google.android.geo.API_KEY"
    android:value="API키"/>

를 입력해주세요 API 키는 아까 복사한 본인의 API 키를 입력해주세요 

 

16. 구글맵을 쓰기 위해선 라이브러리를 설치해야 됩니다. 

Tools -> SDK manager -> SDK Tools -> Google play services를 눌러 설치를 해줍시다. 

 

Google Play services 설치

17 build.gradle에 들어가서 dependencies에 

implementation 'com.google.android.gms:play-services-maps:18.0.2'
implementation 'com.google.android.gms:play-services-location:19.0.1'

를 입력하고 Sync Now를 클릭합니다. 

 

18. activity_main.xml 에서 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <fragment
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/map"
        tools:context=".MainActivity"
        android:name="com.google.android.gms.maps.SupportMapFragment"/>

</LinearLayout>

이렇게 입력해 줍시다. 

 

19. MainActivity.java 

 

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
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.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class MainActivity extends AppCompatActivity
                implements OnMapReadyCallback {

    private static RequestQueue requestQueue;
    private String URL = "http://apis.data.go.kr/3740000/suwonEvChrstn/getdatalist?serviceKey=본인의 인증키&numOfRows=30&pageNo=0&sortKey=chrstnType&filterKey=chrstnType&filterValues=DC%EC%BD%A4%EB%B3%B4&type=json";
    private Gson gson;
    private Example example;
    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        if(requestQueue == null){
            requestQueue = Volley.newRequestQueue(getApplicationContext());
        }

        Request();
    }

    public void Request(){
        StringRequest request  = new StringRequest(
                Request.Method.GET,
                URL,
                new Response.Listener<String>() {
                    @Override
                    public void onResponse(String response) {
                        Log.v("태그","리스폰"+response);
                        gson = new Gson();
                        example = gson.fromJson(response,Example.class);
                        Map();
                    }
                },
                new Response.ErrorListener() {
                    @Override
                    public void onErrorResponse(VolleyError error) {
                        Log.v("태그","에러"+error.getMessage());
                    }
                }) {
            @Override
            protected Map<String,String> getParams() throws AuthFailureError {
                Map<String,String> param = new HashMap<String,String>();
                return param;
            }
        };
        request.setShouldCache(false);
        requestQueue.add(request);
    }

    public void Map(){
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().
                findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    @Override
    public void onMapReady(final GoogleMap googleMap){
        mMap = googleMap;

        LatLng SOOWAN = new LatLng(Double.valueOf(example.getItems().get(0).getLatitude()),Double.valueOf(example.getItems().get(0).getLongitude()));
        MarkerOptions markerOptions = new MarkerOptions();
        markerOptions.position(SOOWAN);
        markerOptions.title("수원 전기차 충전소 1호");
        markerOptions.snippet("수원 전기차");
        mMap.addMarker(markerOptions);

        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(SOOWAN,10));
    }
}

 

20. 실행결과 

 

 

다음 포스팅은 공공데이터 좌표(위도, 경도)를 이용하여 다중 마커를 찍어봅시다.


Post

다음글 무직자 대출 알아보기 >