Объединить все MKMapRects в один MKPolygon

Я хочу нарисовать коридор, используя MKPolygon над MKMap, используя Mapkit. У меня есть один маршрут от станции А до Б.

У меня есть MKMapRects вокруг маршрута для рисования коридора. Теперь я хочу объединить все прямоугольники в один полигон, и это мой коридор вместе с маршрутом. Как соединить все прямоугольники в один полигон.

№ прямоугольников: 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]; 
}

Заранее спасибо. Добро пожаловать на ваши ответы.

С уважением, Сагар П.

2 ответа

Итак, чтобы быть быстрым:

  • Нарисуйте коридор: нарисуйте вторую толстую линию.
  • Выделите объекты в коридоре: рассчитайте их без объединения полигонов, но с подходом расстояния до маршрута.

Вы можете нарисовать две линии в реализации оверлея, одну тонкую для маршрута и одну для коридора - thiiick и полупрозрачную, вы можете попытаться вычислить отношение точки к километру, используя данные, которые предоставляет MKMapView, и рассчитать ширину толстой линии. А для объектов на карте, которые вы хотите выделить - вы можете использовать разные подходы, есть несколько алгоритмов для нахождения точек рядом с кривой или прямой линией. Вы даже можете быть довольно простым: разделите маршрут на прямые линии и проверьте расстояние всех объектов - это будет очень медленно, но это сработает (наверняка для этого вам понадобится Google для этих сложных алгоритмов).

Просто, сначала преобразуйте MKMapRects в MKPolygons, затем создайте объединение всех MKPolygons, используя эту библиотеку: https://github.com/SunGard-Labs/MKPolygon-GPC к сожалению, это не бесплатно.

Другие вопросы по тегам