Opções de Geocoding e busca de endereço por código postal
Geocoding
Geocoding é o processo de buscar coordenadas geográficas a partir de um endereço.
O Mapas Culturais utiliza este processo em dois momentos:
- Ao editar uma entidade, quando se preenchem os campos de endereço, o sistema busca a localização geográfica para posicionar o ponto no mapa;
- Na busca, ao fazer uma busca por endereço (a caixa de busca dentro do mapa)
Por padrão, é utilizado o serviço Nominatim. Mas a opção de utilizar a API do Google Maps para esta tarefa pode ser ativada alterando o valor da configuração app.useGoogleGeocode e app.googleApiKey em seu config.php.
'app.useGoogleGeocode' => true,
'app.googleApiKey' => '',
Também é possível, a partir de um tema ou plugin, substituir a ferramenta de geocode por outra de sua preferência.
Para isso, basta sobreescrever o objeto JavaScript MapasCulturais.geocoder, declarado em customizable.js.
No seu tema ou plugin, adicione o novo script:
$this->enqueueScript('app', 'my-script', 'path-to/my-script.js', array('mapasculturais-customizable'));
E siga as instruções em customizable.js para fazer seu próprio geocoder.
Busca por código postal
Ao editar uma entidade e preencher o campo de código postal, o sistema pode fazer uma consulta a um serviço para preencher os campos de endereço automaticamente.
Por padrão, Mapas Culturais faz isso buscando por CEP no serviço CEP Aberto.
Para modificar e utilizar outro serviço, basta sobreescrever o método getAddressByPostalCode() na classe do seu tema, que extendeu a classe to Tema BaseV1.
Veja o exemplo:
class MeuTema extends BaseV1\Theme {
//... todo seu código...
function getAddressByPostalCode($postalCode) {
$url = 'http://MeuServio.com/postalcode=' . $postalCode;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$response = curl_exec($ch);
$response = json_decode($response);
if (isset($json->logradouro)) {
$response = [
'success' => true,
'lat' => $json->latitude,
'lon' => $json->longitude,
'streetName' => $json->logradouro,
'neighborhood' => $json->bairro,
'city' => $json->cidade,
'state' => $json->estado
];
} else {
$response = [
'success' => false,
'error_msg' => 'Falha a buscar endereço'
];
}
return $response;
}
//...
}
NOTA: os campos lat e lon são opcionais e ainda não estão sendo utilizados. Mas provavelmente, em breve, passaremos a utilizar ele também para posicionar o pin no mapa.