POINT / DECIMAL(10,8) (Coordenadas GPS)
💾 DECIMAL(10,8) + DECIMAL(11,8): 11 Bytes | POINT: 25 BytesArmazenamento de coordenadas geográficas (Latitude e Longitude) para mapas e cálculo de distância.
Você tem duas abordagens excelentes para guardar localização GPS: 1) Duas colunas separadas `latitude DECIMAL(10, 8)` e `longitude DECIMAL(11, 8)`, que é simples, universal e funciona em 100% dos bancos e ORMs; ou 2) O tipo espacial `POINT` com `SPATIAL INDEX`, ideal quando você precisa calcular raio de distância em tempo real (`ST_Distance_Sphere`) para apps de entrega.
✅ Quando Usar (Casos Ideais)
- • Endereços de lojas, restaurantes ou clientes para exibir pino no Google Maps / Leaflet (`DECIMAL(10,8)` e `DECIMAL(11,8)`).
- • Busca geoespacial "encontrar lojas num raio de 5 km" usando `POINT` e `ST_Distance_Sphere`.
🚫 Quando NÃO Usar (Armadilhas)
- • Não use `FLOAT` para coordenadas GPS precisas, pois perde precisão nas últimas casas decimais.
📐 Como Configurar no DrawDB Abrir DrawDB ↗
DECIMAL(10, 8) / POINT SRID 4326
NUMERIC(10, 8) / PostGIS GEOGRAPHY(POINT, 4326)
REAL / NUMERIC
📋 Exemplos Reais de Colunas com POINT:
CREATE TABLE filiais (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(100) NOT NULL,
latitude DECIMAL(10, 8) NOT NULL COMMENT 'De -90 a +90',
longitude DECIMAL(11, 8) NOT NULL COMMENT 'De -180 a +180'
);
<?php
declare(strict_types=1);
$lat = -23.561414;
$lng = -46.655881;
if ($lat < -90 || $lat > 90 || $lng < -180 || $lng > 180) {
throw new RangeException('Coordenadas GPS fora dos limites terrestres.');
}
$stmt = $pdo->prepare('
INSERT INTO filiais (nome, latitude, longitude)
VALUES (:nome, :lat, :lng)
');
$stmt->bindValue(':nome', 'Filial Avenida Paulista', PDO::PARAM_STR);
$stmt->bindValue(':lat', number_format($lat, 8, '.', ''), PDO::PARAM_STR);
$stmt->bindValue(':lng', number_format($lng, 8, '.', ''), PDO::PARAM_STR);
$stmt->execute();