2013-08-28 2 views
0

После бесконечного поиска я ударил стену. У меня есть карта OpenLayers, которая использует много ярлыков. Мои два варианта - использовать Popup Class или помеченную Vector Feature. Я попытался использовать класс Popup, но при обновлении уровня (проверено с помощью профилирования процессора Chrome Developer) чрезвычайно важно, чтобы учетная запись DOM составляла примерно 75% загрузки процессора. После перехода от всплывающих окон к векторным функциям с меткой весь вес процессора сместился с DOM, и теперь все работает плавно. Единственная проблема, хотя, я не могу получить сплошную цветную коробку за этикеткой.OpenLayers - нарисуйте коробку вокруг обозначенной векторной функции

Этикетка отображается внутри текста и элемента ssg tspan. Из того, что я прочитал, нет способа использовать атрибуты текста или tspan для указания свойства backcolor. Это бесконечный поиск. Я мог бы добавить прямоугольник вокруг текстового элемента, используя getBBox, но OpenLayers управляет элементом tspan и манипулирует этим, как и OpenLayers, кажется невозможным.

Далее я подумал, что могу добавить помеченную векторную функцию, которая была прямоугольником. Здесь, однако, нет способа нарисовать прямоугольник с точным размером метки и за ней. Может быть, это просто невозможно. Надеюсь, один из вас знает решение. Благодарю.

ответ

0

Я понял. Однажды я некоторое время смотрел на OpenLayers на GitHub, я понял это, глядя на класс Popup. Во-первых, autosize должно быть установлено в false, а свойство size должно быть добавлено в дополнение к содержимому. Поскольку contentize является частью конструктора, вы должны явно указать popup.size после инициализации. Это предотвратит выполнение метода setSize(), который уменьшит нагрузку примерно на 50%. Затем я пошел и модифицировал класс и удалил огромное количество обработчиков событий. Эти два метода уменьшили нагрузку на процессор примерно на 50-75%.

Смежные вопросы