! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

WinForms Maps를 OpenStreetMap 타일에 연결하는 방법 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

WinForms Maps를 OpenStreetMap 타일에 연결하는 방법

페이지 정보

작성자 GrapeCity 작성일 2023-07-11 13:57 조회 347회 댓글 0건

본문

ComponentOne에는 WinForms 응용 프로그램에서 맵에 지리적 데이터를 표시할 수 있는 C1Map 컨트롤이 포함되어 있습니다. 다양한 기본 제공을 포함하여, 사용자 정의 소스로부터 지리적 정보를 표시할 수 있습니다.


기본적으로 C1Map에서는 Microsoft Bing Maps에 액세스하는 항공, 도로 및 하이브리드 뷰 등 세 가지 기본 소스를 제공합니다.


이번 스터디에서는 간단한 두 단계로 OpenStreetMap의 타일 이미지를 사용하여 C1Map을 위한 사용자 정의 타일을 만드는 방법을 설명하고, 오프라인 사용자를 지원하기 위한 오프라인 맵(선택 사항)을 추가합니다.


  1. 사용자 정의 타일 소스 만들기

  2. 맵 컨트롤에서 사용자 정의 타일 소스 사용

  3. 오프라인 맵 지원(선택 사항)



 

사용자 정의 타일 소스 만들기  


사용자 정의 타일을 만드는 첫 번째 단계는 C1Map 컨트롤에서 제공하는 ITileSource 인터페이스를 제공하는 것입니다.

public interface ITileSource
    {
        int TileWidth { get; }
        int TileHeight { get; }

        void GetTile(int level, int x, int y, out string uri, out object image);
    }


ITileSource 인터페이스는 GetTile 메서드를 제공합니다. GetTile 메서드는 확대/축소 수준, 타일의 x 위치 및 타일의 y 위치를 받으며, 이를 기반으로 타일의 URI 또는 이미지를 할당할 수 있습니다.


OpenStreetMap을 온라인 맵 소스로 사용하고 있으므로, 다음 URI를 사용하여 지정된 확대/축소 수준과 x 및 y 위치에 대한 타일을 가져옵니다.


http://tile.openstreetmap.org/{zoom}/{x}/{y}.png


이제 GetTile 메서드의 매개 변수를 사용하고, 해당하는 OpenStreetMap URI를 만들어 URI 매개 변수에 할당해야 합니다. 이미지를 제공하지 않기 때문에 매개 변수를 null로 설정할 수 있습니다. 사용자 정의 타일 소스는 다음과 같습니다.

public class OpenStreetTileSource : ITileSource
    {
        private const string UrlTemplate = "http://tile.openstreetmap.org/{0}/{1}/{2}.png";

        public void GetTile(int zoomLevel, int tilePositionX, int tilePositionY, out string url, out object image)
        {
            image = null;
            url = string.Format(UrlTemplate, zoomLevel, tilePositionX, tilePositionY);
        }

        public int TileWidth { get { return 256; } }
        public int TileHeight { get { return 256; } }

    }



맵 컨트롤에서 사용자 정의 타일 소스 사용 


사용자 정의 타일 소스를 만들었습니다. 다음에는 C1Map 컨트롤에 할당해야 합니다. 이 작업은 아래 표시된 대로 C1Map.TileLayer.TileSource 속성을 사용하여 처리할 수 있습니다.

Map1.TileLayer.TileSource = _customMapSource;


사용자 정의 타일 소스를 할당한 후 맵은 다음과 같이 표시됩니다.

WinForms Maps



오프라인 맵 지원(선택 사항)


사용자 정의 타일 소스에서는 온라인 맵 소스를 활용하여 타일 이미지를 다운로드했습니다. 하지만, 인터넷 연결 없이 맵을 표시해야 할 경우가 생기기도 합니다.


이런 상황을 위해 ITileSource 구현을 수정하여 오프라인 사용자 정의 타일 소스를 만들어 보겠습니다. GetTile 메서드에서 URI를 할당하는 대신, 로컬 타일 이미지를 로드하고 GetTile 메서드에서 이미지를 할당해야 합니다. 오프라인 타일 소스는 다음과 같습니다.

public class OfflineTilesSource : ITileSource
    {
        private readonly string tilesLocation;
        public OfflineTilesSource(string tilesLocation)
        {
            if (Directory.Exists(tilesLocation))
            {
                this.tilesLocation = Path.Combine(tilesLocation);
            }
            else
                throw new DirectoryNotFoundException();
        }
        public int TileWidth { get { return 256; } }
        public int TileHeight { get { return 256; } }

        public void GetTile(int level, int x, int y, out string uri, out object image)
        {
            uri = string.Empty;
            image = null;

            var imgPath = Path.Combine(tilesLocation, level.ToString(), x.ToString(), (y.ToString() + ".png"));
            if (File.Exists(imgPath))
            {
                using (Bitmap bmp = new Bitmap(imgPath))
                {
                    image = new Bitmap(bmp);
                }
            }
        }

    }


이제, 타일 이미지를 로드하고 할당하기 위해서 타일의 위치 및 확대/축소를 기반으로 쉽게 가져올 수 있는 타일 이미지 로컬로 저장하는 방법을 사용해야 합니다. 이번 스터디의 샘플 프로젝트에서는 숫자 값으로 레이블이 지정된 폴더에 타일 이미지를 저장했습니다. 폴더는 첫 번째가 확대/축소에 해당하고, 두 번째가 x 위치에 해당하고, 세 번째가 y 위치에 해당하도록 구성됩니다.


WinForms Maps


y 위치 폴더 내에서 타일 이미지를 찾을 수 있습니다.


이 정렬을 사용하면 GetTile 메서드에서 제공하는 값을 활용하여 필요한 이미지에 쉽게 액세스할 수 있습니다.


샘플 응용 프로그램을 둘러보세요. C1Map 컨트롤을 위한 오프라인 지원 기능을 사용하여 간단하게 사용자 정의 타일 소스를 만들 수 있습니다.




 

지금 바로 ComponentOne을 다운로드하여 직접 테스트해 보세요!

c1.png


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.