0

MKMapView::mapRectThatFits を使用すると、奇妙な不正確さが生じます。高さよりも幅の広い MKMapRect を渡すと、mapRectThatFits が同じ水平スパンを持つ新しい MapRect を返すことが期待されますが、垂直スパンが増加して mapView に収まりますが、MKMapView が水平スパンに追加されていることに気付きます縦も同様。

ここに画像の説明を入力

この不正確さは、座標領域の次元が大きくなるにつれて大きくなるようです。数百メートルでは精度は無視できますが、1.5 キロメートルではその差は 0.0006 と大きくなります。

mapRectThatFits:edgePadding をエッジ パディングをゼロに設定して regionThatFits で使用しようとしましたが、どちらも同じ不正確さをもたらします。

MKCoordinateRegion combinedRegion = self.models.locationModelsCoordinator.coordinateRegion;
NSLog(@"Before %f", combinedRegion.center.longitude - (combinedRegion.span.longitudeDelta * 0.5)); // Logs -0.103473

MKMapRect combinedRect = [ELMapKitUtils mapRectForCoordinateRegion:combinedRegion];
// If I convert combinedRect back to an MKCoordinateRegion here I can verify it is unaltered, so there is no issue with my conversion code.
MKMapRect focusRect = [self.mapView mapRectThatFits:combinedRect];

MKCoordinateRegion regionFittedToMapView = MKCoordinateRegionForMapRect(focusRect);
NSLog(@"After %f", regionFittedToMapView.center.longitude - (regionFittedToMapView.span.longitudeDelta * 0.5)); // Logs -0.104107
4

1 に答える 1

1

これは、ビットマップ タイルがあるためです。現在、MapKit はビットマップ タイルのフル サイズに適応しており、そのため水平方向により広い領域を表示しています。昨日の基調講演で実証されたように、MapKit がベクトル ベースのタイルを使用した場合 (将来のバージョンで使用される可能性があります)、ビットマップ タイルの問題によって制限されることはありません。

現在、MapKit に関する回避策はありません。bing Maps や Routeme は見ていません。あなたがすべき。

于 2012-06-12T18:12:24.347 に答える