-
Notifications
You must be signed in to change notification settings - Fork 1
Testes para o CLP
testes e introdução
Sintaxe: "CLP:
" + UF + "-
" Cidade3letras + Classificação + ViaCódigo + "-
" + DistânciaVia
Variável | Descrição |
---|---|
UF | Sigla 2 letras oficial do estado |
Cidade3letras | Sigla 3 letras da cidade |
Classificação | Separador e jurisdição:0 =via federal1 =via estadual2 =via municipal3 =via particular4 =trilha marginal a rio ou ferrovia5 =via secundária não-oficial6 ou - =via referida por CEP |
ViaCódigo | Número inteiro atribuído por autoridade da respectiva jurisdição, representado na base-34. |
DistânciaVia | Distância em metros percorrida ao longo da via até o portão. Prefixo k permite expressar quilômetros. |
Exemplos:
Local e endereço usual | CLP (canônico destacado) |
---|---|
Portão empresa de logística em Guarulhos Rodovia Fernão Dias, Km 201 • CEP 07053-171 |
SP-GUA0B7-k201/11 SP-GUA-7053171-k201/1Y BR381-k201/2E
|
Cancelas do Pedágio em Atibaia Rodovia Fernão Dias, Km 65,7 |
SP-ATB0B7-65700/23 |
Portão principal da Hípica em São Paulo Rua Quintana, 206 • CEP 04569-010 |
SP-SPA-456901-206/10 |
Portão principal de parque em Campinas Av. Dr. Heitor Penteado, 1671 • CEP 13087-000 |
SP-CAM-3087-1671/19 |
<?php
$rodoCods = ['BR-381'=>'B7', 'BR-116'=>'']; // base34 (I e O viram Y e Z)
$AMOSTRAS = [
'SP-GUA-7053171-k201'=>'Rodovia Fernão Dias, Km 201 • CEP 07053-171', // portão empresa de logística em Guarulhos
'BR381-k201'=>'Rodovia Fernão Dias, Km 201',
'SP-GUA0B7-k201'=>'Rodovia Fernão Dias, Km 201 • Guarulhos - SP', // forma canônica
'SP-GUA0B7-k201'=>'Rodovia Fernão Dias, Km 201 • Guarulhos - SP', // forma canônica
'SP-ATB0B7-65700'=>'Rodovia Fernão Dias, Km 65,7 • Atibaia - SP', // cancelas do Pedágio
'SP-SPA-456901-207'=>'Rua Quintana, 206 • CEP 04569-010', // portaria da Hípíca em São Paulo
'SP-CAM-3087-1671'=>'Av. Dr. Heitor Penteado, 1671 • CEP 13087-000', // portão principal do parque em Campinas
];
foreach($AMOSTRAS as $CLP=>$END) {
$x= strtoupper(base_convert( hash('crc32b', $CLP), 16, 34 ));
$v=substr( str_replace(["I","O"],["Y","Z"],$x) , 0, 2);
print "\nCLP:$CLP/$v\t($END)";
}
print "\n-------\n";
$url = 'https://github.com/datasets-br/city-codes/raw/master/data/br-city-codes.csv';
// CARGA:
$NOM = []; // Nome Oficial de Município
if (($handle = fopen($url, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) if (count($data)>2 && $data[1]=='SP') $NOM[]=$data[0];
fclose($handle);
} else
exit("\nERRO ao abrir planilha das cidades em \n\t$url\n");
$NF[]=[]; // Abrev-Nome
// // PROCESSO 1
$N = array_map(
function ($x) { $x=strtoupper(desacent($x)); return ['',1,$x,$x]; }
// 0=usado, 1=palavras, 2=nome sem preposicao, 3=nome original
,$NOM
);
$ok=false; //global
for($i=0; $i<count($N); $i++) {
$ok = false;
$aux = 0;
$N[$i][2] = preg_replace("/( (?:D[AO]S?|DE) | D')/", ' ', $N[$i][2], -1, $aux);
$pals = explode(' ',$N[$i][2]);
$pals2 = explode(' ', str_replace(" D'",' D ',$N[$i][3]) );
$N[$i][1] = count($pals);
$vog0 = semVogais($pals[0]);
$ini0cut = substr($pals[0],0,3);
if ($N[$i][1]==1 && strlen($N[$i][2])==3) setNF( $N[$i], $N[$i][2], 1); // regra 1 exata
if (!$ok && $N[$i][1]==3) setNF( $N[$i], iniciais($pals) , 2); // regra 2 sem preposicao
if (!$ok && $N[$i][1]==1 && strlen($vog0)==3) setNF( $N[$i], $vog0 , 3); // regra 3, usa preposicao
if (!$ok && count($pals2)==3) setNF( $N[$i], iniciais($pals2) , 4); //
if (!$ok && $N[$i][1]==1) setNF( $N[$i], $ini0cut , 5);
if (!$ok && $N[$i][1]==2) setNF( $N[$i], substr($vog0,0,1).substr(semVogais($pals[1]),0,2) , 7);
//if (!$ok && $N[$i][1]>3) setNF( $N[$i], iniciais($pals) , 8);
}
$i=1;
$out = '';
$TOT = $T2 = count($N);
foreach ($N as $r) {
$x= "\n $i. $r[0] = $r[3]";
if ($r[0]) print $x;
else { $out .= $x; $T2--; }
$i++;
}
$T1 = $TOT - $T2;
print "\n ... de $TOT temos $T2 resolvidas. \n$out\n";
print "\n De $TOT temos $T1 sem resolver e $T2 resolvidas.\n";
// De 645 temos 598 sem resolver e 47 resolvidas.
$xx=array_keys($NF);
sort($xx);
foreach ($xx as $abrev)
print " $abrev "; // ({$NF[$abrev]});
// // // LIB
function desacent($str) {
return iconv('UTF-8', 'ASCII//TRANSLIT', $str);
}
function setNF(&$r,$abrev,$regra=0) {
global $ok;
global $NF;
$ok=false;
if (isset($NF[$abrev])) { print "\n -- COLISAO na regra-$regra com $abrev ($r[3])"; return $ok; }
$NF[$abrev] = $r[3];
$r = [ $abrev, $r[1], $r[2], $r[3] ];
$ok=true;
return $ok;
}
function semVogais($x) {
$a = substr($x,0,1);
return $a.preg_replace('/[AEIOU]+/', '', substr($x,1));
}
function iniciais($pals) {
$ini = '';
foreach($pals as $p) $ini.=substr($p,0,1);
return $ini;
}
?>
CREATE VIEW vw_city3letter AS
SELECT name, state, wdid , idibge , replace(upper(lexlabel),'.',' ') as stdname, creation, extinction
FROM dataset.vw_br_city_codes
; -- WHERE state='SP'
Usando o a representacao lexlabel a unica diferença é que nomes como "Conquista D'Oeste" (MT) se tornem CONQUISTA D OESTE
...
De um total de 645 nomes, 47 tiveram suas siglas obtidas por estas regras básicas,
-
Regra do nome de 3 letras: apenas 4 nomes,
ITU
,JAU
,POA
eURU
. -
Regras das iniciais das 3 palavras sem preposição: 43 nomes. Amostra:
ASB
= AGUAS DE SANTA BARBARA,ASB
= AGUAS DE SANTA BARBARA,ASP
= AGUAS DE SAO PEDRO,BES
= BOA ESPERANCA DO SUL, ...,VGP
= VARGEM GRANDE PAULISTA,VGS
= VARGEM GRANDE DO SUL,VAA
= VISTA ALEGRE DO ALTO.
-
SJB
ficou com SAO JOSE DO BARREIRO (de 1859 com ~4100 mil habitantes), SAO JOAQUIM DA BARRA de 1898 é só alguns anos mais nova, mas tem ~51000 mil habitantes, 12 vezes mais. A regra de qualquer forma é a data de fundação (cuidado com casos de mudança maior de nome, aí o correto seria usar a data de renomeação se for mais do que simples acentos). -
SAA
ficou com SANTO ANTONIO DA ALEGRIA. fundada em 1866 (SANTO ANTONIO DO ARACANGUA é de 1923 e de qualquer forma a ordem alfabética ditaria mesmo resultado) -
SAP
ficou com SANTO ANTONIO DE POSSE, fundada em 1850 (22200 mil hab), ao invés de SANTO ANTONIO DO PINHAL (1860 e 6500 mil hab).