Total de distância na forma alinhado com a geometria entre reinícios a zero
shape_dist_traveled_delta_mismatches_haversine_block
Campos que serão validados nesta regra
| Nome do Campo | Tipo | Presença | Descrição |
|---|---|---|---|
shape_id | ID | Obrigatório | Identifica um formato. |
shape_pt_lon | Longitude | Obrigatório | Longitude de um ponto da forma. |
shape_pt_lat | Latitude | Obrigatório | Latitude de um ponto da forma. |
shape_pt_sequence | Número inteiro não negativo | Obrigatório | Sequência em que os pontos da forma se ligam para formar a forma. Os valores devem aumentar ao longo do percurso, mas não têm de ser consecutivos. Exemplo: Se a forma " A_shp" tiver três pontos na sua definição, o ficheiro shapes.txt pode conter estes registos para definir a forma:shape_id,shape_pt_lat,shape_pt_lon,shape_pt_sequenceA_shp,37.6195 6,-122.48161,0A_shp,37.64430,-122.41070,6A_shp,37.65863,-122.30839,11 |
O que esta validação faz
Dados de shapes.txt, por forma (shape_id):
- Junta os pontos que têm
shape_id,shape_pt_sequence,shape_pt_lateshape_pt_lonpreenchidos. - Ordena os pontos pela sequência ao longo do percurso.
- Parte a forma em blocos: cada bloco começa num ponto com
shape_dist_traveled = 0e vai até ao último ponto antes do próximo 0 (ou até ao fim da lista).
Dentro de cada bloco:
- Entre vértices consecutivos com
shape_dist_traveleddefinido nos dois e não nulo no par, calcula a distância em linha sobre a esfera (Haversine) e compara com o incremento deshape_dist_traveledentre esses dois pontos, convertido para metros (a conversão usa o máximo deshape_dist_travelednaquela forma para fixar a unidade). - Usa uma tolerância em metros.
Primeiro todos os segmentos relevantes têm de ficar dentro da tolerância. Só nesse caso soma as distâncias geodésicas desses segmentos e compara a soma com o shape_dist_traveled do último ponto do bloco (também em metros). Se a diferença absoluta for maior que a tolerância, obtém-se o incumprimento (regra shape_dist_traveled_delta_mismatches_haversine_block, mensagem shape_distances_validation.invalid_distances).
O que o erro indica
A mensagem aponta uma forma e valores (esperado vs. soma geodésica vs. diferença). Significa: num bloco entre dois reinícios em zero, as distâncias acumuladas declaradas não estão consistentes com a geometria dos pontos - já depois de cada troço ter sido aceite dentro da tolerância, o total ainda não fecha com o declarado no fim do bloco.
Passa
- Para um bloco dado: todos os segmentos testados ≤ tolerância e |soma geodésica − total declarado no último ponto| ≤ tolerância.
- Registos sem dados mínimos para entrar no agrupamento (
shape_idvazio ou falta de coordenadas), não avaliados por esta regra nesse critério. - Situações em que não há bloco processável até ao teste do total (por exemplo, sem início de bloco em
0, ou a lógica nunca acumula distância para o total): não surge o erro de total.
Falha
- Total do bloco fora da tolerância: os segmentos passaram um a um, mas a soma das distâncias geodésicas diverge do
shape_dist_traveledfinal do bloco além do limiar. - Segmento fora da tolerância: não se chega ao teste do total e não aparece esta mensagem de discrepância global - o problema está nos incrementos entre pares de vértices.