Azimlib0.3.0 · documentation

Reutilização do viewport e descarte conservador

O desenho mantém os mesmos dados e Artists. Não simplifica coordenadas nem muda fonte, estilo, DPI ou distância da escala.

Limites reutilizáveis

Geometry e FeatureCollection, imutáveis, calculam seus limites uma vez, quando solicitados. Edição de uma linha cria outra geometria/coleção e recebe outros limites. A serialização GeoJSON, igualdade e campos públicos não mudam.

Viewport reutiliza a mesma amostragem dos limites projetados, com cache de 128 combinações projeção/extent. O tamanho/posição do canvas não entra na chave: escala e offsets continuam sendo calculados para cada box. Parâmetros diferentes de projeção e novas extensões têm entradas distintas; evicção recalcula o resultado. Somente as seis classes internas exatas e imutáveis participam. Projeções customizadas/subclasses continuam chamando forward a cada construção.

Este cache guarda quatro limites. Separadamente, o cache de paths projetados reutiliza vértices de linhas/polígonos em armazenamento limitado; nenhum guarda cenas.

Descarte por vista

fig.to_scene(cull=True) pode omitir linhas/polígonos inteiramente fora do viewport em Mercator e equiretangular. O teste usa uma caixa projetada conservadora, com folga para espessura, caps/junções e rasterização. Linhas atravessando o mapa e polígonos que o contêm continuam sendo desenhados, mesmo que nenhum vértice esteja dentro da vista. Buracos e hachuras permanecem iguais.

Não descartamos automaticamente geometrias com envelopes ambíguos no antimeridiano, amplitude longitudinal de 180° ou mais, projeções diferentes, curvas, arrowheads, marcadores ou símbolos. Scatter, campos, vetores e labels continuam pelo caminho existente. GeometryCollection examina seus filhos. As chamadas de feature_style e os índices originais de cores não são alterados.

Há agora um índice espacial próprio para coleções elegíveis com pelo menos 64 features. Ele consulta caixas projetadas e mantém a varredura nos casos de callback/estilo/projeção que exigem o caminho completo. Listas de overrides ainda são examinadas para determinar a folga. Em bases densas com muitas features visíveis, os gargalos podem continuar no raster.

Exportação e navegação

savefig utiliza o descarte conservador; um override de DPI menor que o da Figure conserva a cena completa para evitar diferenças na folga raster. O desktop recompõe os dados na nova extensão e usa culling em cada desenho. Histórico, escala, rosa/seta, insets e foco do minimapa seguem o estado dos Axes.

to_scene() mantém cull=False por padrão, e to_html() usa a cena completa. O HTML portátil transforma uma cena exportada sem consultar novamente os dados; omitir geometria nessa cena faria áreas desaparecerem durante o pan. O caminho to_svg()/repr inline também continua completo; o SVG de savefig pode ter menos paths invisíveis com a mesma área pintada.

Validação e reprodução

As regressões comparam PNG completo/otimizado, cruzamentos, polígonos envolventes, buracos/hachuras, overscan, antimeridiano, longitude não normalizada, subclasses, parâmetros/resize, evicção, callbacks, cores por feature, edição, histórico, insets e minimapa. A referência anterior do próprio viewport é mantida somente no tool de desenvolvimento, fora do runtime/wheel.

python tools/compare_composition.py --repeats 4 --output composition.json

Os três modos são alternados: viewport anterior sem cache, cache com cena completa e cache com descarte. Todos usam os limites imutáveis atuais e o mesmo renderer. A medição inclui layout/composição; PNG é comparado depois das amostras. O caso dense é uma malha de 2.501 polígonos sintéticos, sem validade territorial. Não mede latência real da GUI nem memória nativa. Veja resultados.