Relatorio Fotogrametrico

{% set jm = agg.json_meta %} {% if jm and jm.get('titulo') %}

{{ jm.titulo }}

{% endif %} {% if jm and jm.get('municipio') %} {% set project_title = jm.municipio + '-' + jm.get('state', '') + '-' + jm.get('country', '') %}

{{ project_title }}

{% endif %} {% if jm and (jm.get('region') or jm.get('state_district')) %}
{% if jm.get('region') %} REGIAO: {{ jm.region }} {% endif %} {% if jm.get('state_district') %} DISTRITO: {{ jm.state_district }} {% endif %}
{% endif %} {% if jm and (jm.get('epsg') or jm.get('altitude') is not none) %}
{% if jm.get('epsg') %} EPSG: {{ jm.epsg }} SIRGAS 2000 UTM ZONE {{ jm.get('zona_num', '') }}{{ jm.get('zona_letra', '') }} {% endif %} {% if jm.get('altitude') is not none %} ALTITUDE SRTM: {{ jm.altitude }} m {% endif %}
{% endif %} {% if jm and jm.get('generated_at') %}

Processado em: {{ jm.generated_at }}

{% endif %}

Total de imagens: {{ total_images }}

{% set pc = agg.pqi_classification %} {% if pc %} {% set pqi_score = agg.pqi_mean %} {% if pqi_score is not none %} {% set star_ratio = (pqi_score / 100.0 * 5.0) %} {% set full_stars = star_ratio|int %} {% set remainder = star_ratio - full_stars %} {% set has_half = 1 if remainder >= 0.25 else 0 %} {% set empty_stars = 5 - full_stars - has_half %} {% else %} {% set full_stars = pc.level %} {% set has_half = 0 %} {% set empty_stars = 5 - full_stars %} {% endif %}

PQI geral: {{ pc.score_display }} ({{ pc.label }}) {% for _ in range(full_stars) %}{% endfor %} {% if has_half %}{% endif %} {% for _ in range(empty_stars) %}{% endfor %}

{% else %}

Classificacao PQI indisponivel

