首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MapKit多段线自定义缩放?

MapKit多段线自定义缩放?
EN

Stack Overflow用户
提问于 2012-12-19 08:26:42
回答 1查看 688关注 0票数 5

我正在尝试学习如何在ios6中使用多段线连接地图上的两个点。首先,我已经阅读了关于这个主题的每个教程,发现一个简单的谷歌搜索不能让折线工作的原因有一个。我看过的每个教程都会将折线添加到地图中,并调整地图的缩放以适合整条线。如果希望地图保持恒定的放大距离,并且仅在多段线大于当前视图时显示多段线的端点,则如何在ios6中创建多段线并将其添加到地图?例如,假设我有一条一英里长的折线,并希望地图保持放大,距离等于:

代码语言:javascript
复制
MKCoordinateRegion userRegion = MKCoordinateRegionMakeWithDistance(self.currentLocation.coordinate, 1000, 1000);
    [self.mainMap setRegion:[self.mainMap regionThatFits:userRegion] animated:YES];

我该怎么做呢?请提供完整的代码示例或示例项目,我可以下载!

EN

回答 1

Stack Overflow用户

发布于 2012-12-28 20:24:06

MKMapPoint * malloc / assign:

代码语言:javascript
复制
MKMapPoint *newPoints = malloc((sizeof (MKMapPoint) * nbPoints));
newPoints[index] = varMKMapPoint;
free(newPoints);

MKPolyline必须在您需要时进行初始化:

代码语言:javascript
复制
MKPolyline *polyline  = [MKPolyline polylineWithPoints:newPoints count:nbPoints];
[self.mapView addOverlay:polyline];

要显示您的MKPolyline,您必须使用viewForOverlay:

代码语言:javascript
复制
- (MKOverlayView *)mapView:(MKMapView *)mapView viewForOverlay:(id <MKOverlay>)overlay
{
    MKOverlayView* overlayView = [[MKOverlayView alloc] initWithOverlay:overlay];        
    if([overlay isKindOfClass:[MKPolyline class]]) {
        MKPolylineView *backgroundView = [[MKPolylineView alloc] initWithPolyline:overlay];
        backgroundView.fillColor = [UIColor blackColor];
        backgroundView.strokeColor = backgroundView.fillColor;
        backgroundView.lineWidth = 10;
        backgroundView.lineCap = kCGLineCapSquare;
        overlayView = backgroundView;
    }
    return overlayView;
}

要使用此方法,您必须将点转换为CLLocation,它将返回一个您将设置为mapView的MKCoordinateRegion:

代码语言:javascript
复制
- (MKCoordinateRegion)getCenterRegionFromPoints:(NSArray *)points
{
    CLLocationCoordinate2D topLeftCoordinate;
    topLeftCoordinate.latitude = -90;
    topLeftCoordinate.longitude = 180;
    CLLocationCoordinate2D bottomRightCoordinate;
    bottomRightCoordinate.latitude = 90;
    bottomRightCoordinate.longitude = -180;
    for (CLLocation *location in points) {
        topLeftCoordinate.longitude = fmin(topLeftCoordinate.longitude, location.coordinate.longitude);
        topLeftCoordinate.latitude = fmax(topLeftCoordinate.latitude, location.coordinate.latitude);
        bottomRightCoordinate.longitude = fmax(bottomRightCoordinate.longitude, location.coordinate.longitude);
        bottomRightCoordinate.latitude = fmin(bottomRightCoordinate.latitude, location.coordinate.latitude);
    }
    MKCoordinateRegion region;
    region.center.latitude = topLeftCoordinate.latitude - (topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 0.5;
    region.center.longitude = topLeftCoordinate.longitude + (bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 0.5;
    region.span.latitudeDelta = fabs(topLeftCoordinate.latitude - bottomRightCoordinate.latitude) * 1.2; //2
    region.span.longitudeDelta = fabs(bottomRightCoordinate.longitude - topLeftCoordinate.longitude) * 1.2; //2
//    NSLog(@"zoom lvl : %f, %f", region.span.latitudeDelta, region.span.latitudeDelta);
    return region;
}

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13943718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档