✅ Notícias, temas e plug-ins da WEB e do WordPress. Aqui compartilhamos dicas e as melhores soluções para sites.

Latitude e Longitude em PHP: Algumas Práticas Úteis

100

Nos posts anteriores, escrevi um pouco sobre como trabalhar com a API do Google Maps. Sinceramente, eu não trabalhei com isso desde aquele post.

No entanto, tive que trabalhar com latitude e longitude em PHP, e existem algumas práticas que comecei a usar que acho que podem nos servir bem ao trabalhar com coordenadas ou valores de ponto flutuante, em geral.

No trecho de código a seguir, detalharei a abordagem que usei e por que fiz isso. Mas quero deixar claro que, se você estiver lendo isso em relação à API do Google Maps, não há muito que eu possa oferecer sobre como isso funciona e a versão atual de sua API.

Latitude e Longitude em PHP

Sempre que você está trabalhando com latitude e longitude em PHP, você está trabalhando com valores de ponto flutuante, certo? Então você nunca quer analisá-los em nada menos do que isso; caso contrário, você estará perdendo dados e não conseguirá localizar o que quer que esteja tentando localizar.

Portanto, para todos os efeitos, vamos supor que você tenha informações chegando ao servidor e precise trabalhar com elas usando PHP.

As duas coisas que você quer lembrar são:

  1. higienizar os dados recebidos,
  2. certifique-se de que seja convertido em um valor de ponto flutuante.

Isso pode ser feito através do uso das funções filter_var e floatval do PHP, sobre as quais falarei brevemente. Observe, no entanto, que se o resultado de floatval não retornar um ponto flutuante, você precisa ter uma maneira elegante de lidar com isso.

De acordo com o manual, floatval pode retornar o seguinte:

O valor float da variável fornecida. Arrays vazios retornam 0, arrays não vazios retornam 1. Strings provavelmente retornarão 0, embora isso dependa dos caracteres mais à esquerda da string. As regras comuns de fundição de flutuação se aplicam.

Veremos como lidar com isso mais graciosamente mais adiante no post.

Analisando Latitude e Longitude de Entrada

Vamos supor que os valores recebidos estejam na coleção $_REQUEST do PHP (que se refere às solicitações HTTP que chegam ao servidor) codificados como acme-demo-latitude e acme-demo-longitude. 

Podemos recuperá-los assim :

<?php

$latitude  = $_REQUEST['acme-demo-latitude'];
$longitude = $_REQUEST['acme-demo-longitude'];

Mas isso não é suficiente. Primeiro, precisamos usar filter_var para garantir que os dados sejam higienizados e sigam o esquema de ponto flutuante :

<?php

$latitude  = filter_var(
    $_REQUEST['acme-demo-latitude'],
    FILTER_SANITIZE_NUMBER_FLOAT
);

$longitude = filter_var(
    $_REQUEST['acme-demo-longitude'],
    FILTER_SANITIZE_NUMBER_FLOAT
);

Em seguida, acho útil usar floatval para analisar o resultado como um valor de ponto flutuante. Isso deixa o seguinte bloco de código assim :

<?php

$latitude  = floatval(
  filter_var(
    $_REQUEST['acme-demo-latitude'],
    FILTER_SANITIZE_NUMBER_FLOAT) );

$longitude = floatval(
  filter_var(
    $_REQUEST['acme-demo-latitude'],
    FILTER_SANITIZE_NUMBER_FLOAT) );

Depois disso, você está livre para usá-lo. Mas lembre-se, ainda precisamos ter certeza de que os valores retornados são valores de ponto flutuante.

Validando os dados

Agora que temos as informações, precisamos ter certeza de que parece bom. E se isso não acontecer, precisamos lidar com isso adequadamente. Se não for, então podemos simplesmente:

  1. retorne false da função da qual está contido,
  2. lançar uma exceção e permitir que o chamador a trate da maneira que achar melhor.

Cada um desses exemplos pode ter esta aparência :

<?php

// Return false...
if (! (is_float( $latitude) && is_float( $longitude) )) {
  return false;
}

// Or throw an exception...
if (! (is_float( $latitude) && is_float( $longitude) )) {
  throw new Exception('Latitude and longitude are not valid floating point values.');
}

Em última análise, porém, a decisão é sua sobre como lidar com os valores quando eles não estão no formato adequado depois de analisá-los.

Essas são as melhores práticas?

Para ser sincero, duvido. Eu sei que estas são as coisas que eu tenho usado e que achei úteis. Ele também fornece uma maneira defensiva e resiliente de garantir que seus valores estejam corretos.

Mas se houver maneiras melhores de fazer isso, estou aberto a ouvi-las nos comentários.

Fonte de gravação: tommcfarlin.com

Este site usa cookies para melhorar sua experiência. Presumiremos que você está ok com isso, mas você pode cancelar, se desejar. Aceitar Consulte Mais informação