Xamarin.iOS Maps Static API를 이용한 지도 이미지 생성

자작의 점심 앱을 만들 때, 대체로 이 근처 같은 느낌으로, GoogleMap의 핀 첨부 이미지를 원했기 때문에 사용해 보았다.

무슨 느낌인가 하면,

핀을 세우고 싶은 위치에 조준을 맞추고,



확정 버튼 뭔가를 탭하면,



조준을 맞춘 곳에 핀이 단 이미지가 생성된다는 느낌.

구현



1. 표시된 GoogleMap의 중심 좌표를 전달합니다.

CGPoint point = Mapview.Center;
Mapview.Projection.CoordinateForPoint(point);

2.Maps Static API에 GoogleMap의 중심 좌표의 LatitudeLongitude

string url = Uri.EscapeUriString("https://maps.google.com/maps/api/staticmap?markers=color:red|" + $"{lat},{lng}" + "&zoom=16&size=" + 207 + "x" + $"{Math.Floor(this.screenShotViewWitdh)}" + "&sensor=true");
NSUrl googlmapsStaticMapApi = new NSUrl(url);

3.NSData.FromUrl을 사용하여 이미지 데이터를 얻습니다.

return UIImage.LoadFromData(NSData.FromUrl(googlmapsStaticMapApi));

4. 이전 화면에 이미지 데이터 전달
public override void ViewWillDisappear(bool animated)
        {
            base.ViewWillDisappear(animated);

            if(IsMovingFromParentViewController){
                var parentVc = NavigationController.ChildViewControllers;
                //HACK: コントローラー名でなおかつそのコントローラーが生きている状態という条件にした方が良さそう
                var childvc = ParentViewController.ChildViewControllers[1] as UpLoadDataViewController;
                childvc.setMapImage(MakeStaticGoogleMap());
                childvc.setLatLng(lat, lng);
            }    
        }


5. 건너온 이미지 데이터를 ImageView에 넣습니다.

public async override void ViewDidAppear(bool animated)
        {
            base.ViewDidAppear(animated);
            if (map != null)
            {
                StreetAddressImageView.Image = map;
            }
            if (shop != null)
            {
               //未実装
            }
        }

이미지 생성 부분 전체

public UIImage MakeStaticGoogleMap(){
            CGPoint point = Mapview.Center;
            CLLocationCoordinate2D coordinate2D = Mapview.Projection.CoordinateForPoint(point);
            lat = coordinate2D.Latitude;
            lng = coordinate2D.Longitude;
            string url = Uri.EscapeUriString("https://maps.google.com/maps/api/staticmap?markers=color:red|" + $"{lat},{lng}" + "&zoom=16&size=" + 207 + "x" + $"{Math.Floor(this.screenShotViewWitdh)}" + "&sensor=true"); //$"{Math.Floor(this.screenShotViewHeight)}"
            NSUrl googlmapsStaticMapApi = new NSUrl(url);
            return UIImage.LoadFromData(NSData.FromUrl(googlmapsStaticMapApi));
        }


StackOverFlow의 어딘가에 있던 질문을 보고 했습니다만 잊어 버렸기 때문에 생각나면 붙여 둡니다. .

좋은 웹페이지 즐겨찾기