プログラムの事とか

お約束ですが「掲載内容は私個人の見解です」

iOSのMKMapViewの不思議な動き

iOSのMKMapViewは他のOS等で使う地図コントロール1と少し異なる動作をすることがあります

経度180度をまたぐ線

東経179度から西経179度に2度線を引きたいと思います

Leafletの場合

西経179度は-179度なのでそんな感じで置こうとすると

var latlngs = [
    [40, 179],
    [40, -179]
];

var polyline = L.polyline(latlngs, {color: 'red'}).addTo(map);

f:id:puni-o:20211222191031p:plain

こんな感じになります。179度から-179度まで減らす方向に線を引きます

ということで目的を果たすためには

var latlngs = [
    [40, 179],
    [40, 181]
];

という感じに179度から増える方向に2度、という指定をします

f:id:puni-o:20211222191326p:plain

ただこのままだと地図を動かすと出たり消えたりするのですが、それは今回は割愛

MKMapViewの場合

同じことをiOSでやってみます

let pos0 = CLLocationCoordinate2DMake(40,179)
let pos1 = CLLocationCoordinate2DMake(40,181)
let coordinates = [pos0, pos1 ]
let polyLine = MKPolyline(coordinates: coordinates, count: coordinates.count)

self.mapView.addOverlay(polyLine)

結果はこんな感じ

f:id:puni-o:20211222191538j:plain

逆方向にすると

let pos0 = CLLocationCoordinate2DMake(40,-179)
let pos1 = CLLocationCoordinate2DMake(40,-181)

f:id:puni-o:20211222191619j:plain

面白いですね

求める線を描くためには

let pos0 = CLLocationCoordinate2DMake(40,179)
let pos1 = CLLocationCoordinate2DMake(40,-179)

f:id:puni-o:20211222191741p:plain

です

便利なような不便なような

東経179度から西経179度まで西向きに線を引きたい場合どうするんだろう・・・

ヌル島 (null island)の扱い

ヌル島という島があります。

ja.wikipedia.org

実際にあるわけではなく 緯度:0 、 経度:0 に概念的にあるだけなのですが、世界一電子地図が訪れる場所だとかなんとか

MKMapViewでそこにPINを置いてみます(比較のために近くにもう一つ)

let pa = MKPointAnnotation()
pa.title = "(0,0)"
pa.coordinate = loc.coordinate
self.mapView.addAnnotation(pa)

let pa2 = MKPointAnnotation()
pa2.title = "(0.0001,0.0001)"
pa2.coordinate = CLLocation(latitude: 0.0001, longitude: 0.0001).coordinate
self.mapView.addAnnotation(pa2)

f:id:puni-o:20211222192355p:plain

(0,0) のPINはアイコンが描画されません。これは自前描画でも同様です

タイトルも出ないならば、まだ仕様といえなくもないですがタイトルだけはでます

というどう考えてもバグな動作があります。こちらは一応バグ報告してありますが修正されるのかどうなのかは微妙です

おしまい


  1. leafletなど私の観測範囲のみ