Проблема с производительностью MKPolygon

Я создал целую кучу оверлеев с помощью MKPolygon и превратил их в MKPolygonView. Это работает нормально, но одно из наложений имеет слишком много точек (около 800 точек), и это вызывает проблемы с памятью и производительностью. Я пробовал shouldRasterize в MKPolygonView, но это имело противоположный эффект, чему я не удивлен.

Есть ли что-то еще, что я могу сделать, чтобы повысить его производительность, кроме снижения количества баллов (что я и делаю)?


person Rudiger    schedule 20.08.2010    source источник


Ответы (2)


Apple знает об этой проблеме, но вряд ли она изменится. По сути, что-то большее, чем пара MKOverlayViews, у вас будут проблемы с производительностью, независимо от вашего оборудования. В основном вам нужно создать подкласс MKPolygonView и объединить все MKPolygon в один MKPolygonView.

Код доступен на форумах Apple, но, поскольку я его не писал, не думаю, что мне следует публиковать его здесь.

person Rudiger    schedule 16.09.2010
comment
Предложение Бинги об упрощении многоугольника немного помогает. Я думаю, что объединение полигонов в один вид идеально в этой ситуации, однако на самом деле вы не можете сделать это в 3.2.x ... Мы можем успешно создать экземпляры MKPolygon и MKPolyline (+ связанные виды) в 3.2, но как только вы попробуйте создать подкласс любого из этих классов, все разваливается из-за условий iOS4 в процессе связывания и тому подобного. - person Greg Combs; 16.09.2010
comment
Я так понял, что оверлеи впервые появились в iOS4 - person Rudiger; 17.09.2010
comment
Да, это правда, но, как ни странно, они по-прежнему доступны для использования на iOS 3.2. Я создаю свое приложение с помощью SDK 4.1 и устанавливаю 3.2 в качестве минимального целевого устройства. После четырехкратной проверки MKPolygon, MKPolyline и связанные с ними представления работают в iOS 3.2... Я даже могу выполнять проверки во время выполнения, чтобы увидеть, доступны ли эти методы и они есть. Я боялся, что оно не пройдет в App Store, но оно прошло! См. скриншоты для iOS 3.2 на странице texlege.com. - person Greg Combs; 11.10.2010
comment
Хех, достаточно честно. Просто для небольшого разъяснения упрощения полигонов я провел кучу тестов, чтобы попытаться исправить проблемы с производительностью при использовании MKPolygons. слишком медленно, а детализация была настолько низкой, что ее не стоило показывать. Подклассы и слияние означали, что мы могли вернуть все детали, и производительность была хорошей даже на 3g, хотя, если вы ориентируетесь на iOS 3.2, это вам не поможет. - person Rudiger; 11.10.2010

Я бы посмотрел на уменьшение количества точек в многоугольнике. смотря откуда вы это взяли. Большинство данных геопространственных манипуляций имеют функции, позволяющие уменьшить количество точек в полигоне. (Все, что вам нужно сделать, это предоставить измерение точности.)

person Bingy    schedule 16.09.2010
comment
На самом деле проблема была не в этом, как предполагалось изначально. Есть еще 800 точек, но если вы объедините MKPolygonView в один, он отлично работает. - person Rudiger; 16.09.2010