Объединить все 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 к сожалению, это не бесплатно.