Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
8
Help us understand the problem. What is going on with this article?
@townsoft

MKMapViewに全てのピンを表示させる。

More than 3 years have passed since last update.

はじめに

とても簡単にできたのにGitHubとかを読み漁ってしまった・・・。

            // 最低限の地図の大きさ
            let MINIMUM_MAP_SPAN = MKCoordinateSpanMake(0.002, 0.002)

            var topLeftCoord = CLLocationCoordinate2D(latitude: -90, longitude: 180)
            var bottomRightCoord = CLLocationCoordinate2D(latitude: 90, longitude: -180)

            // 2点間の計算を行う。
            // 現在地
            topLeftCoord.longitude = fmin(topLeftCoord.longitude, localCoordinate.longitude)
            topLeftCoord.latitude = fmax(topLeftCoord.latitude, localCoordinate.latitude)
            bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, localCoordinate.longitude)
            bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, localCoordinate.latitude)

            // ピンの位置
            topLeftCoord.longitude = fmin(topLeftCoord.longitude, pinCoordinate.longitude)
            topLeftCoord.latitude = fmax(topLeftCoord.latitude, pinCoordinate.latitude)
            bottomRightCoord.longitude = fmax(bottomRightCoord.longitude, pinCoordinate.longitude)
            bottomRightCoord.latitude = fmin(bottomRightCoord.latitude, pinCoordinate.latitude)

            var region = MKCoordinateRegion()
            region.center.latitude = topLeftCoord.latitude - (topLeftCoord.latitude - bottomRightCoord.latitude) * 0.5
            region.center.longitude = topLeftCoord.longitude + (bottomRightCoord.longitude - topLeftCoord.longitude) * 0.5

            // 端ギリギリにピンが立つのを避けるため少し広げる
            region.span.latitudeDelta = fabs(topLeftCoord.latitude - bottomRightCoord.latitude) * 1.1;
            region.span.longitudeDelta = fabs(bottomRightCoord.longitude - topLeftCoord.longitude) * 1.1;
            // 拡大しすぎの場合は最低限の縮尺にする
            region.span.latitudeDelta = fmax(MINIMUM_MAP_SPAN.latitudeDelta, region.span.latitudeDelta);
            region.span.longitudeDelta = fmax(MINIMUM_MAP_SPAN.longitudeDelta, region.span.longitudeDelta);

            self.mapView.setRegion(self.mapView.regionThatFits(region), animated: true)

ではなくて

self.mapView.showAnnotations(self.mapView.annotations, animated: true)

これで現在地も含め、全てのピンが表示される地図の倍率を出してくれた・・・。
2時間も探し求めたのに・・・・(初めに見つけた文献は間違ってて余計にはまった。)

でも、緯度経度の考え方を見直すときに使いそうなのでメモっておく。

参考

シンプルな回答
http://p-l-us-creative.com/%E3%82%A2%E3%83%97%E3%83%AA/mkmapview%E3%81%A7%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%84%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%AE%E4%BD%8D%E7%BD%AE%E3%82%92%E3%81%99%E3%81%B9%E3%81%A6%E8%A1%A8

がんばって計算しているコード
https://gist.github.com/ttsubono/2988074

アメリカなどを含めると以下の計算式だと途中で落ちる。
http://kesin.hatenablog.com/entry/20120915/1347726989

8
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
townsoft
RailsやSwiftを使って、様々なアプリケーションを作ることが好きです。 それを生業にして仕事を請けてます。 HPより仕事の依頼も受けてますので、お気軽にご連絡ください。(条件によっては常駐開発も請け負います。)

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
8
Help us understand the problem. What is going on with this article?