{% endif %}
{% if jm and jm.get('logotipo') %}
Logotipo do projeto
{% endif %}
GERAL
Modelo do drone{{ agg.general_info.equipment_models | join(', ') if agg.general_info.equipment_models else 'N/A' }}
Numero de serie do drone{{ agg.general_info.equipment_serial_numbers | join(', ') if agg.general_info.equipment_serial_numbers else 'N/A' }}
Modelo da camera{{ agg.general_info.camera_models | join(', ') if agg.general_info.camera_models else 'N/A' }}
Numero de serie da camera{{ agg.general_info.camera_serial_numbers | join(', ') if agg.general_info.camera_serial_numbers else 'N/A' }}
Versao do firmware{{ agg.general_info.firmware_versions | join(', ') if agg.general_info.firmware_versions else 'N/A' }}
GPS Datum · Status {{ agg.general_info.gps_datum | join(', ') if agg.general_info.gps_datum else 'N/A' }} · {{ agg.general_info.gps_status | join(', ') if agg.general_info.gps_status else 'N/A' }} {% if agg.general_info.gps_status_xmp %} - {{ agg.general_info.gps_status_xmp | join(', ') }} {% endif %}
Tipo de voo · Qualidade {% set alt_class = agg.general_info.altitude_classification_type %} {% set alt_label = agg.general_info.altitude_classification_label %} {% set fq = agg.general_info.flight_quality_label %} {% set fq_type = agg.general_info.flight_quality_type %} {% if alt_class and alt_class != 'unavailable' %} {{ alt_label }} {% else %} Indisponivel {% endif %} {% if fq and fq != 'Indisponivel' %} {{ fq }} {% endif %}
Data de inicio{{ agg.general_info.capture_start }}
Data de termino{{ agg.general_info.capture_end }}
Tempo total de voo{{ agg.general_info.total_flight_time }}
Numero de voos{{ agg.general_info.total_flights }}
Ultimo disparo por camera {% if agg.general_info.last_shutter_per_camera %} {% for item in agg.general_info.last_shutter_per_camera %} {{ item.camera_serial }}: {{ item.last_shutter_count }}{% if not loop.last %}
{% endif %} {% endfor %} {% else %} - {% endif %}
METRICAS {% set m = agg.advanced_analysis.metrics %}
GSD médio {% if per_indicator.get('gsd_cm') and per_indicator['gsd_cm'].get('value_mean') is not none %} {{ '%.2f'|format(per_indicator['gsd_cm']['value_mean']) }} cm {% else %}-{% endif %} {% set gsd = per_indicator.get('gsd_cm', {}) %} {% if gsd.get('value_p5') is not none and gsd.get('value_p95') is not none and gsd.get('value_percentile_range') is not none %} · p5%: {{ '%.2f'|format(gsd['value_p5']) }} cm · p95%: {{ '%.2f'|format(gsd['value_p95']) }} cm · variação: {{ '%.2f'|format(gsd['value_percentile_range']) }} cm {% endif %} {% set gsd_stab = agg.general_info.gsd_stability_label %} {% if gsd_stab and gsd_stab != 'Indisponivel' %} {{ gsd_stab }} {% endif %}
Altitude Relativa {% if m.relative_altitude_mean is not none %} {{ '%.2f'|format(m.relative_altitude_mean) }} m {% else %}-{% endif %} {% if m.relative_altitude_p5 is not none and m.relative_altitude_p95 is not none and m.relative_altitude_range is not none %} · p5%: {{ '%.2f'|format(m.relative_altitude_p5) }} m · p95%: {{ '%.2f'|format(m.relative_altitude_p95) }} m · variação: {{ '%.2f'|format(m.relative_altitude_range) }} m {% endif %}
Altura do voo (LRF) {% if m.lrf_target_mean is not none %} {{ '%.2f'|format(m.lrf_target_mean) }} m {% else %}-{% endif %} {% if m.lrf_target_p5 is not none and m.lrf_target_p95 is not none and m.lrf_target_range is not none %} · p5%: {{ '%.2f'|format(m.lrf_target_p5) }} m · p95%: {{ '%.2f'|format(m.lrf_target_p95) }} m · variação: {{ '%.2f'|format(m.lrf_target_range) }} m {% endif %}
Altitude do solo {% if m.ground_elevation_mean is not none %} {{ '%.2f'|format(m.ground_elevation_mean) }} m {% else %}-{% endif %} {% if m.ground_elevation_p5 is not none and m.ground_elevation_p95 is not none and m.ground_elevation_range is not none %} · p5%: {{ '%.2f'|format(m.ground_elevation_p5) }} m · p95%: {{ '%.2f'|format(m.ground_elevation_p95) }} m · variação: {{ '%.2f'|format(m.ground_elevation_range) }} m {% endif %} {% set sc = agg.general_info.slope_classification %} {% set sp = agg.general_info.slope_pct %} {% if sc and sc != 'Indisponivel' %} {{ sc }} ({{ sp }}%) {% endif %}
Distância entre fotos (m) {% if m.dist3d_prev_mean is not none %} {{ '%.2f'|format(m.dist3d_prev_mean) }} m {% else %}-{% endif %} {% if m.dist3d_prev_p5 is not none and m.dist3d_prev_p95 is not none and m.dist3d_prev_range is not none %} · p5%: {{ '%.2f'|format(m.dist3d_prev_p5) }} m · p95%: {{ '%.2f'|format(m.dist3d_prev_p95) }} m · variação: {{ '%.2f'|format(m.dist3d_prev_range) }} m {% endif %}
Idade do sinal RTK {% if m.rtk_diff_age_mean is not none %} {{ '%.2f'|format(m.rtk_diff_age_mean) }}s {% else %}-{% endif %} {% if m.rtk_diff_age_p5 is not none and m.rtk_diff_age_p95 is not none and m.rtk_diff_age_range is not none %} · p5%: {{ '%.2f'|format(m.rtk_diff_age_p5) }}s · p95%: {{ '%.2f'|format(m.rtk_diff_age_p95) }}s · variação: {{ '%.2f'|format(m.rtk_diff_age_range) }}s {% endif %} {% if m.rtk_diff_age_mean is not none %} {% if m.rtk_diff_age_mean == 0 %} Voo sem RTK {% elif m.rtk_diff_age_range is not none and m.rtk_diff_age_range > 1.0 %} RTK Instavel {% elif m.rtk_diff_age_range is not none %} RTK Estavel {% endif %} {% endif %}
Estabilidade do sinal RTK {{ m.rtk_stability_class if m.rtk_stability_class is not none else '-' }} {% if m.rtk_stability_mean is not none %}(media {{ '%.2f'|format(m.rtk_stability_mean) }}%){% endif %}
Precisão RTK efetiva {% if m.rtk_effective_precision_raw is not none %}{{ m.rtk_effective_precision_raw }}{% elif m.rtk_effective_precision_mean is not none %}{{ '%.3f'|format(m.rtk_effective_precision_mean) }} m (max {{ '%.3f'|format(m.rtk_effective_precision_max) }} m){% else %}-{% endif %}
Desalinhamento do gimbal {% if m.gimbal_offset_mean is not none %} {{ '%.2f'|format(m.gimbal_offset_mean) }}° {% else %}-{% endif %} {% if m.gimbal_offset_p5 is not none and m.gimbal_offset_p95 is not none and m.gimbal_offset_range is not none %} · p5%: {{ '%.2f'|format(m.gimbal_offset_p5) }}° · p95%: {{ '%.2f'|format(m.gimbal_offset_p95) }}° · variação: {{ '%.2f'|format(m.gimbal_offset_range) }}° {% endif %}
Drone Roll medio (°) {% if m.flight_roll_mean is not none %} {{ '%.2f'|format(m.flight_roll_mean) }}° {% else %}-{% endif %} {% if m.flight_roll_p5 is not none and m.flight_roll_p95 is not none and m.flight_roll_range is not none %} · p5%: {{ '%.2f'|format(m.flight_roll_p5) }}° · p95%: {{ '%.2f'|format(m.flight_roll_p95) }}° · variação: {{ '%.2f'|format(m.flight_roll_range) }}° {% endif %}
Drone Yaw medio (°) {% if m.flight_yaw_mean is not none %} {{ '%.2f'|format(m.flight_yaw_mean) }}° {% else %}-{% endif %} {% if m.flight_yaw_p5 is not none and m.flight_yaw_p95 is not none and m.flight_yaw_range is not none %} · p5%: {{ '%.2f'|format(m.flight_yaw_p5) }}° · p95%: {{ '%.2f'|format(m.flight_yaw_p95) }}° · variação: {{ '%.2f'|format(m.flight_yaw_range) }}° {% endif %}
Drone Pitch medio (°) {% if m.flight_pitch_mean is not none %} {{ '%.2f'|format(m.flight_pitch_mean) }}° {% else %}-{% endif %} {% if m.flight_pitch_p5 is not none and m.flight_pitch_p95 is not none and m.flight_pitch_range is not none %} · p5%: {{ '%.2f'|format(m.flight_pitch_p5) }}° · p95%: {{ '%.2f'|format(m.flight_pitch_p95) }}° · variação: {{ '%.2f'|format(m.flight_pitch_range) }}° {% endif %}
INSIGHTS AGRO {% set m = agg.advanced_analysis.metrics %} {% set mb_level = m.motion_blur_mean %} {% if mb_level is not none %} {% if mb_level <= 0.3 %}{% set mb_class = 'Baixo' %} {% elif mb_level <= 0.5 %}{% set mb_class = 'Moderado' %} {% elif mb_level <= 0.8 %}{% set mb_class = 'Alto' %} {% elif mb_level <= 1.2 %}{% set mb_class = 'Critico' %} {% else %}{% set mb_class = 'Critico' %} {% endif %} {% else %}{% set mb_class = '-' %} {% endif %}
Area estimada coberta (ha){{ m.estimated_area_ha if m.estimated_area_ha is not none else 'N/A' }}
Inconsistencia de iluminacao{{ m.light_inconsistent_pct }}%
Classes de luz presentes {% if m.light_source_classes %} {% for c in m.light_source_classes %}{{ c.label_pt }} ({{ c.count }}) {{ c.pct }}%{% if not loop.last %}
{% endif %}{% endfor %} {% else %}N/A{% endif %}
Sobreposicao frontal abaixo de 60%{% if m.overlap_below_ideal_pct is not none %}{{ '%.2f'|format(m.overlap_below_ideal_pct) }}%{% else %}-{% endif %}
Sobreposicao frontal media {% if m.overlap_mean is not none %} {{ '%.2f'|format(m.overlap_mean) }} % {% else %}-{% endif %} {% if m.overlap_p5 is not none and m.overlap_p95 is not none and m.overlap_range is not none %} · p5%: {{ '%.2f'|format(m.overlap_p5) }} % · p95%: {{ '%.2f'|format(m.overlap_p95) }} % · variação: {{ '%.2f'|format(m.overlap_range) }} % {% endif %}
Velocidade media {% if m.speed_ms_mean is not none %} {{ '%.2f'|format(m.speed_ms_mean) }} m/s {% else %}-{% endif %} {% if m.speed_ms_p5 is not none and m.speed_ms_p95 is not none and m.speed_ms_range is not none %} · p5%: {{ '%.2f'|format(m.speed_ms_p5) }} m/s · p95%: {{ '%.2f'|format(m.speed_ms_p95) }} m/s · variação: {{ '%.2f'|format(m.speed_ms_range) }} m/s {% endif %}
Direcao de voo inconsistente{{ m.yaw_inconsistent_pct if m.yaw_inconsistent_pct is not none else '-' }}%
Motion Blur medio {% if m.motion_blur_mean is not none %} {{ '%.2f'|format(m.motion_blur_mean) }} ({{ mb_class }}) {% else %}-{% endif %} {% if m.motion_blur_p5 is not none and m.motion_blur_p95 is not none and m.motion_blur_range is not none %} · p5%: {{ '%.2f'|format(m.motion_blur_p5) }} · p95%: {{ '%.2f'|format(m.motion_blur_p95) }} · variação: {{ '%.2f'|format(m.motion_blur_range) }} {% endif %}
Indice de qualidade (PQI){% if m.pqi_last_quartile_mean is not none %}{{ '%.2f'|format(m.pqi_last_quartile_mean) }}{% else %}-{% endif %}
Tamanho medio do arquivo{% if m.size_mb_mean is not none %}{{ '%.2f'|format(m.size_mb_mean) }} MB{% else %}-{% endif %}
RESUMO DE ALERTAS ({{ agg.alerts_count if agg.alerts_count is not none else agg.advanced_analysis.critical_alerts|length }})
{% set severity_data = agg.alerts_severity if agg.alerts_severity else {} %} {% set s_crit = severity_data.get('CRITICO', 0) %} {% set s_alert = severity_data.get('ALERTA', 0) %} {% set s_info = severity_data.get('INFO', 0) %} {% if s_crit > 0 or s_alert > 0 or s_info > 0 %}
Criticos: {{ s_crit }} Alertas: {{ s_alert }} Info: {{ s_info }} Total: {{ agg.alerts_count }}
{% endif %} {% set summary = agg.alerts_summary if agg.alerts_summary else {} %} {% if summary %}
{% for cat, counts in summary.items() %} {{ cat }}: {{ counts.get('total', 0) }} {% endfor %}
{% endif %}
{% if agg.alerts and agg.alerts|length > 0 %} {% for a in agg.alerts %} {% if a.flight_ids and a.flight_ids|length > 0 %} {% endif %} {% endfor %}
SeveridadeCategoriaTituloDetalheImpactoAcaoAfilhados (%)
{{ a.severity }} {{ a.category }} {{ a.title }} {{ a.detail }} {{ a.impact }} {{ a.action }} {% if a.total_count > 0 %} {{ a.affected_count }}/{{ a.total_count }} ({{ a.affected_pct }}%) {% endif %}
Voos afetados: {% for fid in a.flight_ids %} {% set flight_folder = flight_folder_map.get(fid) %} {% if flight_folder %} {{ fid }}{% if not loop.last %}, {% endif %} {% elif base_folder %} {{ fid }}{% if not loop.last %}, {% endif %} {% else %} {{ fid }}{% if not loop.last %}, {% endif %} {% endif %} {% endfor %} {% if a.photos and a.photos|length > 0 %}
Fotos: {% for photo in a.photos %} {% if photo_path_map.get(photo) %} {{ photo }}{% if not loop.last %}, {% endif %} {% else %} {{ photo }}{% if not loop.last %}, {% endif %} {% endif %} {% endfor %} {% endif %}
{% else %} {% if agg.general_info %} {% endif %} {% if agg.advanced_analysis and agg.advanced_analysis.critical_alerts %} {% for a in agg.advanced_analysis.critical_alerts %} {% endfor %} {% endif %}
SeveridadeTituloDetalheImpactoAcao
{{ 'CRITICO' if agg.general_info.dewarp_status_type == 'critical' else ('ALERTA' if agg.general_info.dewarp_status_type == 'warn' else 'INFO') }} Dewarp{{ agg.general_info.dewarp_status_message }} Impacta diretamente geometrias e qualidade radiométrica da reconstrução. Garantir dewarping habilitado em 100% da missão.
{{ 'ALERTA' if agg.general_info.altitude_status_type == 'warn' else 'INFO' }} Altitude incompleta{{ agg.general_info.altitude_status_message }} Afeta consistência altimétrica, GSD e sobreposição prevista. Corrigir captura de Alt (MRK) e AbsoluteAltitude antes do processamento.
{{ a.severity }} {{ a.title }}{{ a.detail }}{{ a.impact }}{{ a.action }}
{% endif %}
PROCESSAMENTO {% set p = agg.processing %} {% if p.total_seconds is not none %}
InicioFimTotal
{{ p.pipeline_start[:19] if p.pipeline_start else 'N/A' }} {{ p.pipeline_end[:19] if p.pipeline_end else 'N/A' }} {{ p.total_formatted }}
({{ '%.0f'|format(p.total_seconds) }}s)
{% endif %} {% if p.stages %}
{% set max_sec = p.stages | map(attribute='duration_seconds') | reject('none') | max %} {% set total_sec = p.total_seconds %} {% for stage in p.stages %}
{{ stage.label }}{% if not stage.present %} (x){% endif %}
{% if stage.duration_seconds is not none and max_sec and max_sec > 0 %} {% set pct = (stage.duration_seconds / max_sec * 100) %} {% set pct_total = (stage.duration_seconds / total_sec * 100) if total_sec and total_sec > 0 else 0 %}
{{ stage.duration_formatted }} ({{ '%.0f'|format(pct_total) }}%)
{% endif %}
{% endfor %}
{% endif %} {% if p.missing_stages %}

