시스템을 구현하다 보면 지도를 호출하여 화면에 증강시켜야할 때가 있다.
간단하게 지도를 호출하는 방법과 지도 컨트롤에 대한 내용을 구현해보려고 한다.
앞서 여러가지 지도 호출 API를 사용했다. 구글, 네이버 Static Map 호출을 통해 지도를 증강시키는 예제를 참고하여
포스팅하려고 한다.
참고 URL
네이버 API 활용기 : https://tkablog.tistory.com/entry/Unity-Naver-StaticMap-API-%EC%97%B0%EB%8F%99
구글 API 활용기 : https://tkablog.tistory.com/entry/Unity-Static-Google-Map
먼저 지도 API를 호출하기에 앞서 공간정보 오픈 플랫폼 지도 서비스에 관하여 설명하고자 한다.
먼저 V World는 국토 교통부에서 공간 정보 산업 지원기관으로 지정한 공간정보산업진흥원에서 서비스하는 플랫폼이다.
설립 목적
* 국가공간정보의 본격적인 민간 활용이 본 오픈플랫폼의 궁극적인 목적이라 설명하고 있다.
※ 참고 자료
https://www.vworld.kr/v4po_intorg_a001.do
이제 활용을 해봐야할 시간이다. 오픈 API를 통해 맵을 호출하고 경로를 찍어보는 기능까지 해보려한다.
먼저 검색엔진을 통해 V World를 검색한다. 검색 후 아래의 홈페이지를 클릭한다.
https://www.vworld.kr/v4po_main.do
오픈 API를 사용하기위해서는 먼저 회원가입이 이루어져야한다.
상단 오른쪽에 회원가입을 눌러 회원가입을 하도록한다.
이번에 활용할 맵을 호출하기 위해서는 Static Map API 버튼을 클릭한다.
Static 맵을 사용하기 위해서는 인증키를 받아야한다.
인증키의 발급 과정으 어렵지 않다.
자신의 프로그램이 어떤 걸 사용할지와 어떤 내용인지 충분히 적으면 API 키가 발급된다.
모든 과정을 마치고 나면 인증키 관리 페이지에 자신이 작성한 서비스 명에 대한 인증키를 받게 된다.
이제 맵을 호출하여 보자!
Static Map을 호출하기 위해서는 Get/Post 방식에 대해 이해하여야 한다.
관련 내용을 잘 풀어서 설명한 포스팅이 있어 첨부한다.
https://coding-of-today.tistory.com/166
이제 유니티를 실행하여 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("¢er=");
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을 호출해보았다. 다음 포스팅은 해당 지도에 마커
를 그리고 재귀함수를 통해 지도를 여러번 호출할 수 있도록 해보겠다.
'Unity > Unity_API' 카테고리의 다른 글
[Unity] VWorld API를 사용하여 경로 그리기 (0) | 2022.12.27 |
---|---|
[Unity] Naver StaticMap API 연동 (2) | 2022.07.05 |
[Unity] Static Google Map API 활용기 (8) | 2022.06.28 |