0

とをMKMapView使用するためのオーバーレイに取り組んでいます。まず、現在のズーム レベルに応じて世界をタイルに分割します。したがって、ズームアウトすると、1 つの大きなタイル、次のズーム レベル 4 のタイル、次に 9 のタイルが必要になります。これは機能しています。今私の問題に:MKOverlayMKOverlayView

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;
}
4

2 に答える 2

1

タイル張りの一般的な方法は、各タイルを 4 つに分割することです。したがって、最上位レベルには 1 つのタイルがあります。それを4つにカットすると、次のレイヤーができます. それらのそれぞれを 4 つにカットすると、次のレイヤーなどがあります。このようにして、任意のレイヤーのタイルは、その上または下のタイルの境界を非常に簡単に解決できます。レイヤーのデータがまだ準備されていない場合は、上のタイルの一部を使用することも、下の 4 つのタイルを結合して代わりに使用することもできます。

于 2013-06-12T09:44:58.563 に答える
0

この種のコンテンツをタイル化する簡単な方法については、http://tilemill.comをご覧ください。

于 2013-06-13T22:29:25.477 に答える