とをMKMapView
使用するためのオーバーレイに取り組んでいます。まず、現在のズーム レベルに応じて世界をタイルに分割します。したがって、ズームアウトすると、1 つの大きなタイル、次のズーム レベル 4 のタイル、次に 9 のタイルが必要になります。これは機能しています。今私の問題に:MKOverlay
MKOverlayView
zoomLevel 3 では、タイル間に隙間ができ始めます。これは、タイルが 4 つしかないズーム レベル 2 では発生しませんが、以降のすべてのズーム レベルで発生します。
_ _ _
|1 2 3|
|4 5 6| <-- Tiles
|7_8_9|
2 つの画像は、それぞれタイル 1、2、4、5 と 5、6、8、9 を示しています。
ご覧のとおり、各タイルの後でギャップが増加します。今私のコードに:
drawMapRect:
- (void)drawMapRect:(MKMapRect)mapRect zoomScale:(MKZoomScale)zoomScale inContext:(CGContextRef)context
{
NSUInteger zoomLevel = [self zoomLevelForZoomScale:zoomScale];
HeatMap *heatMap = (HeatMap *)self.overlay;
HeatMapTileManager *tileManager = [heatMap getHeatMapTileManagerForZoomLevel:zoomLevel];
MKMapRect mapTile = [tileManager getRectForMapPoint:mapRect.origin atZoomLevel:zoomLevel];
CGContextSetAlpha(context, 0.5);
CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
CGColorRef color = CGColorCreate(rgb, (CGFloat[]){ .745, .941, .467, 1 });
CGContextSetFillColorWithColor(context, color);
CGRect mapTileCGRect = [self rectForMapRect:mapTile];
CGContextFillRect(context, mapTileCGRect);
}
getRectForMapPoint:
- (MKMapRect) getRectForMapPoint:(MKMapPoint)mapPoint
atZoomLevel:(NSInteger)level
{
double stepSize = MKMapSizeWorld.width / (double)level;
double rectIDx = floor(mapPoint.x / stepSize);
double rectIDy = floor(mapPoint.y / stepSize);
MKMapRect mapRect = MKMapRectMake(stepSize * rectIDx,
stepSize * rectIDy,
stepSize,
stepSize);
NSLog(@"X: %f, Width: %f", mapRect.origin.x, stepSize);
NSLog(@"Y: %f, Height: %f", mapRect.origin.y, stepSize);
return mapRect;
}