Ausentes: {{ p.missing_stages | join(', ') }}

{% endif %}
NIVEIS (PQI) {% set pqi_dist = agg.pqi_level_distribution %} {% if pqi_dist %}
Distribuicao por nivel de qualidade: {{ pqi_dist.get(1, 0) }} {{ pqi_dist.get(2, 0) }} {{ pqi_dist.get(3, 0) }} {{ pqi_dist.get(4, 0) }} {{ pqi_dist.get(5, 0) }}
{% endif %}
AGRUPAMENTO POR VOO - SIMPLES
{% if agg.show_column_lrf %}{% endif %} {% for f in agg.per_flight %} {% if agg.show_column_lrf %}{% endif %} {% endfor %}
VooImagensInicioFimTempo km/hm/s Hectares Altura RelativaAltitude GSD (cm)Distancia SoloTemperatura Sensor Gimbal Offset (°) Sobreposição (%) Estab. RTK Motion Blur Distancia (m)
{{ f['flight_id'] }}{{ f['images'] }} {{ f['start'] }}{{ f['end'] }}{{ f['flight_time'] }} {% if f['avg_speed3d_kmh'] is not none %}{{ '%.2f'|format(f['avg_speed3d_kmh']) }}{% else %}-{% endif %} {% if f['avg_speed3d_ms'] is not none %}{{ '%.2f'|format(f['avg_speed3d_ms']) }}{% else %}-{% endif %} {% if f['estimated_area_ha'] is not none %}{{ '%.2f'|format(f['estimated_area_ha']) }}{% else %}-{% endif %} {% if f['avg_relative_altitude'] is not none %}{{ '%.2f'|format(f['avg_relative_altitude']) }}{% else %}-{% endif %} {% if f['altitude_solo'] is not none %}{{ '%.2f'|format(f['altitude_solo']) }}{% else %}-{% endif %} {% if f['level5_means'].get('GroundSampleDistanceCm') is not none %}{{ '%.2f'|format(f['level5_means'].get('GroundSampleDistanceCm')) }}{% else %}-{% endif %}{% if f['avg_lrf_target_distance'] is not none %}{{ '%.2f'|format(f['avg_lrf_target_distance']) }}{% else %}-{% endif %}{% if f['avg_sensor_temperature'] is not none %}{{ '%.2f'|format(f['avg_sensor_temperature']) }}{% else %}-{% endif %} {% if f['level5_means'].get('GimbalOffset') is not none %}{{ '%.2f'|format(f['level5_means'].get('GimbalOffset')) }}°{% else %}-{% endif %} {% if f['level5_means'].get('PredictedOverlap') is not none %}{{ '%.2f'|format(f['level5_means'].get('PredictedOverlap')) }}%{% else %} {%- if f['level5_means'].get('FOverlap') is not none %}{{ '%.2f'|format(f['level5_means'].get('FOverlap')) }}%{% else %}-{% endif %} {% endif %} {% if f['level5_means'].get('RtkStabilityScore') is not none and f['level5_means'].get('RtkStabilityScore') >= 95 %}Estavel{% elif f['level5_means'].get('RtkStabilityScore') is not none and f['level5_means'].get('RtkStabilityScore') >= 85 %}Moderado{% elif f['level5_means'].get('RtkStabilityScore') is not none %}Instavel{% else %}-{% endif %} {% if f['level5_means'].get('MotionBlurRisk') is not none %}{{ '%.3f'|format(f['level5_means'].get('MotionBlurRisk')) }}{% else %}-{% endif %} {% if f['avg_dist3d_previous'] is not none %}{{ '%.2f'|format(f['avg_dist3d_previous']) }}{% else %}-{% endif %}
{% set simple_level5_keys = ['GroundSampleDistanceCm', 'GimbalOffset', 'PredictedOverlap', 'FOverlap', 'RtkStabilityScore', 'MotionBlurRisk'] %} {% set advanced_exclude_level5_keys = ['3DSpeed', 'Alt', 'GroundElevation', 'OrthorectificationPotential', 'Foto', 'PhotogrammetryQualityIndex', 'Speed3dKmh'] %}
AGRUPAMENTO POR VOO - AVANÇADO
{% if agg.show_column_flight_roll %}{% endif %} {% if agg.show_column_flight_yaw %}{% endif %} {% if agg.show_column_flight_pitch %}{% endif %} {% if agg.show_column_iso %}{% endif %} {% if agg.show_column_shutter %}{% endif %} {% if agg.show_column_wb_cct %}{% endif %} {% for col in agg.flight_level5_columns %} {% if agg['show_column_level5_' ~ col.key] and col.key not in simple_level5_keys and col.key not in advanced_exclude_level5_keys %}{% endif %} {% endfor %} {% for f in agg.per_flight %} {% if agg.show_column_flight_roll %}{% endif %} {% if agg.show_column_flight_yaw %}{% endif %} {% if agg.show_column_flight_pitch %}{% endif %} {% if agg.show_column_iso %}{% endif %} {% if agg.show_column_shutter %}{% endif %} {% if agg.show_column_wb_cct %}{% endif %} {% for col in agg.flight_level5_columns %} {% if agg['show_column_level5_' ~ col.key] and col.key not in simple_level5_keys and col.key not in advanced_exclude_level5_keys %} {% endif %} {% endfor %} {% endfor %}
VooDrone RollDrone YawDrone PitchISOObturadorTemp Cor (K){{ col.label }}
{{ f['flight_id'] }}{% if f['avg_flight_roll'] is not none %}{{ '%.2f'|format(f['avg_flight_roll']) }}°{% else %}-{% endif %}{% if f['avg_flight_yaw'] is not none %}{{ '%.2f'|format(f['avg_flight_yaw']) }}°{% else %}-{% endif %}{% if f['avg_flight_pitch'] is not none %}{{ '%.2f'|format(f['avg_flight_pitch']) }}°{% else %}-{% endif %}{% if f['avg_iso'] is not none %}{{ '%.0f'|format(f['avg_iso']) }}{% else %}-{% endif %}{% if f['avg_shutter_speed_text'] and f['avg_shutter_speed_text'] != 'N/A' %}{{ f['avg_shutter_speed_text'] }}{% else %}-{% endif %}{% if f['avg_white_balance_cct'] is not none %}{{ '%.0f'|format(f['avg_white_balance_cct']) }}{% else %}-{% endif %}{% if f['level5_means'].get(col.key) is not none %}{{ '%.2f'|format(f['level5_means'].get(col.key)) }}{% else %}-{% endif %}
AGREGADOS
N1 N2 N3 N4 N5 | abra Ranges para ver os valores por cor
{% for ind, stat in per_indicator.items() %} {% endfor %}
IndicadorMediaDesvioMaxMinRangeDistribuicao
{{ stat.label }}{{ stat.threshold_type }} {{ stat.value_mean if stat.value_mean is not none else '-' }} {{ stat.value_std if stat.value_std is not none else '-' }} {{ stat.value_max if stat.value_max is not none else '-' }} {{ stat.value_min if stat.value_min is not none else '-' }} {{ stat.value_range if stat.value_range is not none else '-' }} {% set d1 = stat.dist.get(1, 0) %} {% set d2 = stat.dist.get(2, 0) %} {% set d3 = stat.dist.get(3, 0) %} {% set d4 = stat.dist.get(4, 0) %} {% set d5 = stat.dist.get(5, 0) %} {% set total = d1 + d2 + d3 + d4 + d5 %}
{% if d1 > 0 and total > 0 %}
N1 {{ d1 }} ({{ ((d1 / total) * 100)|round(0)|int }}%)
{% endif %} {% if d2 > 0 and total > 0 %}
N2 {{ d2 }} ({{ ((d2 / total) * 100)|round(0)|int }}%)
{% endif %} {% if d3 > 0 and total > 0 %}
N3 {{ d3 }} ({{ ((d3 / total) * 100)|round(0)|int }}%)
{% endif %} {% if d4 > 0 and total > 0 %}
N4 {{ d4 }} ({{ ((d4 / total) * 100)|round(0)|int }}%)
{% endif %} {% if d5 > 0 and total > 0 %}
N5 {{ d5 }} ({{ ((d5 / total) * 100)|round(0)|int }}%)
{% endif %}
Ranges
N1: {{ stat.level_ranges.get('1', '-') }} N2: {{ stat.level_ranges.get('2', '-') }} N3: {{ stat.level_ranges.get('3', '-') }} N4: {{ stat.level_ranges.get('4', '-') }} N5: {{ stat.level_ranges.get('5', '-') }}
DETALHES POR IMAGEM (piores {{ (worst_results or results[:30])|length }})
{% for r in (worst_results or results[:30]) %} {% endfor %}
ArquivoPQIGSDMotion BlurRTK Eff. Prec.Gimbal OffsetYaw ErrorOverlapSpeed Variac.Inc. Angle
{{ r.filename }} {{ r.level5_values.get('PhotogrammetryQualityIndex', r.values.get('photogrammetry_quality_index', '-')) }} {{ r.values.get('gsd_cm', '-') }} {{ r.messages.get('motion_blur_risk', '-') }} {{ r.level5_values.get('RtkEffectivePrecision', '-') }} {% set gim = r.level5_values.get('GimbalOffset') %}{% if gim is not none %}{{ '%.1f°'|format(gim|float) }}{% else %}-{% endif %} {% set yaw = r.level5_values.get('YawAlignmentError') %}{% if yaw is not none %}{{ '%.1f°'|format(yaw|float) }}{% else %}-{% endif %} {% set ov = r.level5_values.get('FOverlap') or r.level5_values.get('PredictedOverlap') %}{% if ov is not none %}{{ '%.0f%%'|format(ov|float) }}{% else %}-{% endif %} {% set sv = r.level5_values.get('SpeedVariationIndex') %}{% if sv is not none %}{{ '%.3f'|format(sv|float) }}{% else %}-{% endif %} {% set ia = r.level5_values.get('IncidenceAngle') %}{% if ia is not none %}{{ '%.1f°'|format(ia|float) }}{% else %}-{% endif %}
{% set has_temp = charts.temp_line is defined %} {% set has_lrf = charts.lrf_line is defined %} {% set has_iso = charts.iso_line is defined %} {% set temp_x_title = charts.temp_line.get('x_axis_title', 'Foto #') if has_temp else 'Foto #' %} {% set lrf_x_title = charts.lrf_line.get('x_axis_title', 'Foto #') if has_lrf else 'Foto #' %} {% set iso_x_title = charts.iso_line.get('x_axis_title', 'Foto #') if has_iso else 'Foto #' %} {% if has_temp and has_lrf and has_iso %}
{{ charts.temp_line.title }}
{{ charts.lrf_line.title }}
{{ charts.iso_line.title }}
{% elif has_temp and has_lrf %}
{{ charts.temp_line.title }}
{{ charts.lrf_line.title }}
{% elif has_temp %}
{{ charts.temp_line.title }}
{% elif has_lrf %}
{{ charts.lrf_line.title }}
{% elif has_iso %}
{{ charts.iso_line.title }}
{% endif %} {% set has_temp_hourly = charts.temp_hourly_line is defined %} {% set has_lrf_hourly = charts.lrf_hourly_line is defined %} {% set has_iso_hourly = charts.iso_hourly_line is defined %} {% set temp_interval = charts.temp_hourly_line.get('interval_label', 'Hora') if has_temp_hourly else 'Hora' %} {% set lrf_interval = charts.lrf_hourly_line.get('interval_label', 'Hora') if has_lrf_hourly else 'Hora' %} {% set iso_interval = charts.iso_hourly_line.get('interval_label', 'Hora') if has_iso_hourly else 'Hora' %} {% if has_temp_hourly and has_lrf_hourly and has_iso_hourly %}
{{ charts.temp_hourly_line.title }}
{{ charts.lrf_hourly_line.title }}
{{ charts.iso_hourly_line.title }}
{% elif has_temp_hourly and has_lrf_hourly %}
{{ charts.temp_hourly_line.title }}
{{ charts.lrf_hourly_line.title }}
{% elif has_temp_hourly %}
{{ charts.temp_hourly_line.title }}
{% elif has_lrf_hourly %}
{{ charts.lrf_hourly_line.title }}
{% elif has_iso_hourly %}
{{ charts.iso_hourly_line.title }}
{% endif %}
MAPA {{ map_snippet | safe }}