2013-04-03 3 views
2

enter image description here Я хочу нарисовать коридор с использованием MKPolygon над MKMap с помощью Mapkit. У меня есть один маршрут от станции А до Б.Слить все MKMapRects в одиночный MKPolygon

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

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

Thanks in Advance. Добро пожаловать в ваши ответы.

С уважением, Сагар П. enter image description here

+0

Есть ли какие-либо предположения, которые мы можем сделать? Все прямоугольники одинакового размера? Они квадраты? Есть ли у вас прямоугольники, отсортированные по порядку вдоль пути? – Nate

+0

Было бы проще всего дать вам решение с фактическим ** кодом **, если бы вы могли показать нам, какую структуру данных у вас есть как ** вход ** для этого алгоритма? Например, это 'NSArray'' MKMapRect', упорядоченный по маршруту? Кроме того, вы на 100% уверены, что вы хотите «MKPolygon»? Или вы просто пытаетесь нарисовать маршрут на карте? Было бы лучше, если бы стороны были сглажены (что 'MKPolygon' вам не дает)? – Nate

+0

@Nate: Да У меня есть все MKMapRect Array в отсортированном порядке как маршрут. Позвольте мне приложить окончательный OutPut, что я хочу actully и как его выглядит. – sagarcool89

ответ

0

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

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

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

0

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