SlideShare uma empresa Scribd logo
Gustavo Almeida
PHP Geo
$whois
CEP = Brasil / 10
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Acertam
cerca de
60% dos IPs
Brasileiros
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocation API - HTML5
navigator.geolocation.getCurrentPosition()
Da definição no W3C - https://www.w3.org/TR/geolocation-API/
The Geolocation API defines a high-level interface to location information associated
only with the device hosting the implementation, such as latitude and longitude. The
API itself is agnostic of the underlying location information sources. Include
GPS and location inferred from network signals, IP address, RFID, WiFi, Bluetooth,
MAC addresses. No guarantee is given that the API returns the device's actual
location.
Cada navegador faz do seu jeito
Faz um POST com diversas informações
coletadas, por exemplo: mac-address, redes
wi-fi, força do sinal da rede wi-fi, etc.
“Geografia” é derivada de uma palavra grega
GEO, que significa “terra”
GRAPHEIN, “descrever” ou “descrição”
GEOGRAPHIA é algo como “descrição da terra”
LatLng
geodesico
28°40’39″S 49°22’11″W
UTM decimal
41.403338, -2.174303
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Usando a fórmula de Haversine
Selecionar emails de usuários dentro de um raio de 20Km em ordem crescente em
relação ao centro. Considere que o centro desta busca é -30.053831, -51.191810
SELECT email,
(6371 * acos(
cos( radians(-30.053831) )
* cos( radians( lat ) )
* cos( radians( lng ) - radians(-51.191810) )
+ sin( radians(-30.053831) )
* sin( radians( lat ) )
)
) AS distancia
FROM usuarios
HAVING distancia < 20
ORDER BY distancia ASC;
GIS é um sistema de hardware, software, informação espacial e procedimentos
computacionais que permite e facilita a análise, gestão ou representação do espaço
geográfico
Geolocalização em PHP - Google Places, Maps e Routes
Tipos de Dados
select email from usuarios
where st_distance(point(@center_lon, @center_lat), coordinates) <= radius;
+60 funções
Geolocalização em PHP - Google Places, Maps e Routes
nome-projeto
Google Maps
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
Mapa de Calor
AutoComplete (javascript)
Google Places
Google Places
Posso obter dos 'places'
● Site
● Fone Fixo
● Ranking
● Num. de avaliações
● Fotos do local
● lat lng
● Viewport
● Resenhas
● Proprietários das resenhas
● Score
● Endereço completo com complemento
● Horário de pico
Geolocalização em PHP - Google Places, Maps e Routes
Google Routes
Obter todos os dados do trajeto
● Tipo transporte (carro, moto, a pé, etc)
● Rotas em texto retornadas
● Rotas com geo-informação retornadas
● Tempo e distância
● Rotas alternativas a este trajeto
● Incluir pontos intermediários
● Custos
Estrutura geral de uma consulta
http://maps.googleapis.com/maps/api/directions/json?parameters
Parâmetros Obrigatórios (exemplo directions)
● key
● origin
● destination
Parâmetros Opcionais (exemplo directions)
● mode (o default é carro)
● waypoints (pontos intermediários)
● avoid (evitar pontos intermediários)
● arrival_time (timestamp)
● departure_time (timestamp)
● transit_routing_preference (less_walking ou fewer_transfers)
directions - Google Routes
geocode - Geo IP
place - Google Places
maps - Google Maps
staticmap - Google Static Maps
https://maps.googleapis.com/maps/api/staticmap?center=Brooklyn+Bridge,New+York,NY&zoom=13&size=60
0x300&maptype=roadmap&markers=color:blue%7Clabel:S%7C40.702147,-74.015794&markers=color:green
%7Clabel:G%7C40.711614,-74.012318&markers=color:red%7Clabel:C%7C40.717,-73.984&key=API_KEY
Google Maps Static API
Basicamente devemos construir uma URL e incorporar a tag <img src=https://maps.goog …. >
path é apenas um parâmetro na URL
path=color:0x0000ff|weight:5|40.737102,-73.990318|40.749825,-73.987963|40.752946,-
73.987384|40.755823,-73.986397
path=color:0x00000000|weight:5|fillcolor:0xFFFF0033|8th+Avenue+%26+34th+St,New
+York,NY|8th+Avenue+%26+42nd+St,New+York,NY|Park+Ave+%26+42nd+St,New+Y
ork,NY,NY|Park+Ave+%26+34th+St,New+York,NY,NY
Geolocalização em PHP - Google Places, Maps e Routes
https://maps.googleapis.com/maps/api/staticmap?size=400x400&center=40.653279,-73.959816&zoom=11&path=fillcolor:0xAA0000
33%7Ccolor:0xFFFFFF00%7Cenc:}zswFtikbMjJzZ%7CRdPfZ}DxWvBjWpF~IvJnEvBrMvIvUpGtQpFhOQdKpz@bIx{A%7CPfYlvA
pz@bl@tcAdTpGpVwQtX}i@%7CGen@lCeAda@bjA%60q@v}@rfAbjA%7CEwBpbAd_@he@hDbu@uIzWcWtZoTdImTdIwu@tDa
OXw_@fc@st@~VgQ%7C[uPzNtA%60LlEvHiYyLs^nPhCpG}SzCNwHpz@cEvXg@bWdG%60]lL~MdTmEnCwJ[iJhOae@nCm[%60
Aq]qE_pAaNiyBuDurAuB}}Ay%60@%7CEKv_@?%7C[qGji@lAhYyH%60@Xiw@tBerAs@q]jHohAYkSmW?aNoaAbR}LnPqNtMtIbR
yRuDef@eT_z@mW_Nm%7CB~j@zC~hAyUyJ_U{Z??cPvg@}s@sHsc@_z@cj@kp@YePoNyYyb@_iAyb@gBw^bOokArcA}GwJu
zBre@itf@sZnd@oElb@hStW{]vv@??kz@~vAcj@zKa%60Atf@uQj_Aee@pU_UrcA&key=YOUR_API_KEY
Google Encoded Polyline
Algoritmo próprio que visa encapsular
vários pontos lat/lng para que possam ser
transmitidos via URL
entrada: array de coordenadas
processamento: 11 passos
saida: string
Geolocalização em PHP - Google Places, Maps e Routes
Geolocalização em PHP - Google Places, Maps e Routes
class Polyline{
protected static $precision = 5;
final public static function encode( $points ){
$points = self::flatten($points);
$encodedString = '';
$index = 0;
$previous = [0,0];
foreach ( $points as $number ) {
$number = (float)($number);
$number = (int)round($number * pow(10, static::$precision));
$diff = $number - $previous[$index % 2];
$previous[$index % 2] = $number;
$number = $diff;
$index++;
$number = ($number < 0) ? ~($number << 1) : ($number << 1);
$chunk = '';
while ( $number >= 0x20 ) {
$chunk .= chr((0x20 | ($number & 0x1f)) + 63);
$number >>= 5;
}
$chunk .= chr($number + 63);
$encodedString .= $chunk;
}
return $encodedString;
}
final public static function decode( $string ) {
$points = [ ];
$index = $i = 0;
$previous = [0,0];
while ($i < strlen($string)) {
$shift = $result = 0x00;
do {
$bit = ord(substr($string, $i++)) - 63;
$result |= ($bit & 0x1f) << $shift;
$shift += 5;
} while ($bit >= 0x20);
$diff = ($result & 1) ? ~($result >> 1) : ($result >> 1);
$number = $previous[$index % 2] + $diff;
$previous[$index % 2] = $number;
$index++;
$points[] = $number * 1 / pow(10, static::$precision);
}
return $points;
}
final public static function flatten( $array ) {
$flatten = [ ];
array_walk_recursive(
$array, // @codeCoverageIgnore
function ($current) use (&$flatten) {
$flatten[] = $current;
}
);
return $flatten;
}
final public static function pair( $list ){
return is_array($list) ? array_chunk($list, 2) : [ ];
}
}
$points = [
[41.89084,-87.62386 ],
[33.89086,66.62279 ],
[-23.89028,-37.62277 ],
[-44.89028,97.62385 ],
[41.89084,-87.62386 ],
];
Polyline::encode($points);
wxt~Fd`yuOCuErBC?vEoB@
Devemos assinar digitalmente nossa URL para que não haja roubo da APIKEY
1. Construa a URL usando utf-8 e usar a função url_encode()
2. Separe o path e query da URL usando parse_url()
3. Faça uma assinatura digital com a chave privada (Google) usando o hash sha1
4. Passe para base64 e troque os caracteres + e / por - e _
5. Adicione a URL o parâmetro signature com o resultado
function signQuery($query, $privateKey){
$url = parse_url($query);
$urlPartToSign = $url['path'].'?'.$url['query'];
$decodedKey = base64_decode(str_replace(['-', '_'], ['+', '/'], $privateKey));
$signature = hash_hmac('sha1', $urlPartToSign, $decodedKey, true);
$encodedSignature = str_replace(array('+', '/'), array('-', '_'), base64_encode($signature));
return sprintf('%s&signature=%s', $query, $encodedSignature);
}
https://maps.googleapis.com/maps/api/staticmap?center=40.714%2c%20-73.998&zoo
m=12&.......&signature=base64signature
1000 consultas = $2
(credito de $200)
Alternativas para Google Maps
1. OPENLAYERS
● Preço: Gratuito. Mapas lado a lado, mapas vetoriais e marcadores
2. TOMTOM
● Preço: Grátis por 2.500 solicitações diárias, US$ 0,42– US$ 0,50 por cada 1.000
subsequentes. Mapas lado a lado, mapas vetoriais, marcadores, pesquisa de localização,
densidade de tráfego, localização de rotas
● navegação: TomTom
● precisão: Mapfit
● visualizações de mapas: Here
● outros: Mapbox OpenLayers
www.LGA.com.br
bit.ly/php2019geo
github: lga37
slideshare: lga33
br.linkedin.com/in/lga37
Geolocalização em PHP - Google Places, Maps e Routes

Mais conteúdo relacionado

PPTX
Gestão de stocks
PPTX
ufcd_8504-indicadores gestao.pptx
PDF
PPT
Gestao stock4º trabalho
PDF
43 ppt pdf rotondas modernas mw 84
PPSX
Slides técnicas
PPTX
Aprovisionamento
PDF
Custos da qualidade
Gestão de stocks
ufcd_8504-indicadores gestao.pptx
Gestao stock4º trabalho
43 ppt pdf rotondas modernas mw 84
Slides técnicas
Aprovisionamento
Custos da qualidade

Semelhante a Geolocalização em PHP - Google Places, Maps e Routes (20)

PPSX
Flutter do zero a publicacao
PDF
Flutter do zero a publicacao
PDF
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
PDF
Flutter do zero a publicacao
PPT
Html5 storage api
PDF
Evento Front End SP - Organizando o Javascript
PDF
Como criar um mapa temático interativo com dados abertos e D3.js
PDF
Evolução e futuro do uso de paradigmas no JavaScript
PPTX
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
PPTX
Criando serviços com AngularJS
PDF
Integração do Flex com PHP através do AMFPHP
PPTX
Google API
PPT
Curso de Introdução - PHP
ODP
Apresentação j query6
PDF
jQuery básico (parte 3)
PDF
LabMM4 (T13 - 12/13) - Funções
PDF
TDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDB
PDF
Ecommerce, mais simples do que parece
PDF
Ecommerce, mais simples do que parece
PDF
JS Experience 2017 - Javascript Funcional
Flutter do zero a publicacao
Flutter do zero a publicacao
TDC2018SP | Trilha Mobile - Flutter: do zero a publicacao
Flutter do zero a publicacao
Html5 storage api
Evento Front End SP - Organizando o Javascript
Como criar um mapa temático interativo com dados abertos e D3.js
Evolução e futuro do uso de paradigmas no JavaScript
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Criando serviços com AngularJS
Integração do Flex com PHP através do AMFPHP
Google API
Curso de Introdução - PHP
Apresentação j query6
jQuery básico (parte 3)
LabMM4 (T13 - 12/13) - Funções
TDC2013 SP - Criando Webservices ultra rápidos com PHP Phalcon e MongoDB
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que parece
JS Experience 2017 - Javascript Funcional
Anúncio

Mais de Luis Gustavo Almeida (9)

PDF
Curso de HTML5 CSS3 e JS
PDF
Php curl - Coleta de dados na web
PDF
Criando uma blockchain com PHP
PDF
Php criptomoedas e blockchain
PDF
Palestra de segurança em PHP - Hacking
PDF
ReactPHP && programacao assincrona em PHP
PDF
Crawling - Coleta de dados na Web com PHP
PDF
Mini Curso PHP Twig - PHP Conference 2017
PDF
Migrando para PHP7 - Novidades
Curso de HTML5 CSS3 e JS
Php curl - Coleta de dados na web
Criando uma blockchain com PHP
Php criptomoedas e blockchain
Palestra de segurança em PHP - Hacking
ReactPHP && programacao assincrona em PHP
Crawling - Coleta de dados na Web com PHP
Mini Curso PHP Twig - PHP Conference 2017
Migrando para PHP7 - Novidades
Anúncio

Último (20)

PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PPTX
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
PPTX
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Aula sobre banco de dados com firebase db
PPTX
Émile Durkheim slide elaborado muito bom
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Processos na gestão de transportes, TM100 Col18
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Curso de Java 9 - (Threads) Multitarefas.pptx
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Curso de Java 17 - (JEE (Sessões e Cookies)).pptx
Curso de Java 16 - (JEE (Utilizando o Padrão MVC)).pptx
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula sobre banco de dados com firebase db
Émile Durkheim slide elaborado muito bom
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Processos na gestão de transportes, TM100 Col18
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Curso de Java 14 - (Explicações Adicionais (Classes Abstrata e Interface)).pptx
COBITxITIL-Entenda as diferença em uso governança TI
Curso de Java 9 - (Threads) Multitarefas.pptx
Custos e liquidação no SAP Transportation Management, TM130 Col18
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx

Geolocalização em PHP - Google Places, Maps e Routes