您可以通过实现您自己的MKOverlayPathView子类来完成此操作,该子类在地图矩形中绘制两次路径。一旦黑色变厚,另一种颜色再变薄一次。
我已经创建了一个简单的MKPolylineView的替代方案,它可以让你这么做:ASPolylineView。
如果你想自己做,你需要实现两种主要方法看起来是这样的:
- (void)drawMapRect:(MKMapRect)mapRect
zoomScale:(MKZoomScale)zoomScale
inContext:(CGContextRef)context
{
UIColor *darker = [UIColor blackColor];
CGFloat baseWidth = self.lineWidth/zoomScale;
// draw the dark colour thicker
CGContextAddPath(context, self.path);
CGContextSetStrokeColorWithColor(context, darker.CGColor);
CGContextSetLineWidth(context, baseWidth * 1.5);
CGContextSetLineCap(context, self.lineCap);
CGContextStrokePath(context);
// now draw the stroke color with the regular width
CGContextAddPath(context, self.path);
CGContextSetStrokeColorWithColor(context, self.strokeColor.CGColor);
CGContextSetLineWidth(context, baseWidth);
CGContextSetLineCap(context, self.lineCap);
CGContextStrokePath(context);
[super drawMapRect:mapRect zoomScale:zoomScale inContext:context];
}
- (void)createPath
{
// turn the polyline into a path
CGMutablePathRef path = CGPathCreateMutable();
BOOL pathIsEmpty = YES;
for (int i = 0; i < self.polyline.pointCount; i++) {
CGPoint point = [self pointForMapPoint:self.polyline.points[i]];
if (pathIsEmpty) {
CGPathMoveToPoint(path, nil, point.x, point.y);
pathIsEmpty = NO;
} else {
CGPathAddLineToPoint(path, nil, point.x, point.y);
}
}
self.path = path;
}
不错的主意,但计算多边形的从边界一组任意的路线坐标相当复杂 – progrmr
一个基本的方法可能是在走廊的上部加上0.000001的纬度,然后在下部加上-0.000001,然后建立一个由上下两部分组成的多边形的走廊零件...只是一个想法... – yonel
这只会在路线沿东/西方向运行时起作用。这些可以在任何方向上运行,因此多边形需要基于每个线段的标题。边需要与路线标题成直角,并使用[余弦的球面法则]计算经纬度对的方向(http://stackoverflow.com/questions/6924742/valid-way-to-计算角度在2-cllocations/7352235#7352235)是一个昂贵的操作。 – progrmr