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);
こんな感じになります。179度から-179度まで減らす方向に線を引きます
ということで目的を果たすためには
var latlngs = [ [40, 179], [40, 181] ];
という感じに179度から増える方向に2度、という指定をします
ただこのままだと地図を動かすと出たり消えたりするのですが、それは今回は割愛
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)
結果はこんな感じ
逆方向にすると
let pos0 = CLLocationCoordinate2DMake(40,-179) let pos1 = CLLocationCoordinate2DMake(40,-181)
面白いですね
求める線を描くためには
let pos0 = CLLocationCoordinate2DMake(40,179) let pos1 = CLLocationCoordinate2DMake(40,-179)
です
便利なような不便なような
東経179度から西経179度まで西向きに線を引きたい場合どうするんだろう・・・
ヌル島 (null island)の扱い
ヌル島という島があります。
実際にあるわけではなく 緯度: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)
(0,0) のPINはアイコンが描画されません。これは自前描画でも同様です
タイトルも出ないならば、まだ仕様といえなくもないですがタイトルだけはでます
というどう考えてもバグな動作があります。こちらは一応バグ報告してありますが修正されるのかどうなのかは微妙です
おしまい
-
leafletなど私の観測範囲のみ↩