본문 바로가기
Unity/Unity_API

[Unity] VWorld API를 사용하여 지도 띄우기

by Kyoung2 2022. 12. 23.
반응형

시스템을 구현하다 보면 지도를 호출하여 화면에 증강시켜야할 때가 있다.

간단하게 지도를 호출하는 방법과 지도 컨트롤에 대한 내용을 구현해보려고 한다.

 

앞서 여러가지 지도 호출 API를 사용했다. 구글, 네이버  Static Map 호출을 통해 지도를 증강시키는 예제를 참고하여 

포스팅하려고 한다.

 

참고 URL

네이버 API 활용기 :  https://tkablog.tistory.com/entry/Unity-Naver-StaticMap-API-%EC%97%B0%EB%8F%99 

 

[Unity] Naver StaticMap API 연동

이전의 구글 맵을 연동했었다. 하지만 국내의 더 디테일한 내용을 확인하려면 네이버, 카카오 맵을 이용하는것이 효율적이라고 생각했다. 유니티에서 네이버 맵을 사용하려면 네이버 콘솔 플랫

tkablog.tistory.com

구글 API 활용기 : https://tkablog.tistory.com/entry/Unity-Static-Google-Map

 

[Unity] Static Google Map API 활용기

구글 API 를 사용하려면 구글 클라우드 플랫폼으로 접속하여야 한다. 구글 Maps api는 유료 서비스이며 200달러의 크레딧을 무료로 제공한다. 200달러를 초과할 시 비용이 청구 될 수 있다. https://mapsp

tkablog.tistory.com

 

먼저 지도 API를 호출하기에 앞서 공간정보 오픈 플랫폼 지도 서비스에 관하여 설명하고자 한다.

먼저 V World는 국토 교통부에서 공간 정보 산업 지원기관으로 지정한 공간정보산업진흥원에서 서비스하는 플랫폼이다.

 

설립 목적

 * 국가공간정보의 본격적인 민간 활용이 본 오픈플랫폼의 궁극적인 목적이라 설명하고 있다.

 

※ 참고 자료

https://www.vworld.kr/v4po_intorg_a001.do 

 

공간정보 오픈플랫폼

국가가 보유하고 있는 공개 가능한 공간정보를 모든 국민이 자유롭게 활용할 수 있도록 다양한 방법을 제공합니다.

www.vworld.kr

 

이제 활용을 해봐야할 시간이다.  오픈 API를 통해 맵을 호출하고 경로를 찍어보는 기능까지 해보려한다.

 

먼저 검색엔진을 통해 V World를 검색한다. 검색 후 아래의 홈페이지를 클릭한다.

https://www.vworld.kr/v4po_main.do

 

공간정보 오픈플랫폼

국가가 보유하고 있는 공개 가능한 공간정보를 모든 국민이 자유롭게 활용할 수 있도록 다양한 방법을 제공합니다.

www.vworld.kr

오픈 API를 사용하기위해서는 먼저 회원가입이 이루어져야한다.

 

상단 오른쪽에 회원가입을 눌러 회원가입을 하도록한다.

 

이번에 활용할 맵을 호출하기 위해서는 Static Map API 버튼을 클릭한다.

Static 맵을 사용하기 위해서는 인증키를 받아야한다.

인증키의 발급 과정으 어렵지 않다.

자신의 프로그램이 어떤 걸 사용할지와 어떤 내용인지 충분히 적으면 API 키가 발급된다.

 

모든 과정을 마치고 나면 인증키 관리 페이지에 자신이 작성한 서비스 명에 대한 인증키를 받게 된다.

이제 맵을 호출하여 보자!

 

Static Map을 호출하기 위해서는 Get/Post 방식에 대해 이해하여야 한다.

관련 내용을 잘 풀어서 설명한 포스팅이 있어 첨부한다.

https://coding-of-today.tistory.com/166

 

유니티 HTTP 통신 구현 핵심 정리1

유튜브 영상으로도 볼 수 있습니다. HTTP 통신을 사용하는 경우는 모바일 환경에서 추가패치 데이터를 설치하거나, 실시간 쌍방통신이 크게 필요하지 않은 경우에 주로 사용한다. 요점 정리를 시

coding-of-today.tistory.com

 

이제 유니티를 실행하여 Sample Scene을 열자.

오른쪽 Hierachy 창에서 Canvas를 하나 생성한 후 Raw 이미지를 넣어준다.

Raw 이미지에는  설정한 값에 맞게 들어가게 될 것이다. 

Raw 이미지를 넣었다면 Project 창에서 StaticMapLoader.cs 를 생성하여 줍니다.

위에서 설명한것들을 토대로 코드를 짜보려고 합니다.

using System.Collections;
using System.Collections.Generic;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;

namespace Cerberus_Platform_API
{
    public class StaticMapLoader : MonoBehaviour
    {

        public RawImage mapRawImage;

        [Header("맵 정보 입력")]
        public string strBaseURL = "http://api.vworld.kr/req/image?service=image&request=getmap&key=";
        public string latitude = "";
        public string longitude = "";
        public int zoomLevel = 14;
        public int mapWidth;
        public int mapHeight;
        public string strAPIKey = "";

        private void Start()
        {
            StartCoroutine(VWorldMapLoad());
        }

        IEnumerator VWorldMapLoad()
        {
            yield return null;

            StringBuilder str = new StringBuilder();
            str.Append(strBaseURL.ToString());
            str.Append(strAPIKey.ToString());
            str.Append("&format=png");
            str.Append("&basemap=GRAPHIC");
            str.Append("&center=");
            str.Append(longitude.ToString());
            str.Append(",");
            str.Append(latitude.ToString());
            str.Append("&crs=epsg:4326");
            str.Append("&zoom=");
            str.Append(zoomLevel.ToString());
            str.Append("&size=");
            str.Append(mapWidth.ToString());
            str.Append(",");
            str.Append(mapHeight.ToString());

            Debug.Log(str.ToString());
            UnityWebRequest request = UnityWebRequestTexture.GetTexture(str.ToString());

            yield return request.SendWebRequest();

            if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError)
            {
                Debug.Log(request.error);
            }
            else
            {
                mapRawImage.texture = DownloadHandlerTexture.GetContent(request);
            }
        }

    }
}

Vworld 오브젝트에 Static Map Loader.cs  컴포넌트를 삽입하여 준다.

 

컴포넌트를 넣어주고 다음으로는 위도, 경도 를 입력하고 ZoomLevel 및 맵의 크기를 정해주어 커스텀 할 수 있게 한다.

이후 실행해보면!

 

이렇게 지도가 뜨는 것을 확인할 수 있다. 이렇게 유니티에서 Static Map을 호출해보았다. 다음 포스팅은 해당 지도에 마커

를 그리고 재귀함수를 통해 지도를 여러번 호출할 수 있도록 해보겠다.

728x90
반응형

# 로딩 화면 동작 코드(Code) 설정하기
loading