3

在此处输入图像描述我想在使用 Mapkit 的 MKMap 上使用 MKPolygon绘制走廊。我有一条从 A 站到 B 站的路线。

我在路线周围有 MKMapRects 用于绘制走廊。现在我想合并单个多边形中的所有矩形,这就是我的走廊和路线。如何在单个 Polygon 中连接所有矩形。

矩形数量:160

在这里,我附上了指示我需要什么的示例图像。

这是代码片段。

for(int i=0;i<[self.boundingRectsArr count];i++) {

            lat1 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"xLT"] doubleValue];
    long1 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"yLT"] doubleValue];

    lat2 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"xRT"] doubleValue];
    long2 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"yRT"] doubleValue];
            lat3 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"xRB"] doubleValue];
    long3 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"yRB"] doubleValue];
    lat4 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"xLB"] doubleValue];
    long4 = [[[self.boundingRectsArr objectAtIndex:i] valueForKey:@"yLB"] doubleValue];

            CLLocationCoordinate2D rect[5];
            rect[0] = CLLocationCoordinate2DMake(lat1, long1);
    rect[1] = CLLocationCoordinate2DMake(lat2, long2);
    rect[2] = CLLocationCoordinate2DMake(lat3, long3);
    rect[3] = CLLocationCoordinate2DMake(lat4, long4);
            rect[4] = CLLocationCoordinate2DMake(lat1, long1);

    MKPolygon* polyCorridor = [MKPolygon polygonWithCoordinates:rect count:5];
    polyCorridor.title = @"Colorado";
    [self.map addOverlay:polyCorridor]; 
}

提前致谢。欢迎您的回答。

问候, Sagar P.在此处输入图像描述

4

2 回答 2

0

所以,要快:

  • 画corrigor:画第二条粗线。
  • 突出显示走廊中的对象:在没有多边形联合的情况下计算它们,但使用距离到路线的方法。

您可以在覆盖实现中绘制两条线,一条细线用于路线,一条用于走廊 - 细线和半透明,您可以尝试使用 MKMapView 提供的数据计算点与公里的比率并计算粗线宽度。对于地图上您要突出显示的对象 - 您可以使用不同的方法,有多种算法可用于查找曲线或直线附近的点。你甚至可以相当简单:将路线分成直线并检查所有对象的距离 - 这会非常慢,但它会起作用(确保你需要谷歌搜索那些复杂的算法)。

于 2013-04-08T05:27:54.453 回答
0

很简单,首先将 MKMapRects 转换为 MKPolygons,然后使用这个库创建所有 MKPolygons 的联合: https ://github.com/SunGard-Labs/MKPolygon-GPC不幸的是它不是免费的。

于 2015-07-18T15:14:06.143 回答