Programmer:)

[Unity] Google Maps API 사용기(StaticMaps) 본문

DEV/Unity

[Unity] Google Maps API 사용기(StaticMaps)

ryeggg 2021. 3. 8. 18:06
반응형

google api : developers.google.com/maps

google map static maps api : console.cloud.google.com/marketplace/product/google/static-maps-backend.googleapis.com?q=search&referrer=search&project=lucky-apparatus-167403

 

지도api 참고 사이트 : blog.naver.com/qkrqkr21/221421747380

 

*2018년 부터 구글 api 유료화로 결제 카드 등록을 진행해야한다.

*static maps api 사이트에 들어가 사용을 클릭해줘야 한다.

*구글 key값 가져오는 방법은 duopix.co.kr/google-map-key/ 사이트를 참고 바람

 

api test용으로 간단하게 작성해봤다. (untiy ver. 2018.4.23f1)

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

public class GoogleMapAPI : MonoBehaviour
{
    [SerializeField]
    private string m_key;
    
    public enum mapType
    {
        roadmap,
        satellite,
        hybrid,
        terrain
    }

    public bool Maps(RawImage _rawImage, float _lat, float _lon, int _zoom, int _scale, mapType _mapType)
    {
        try
        {
            int mapWidth = (int)_rawImage.GetComponent<RectTransform>().rect.width;
            int mapHeight = (int)_rawImage.GetComponent<RectTransform>().rect.height;

            string url =
            "https://maps.googleapis.com/maps/api/staticmap?" +
            "center=" + _lat + "," + _lon +
            "&zoom=" + _zoom +
            "&size=" + mapWidth + "x" + mapHeight +
            "&scale=" + _scale +
            "&maptype=" + _mapType +
            "&markers=color:blue%7Clabel:S%7C" + _lat + "," + _lon +
            "&key=" + m_key;

            Debug.Log("url : " + url);

            WWW www = new WWW(url);
            int delay = 1000;
            int timer = 0;
            bool done = false;

            while(delay > timer)
            {
                System.Threading.Thread.Sleep(1);
                timer++;
                if(www.isDone)
                {
                    done = true;
                    break;
                }
            }

            if(done == false)
            {
                return false;
            }
            if(_rawImage != null)
            {
                _rawImage.texture = www.texture;
                _rawImage.SetNativeSize();
            }

        }
        catch(System.Exception e)
        {
            Debug.LogError(e);
            return false;
        }
        return true;
    }

    
}

 

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

public class UIManager : MonoBehaviour
{
    [SerializeField]
    GoogleMapAPI m_GoogleMapAPI;

    [SerializeField]
    private RawImage m_rawImage;
    [SerializeField]
    private InputField m_let;
    [SerializeField]
    private InputField m_lon;
    [SerializeField]
    private int m_maxZoom; //zoom을 최대 몇까지 할 건지

    private int m_zoom; //현재 zoom 값

    private void Start()
    {
        m_zoom = 10; //기본 10으로 세팅
    }
    
    //줌 버튼 만들어서 이벤트 등록
    public void ZoomButton(bool _plusMinus)
    {
        if(_plusMinus)
        {
            m_zoom++;
            if(m_zoom > m_maxZoom)
            {
                m_zoom = m_maxZoom;
            }
            else
            {
                OkButtonEvent(m_zoom);
            }
        }
        else
        {
            m_zoom--;
            if (m_zoom < 0)
            {
                m_zoom = 0;
            }
            else
            {
                OkButtonEvent(m_zoom);
            }
        }
    }

    public void OkButtonEvent(int _zoom)
    {
        RawImage rawImage = m_rawImage;
        float let = float.Parse(m_let.text);
        float lon = float.Parse(m_lon.text);
        int scale = 1;

        m_GoogleMapAPI.Maps(rawImage, let, lon, _zoom, scale, GoogleMapAPI.mapType.roadmap);
    }
}

 

ui화면

 

*추가 포스팅*

2021.03.09 - [DEV/Unity] - [Unity] Google Maps API 사용기(Distance Matrix)

 

 

(Unity) Google Maps API 사용기(Distance Matrix)

google api 가격책정 관련 정보 : cloud.google.com/maps-platform/pricing/?hl=ko google distance matrix api 활성화 console.cloud.google.com/marketplace/product/google/distance-matrix-backend.googleapis..

ryeggg.tistory.com

 

#############

22.02.19 작성

작동이 안된다는 답글이 있어 테스트해본 결과 google api 정책이 바뀌면서 설정 및 추가 변동사항이 있는것으로 보임..

웹페이지로 테스트해봤는데 이미지를 받아오다 못받아오다 하는 문제가 있음..

 

https://maps.googleapis.com/maps/api/staticmap?center=37.496564,127.024740&zoom=10&size=1200x1200&scale=1&maptype=roadmap&markers=color:blue%7Clabel:S%7C37.496564,127.024740&key=####### 

 

#####이 부분에 자기 키값만 넣어서 웹페이지에 테스트 후 사용하는게 좋을 듯 보인다..

내쪽에서는 더이상 작업이 불가하여 일단 중지.. 향후 해결방안 모색해서 다시 재 업로드 예정..(...이런..ㅠㅠ)

 

아.. 결제정책연결에 문제가 생겨서 계속 받아오다 못받아오다 하는 문제이슈가 생겼었음.. 

https://ryeggg.tistory.com/64

 

[Google Map API] you must enable billing on the google cloud project....

version : Google Static Map API error massege : You must enable Billing on the Google Cloud Project at https://console.cloud.google.com/project/_/billing/enable Learn more at https://..

ryeggg.tistory.com

 

위 방법으로 해결...

테스트하면서 유니티 버전업과 코드리펙토링 진행했고 잘 받아오는것도 확인했다.

추후 깃 업로드 예정 (아마 이번주..안에..)

반응형
Comments