ST_GeoSquare
ST_GeoSquare subdivide recursivamente o domínio ([-180, 180], [-90, 90]) em regiões quadradas iguais chamadas quadrados geográficos até uma profundidade especificada. A subdivisão é baseada na localização de um ponto fornecido. Um dos quadrados geográficos contendo o ponto é subdividido em cada etapa até atingir a profundidade máxima. A seleção desse quadrado geográfico é estável, ou seja, o resultado da função depende somente dos argumentos de entrada. A função retorna um valor exclusivo que identifica o quadrado geográfico final no qual o ponto está localizado.
O ST_GeoSquare aceita um PONTO em que a coordenada x representa a longitude e a coordenada y representa a latitude. A longitude e a latitude são limitadas a [-180, 180] e [-90, 90], respectivamente. A saída de ST_GeoSquare pode ser usada como entrada para a função ST_GeomFromGeoSquare.
Há 360° ao redor do arco da circunferência equatorial da Terra que são divididos em dois hemisférios (leste e oeste), cada um com 180° de linhas longitudinais (meridianos) a partir do meridiano 0°. Por convenção, as longitudes orientais são coordenadas “+” (positivas) quando projetadas em um eixo x em um plano cartesiano e as longitudes ocidentais são coordenadas “-” (negativas) quando projetadas em um eixo x em um plano cartesiano. Há 90° de linhas latitudinais ao norte e ao sul da circunferência equatorial de 0° da Terra, cada uma paralela à circunferência equatorial de 0° da Terra. Por convenção, as linhas latitudinais do norte cruzam o eixo y “+” (positivo) quando projetadas em um plano cartesiano, e as linhas latitudinais do sul cruzam o eixo y “-” (negativo) quando projetadas em um plano cartesiano. A grade esférica formada pela interseção de linhas longitudinais e linhas latitudinais é convertida em uma grade projetada em um plano cartesiano com coordenadas x positivas e negativas padrão e coordenadas y positivas e negativas no plano cartesiano.
O objetivo do ST_GeoSquare é marcar pontos próximos com valores de código iguais. Os pontos localizados no mesmo quadrado geográfico recebem o mesmo valor de código. Um quadrado geográfico é usado para codificar coordenadas geográficas (latitude e longitude) em um número inteiro. Uma região maior é dividida em grades para delinear uma área em um mapa com diferentes resoluções. Um quadrado geográfico pode ser usado para indexação espacial, agrupamento espacial, pesquisas de proximidade, pesquisa de localização e criação de identificadores de locais exclusivos. A função ST_GeoHash segue um processo similar de divisão de uma região em grades, mas tem uma codificação diferente.
Sintaxe
ST_GeoSquare(geom)
ST_GeoSquare(geom, max_depth)
Argumentos
- geom
-
Um valor POINT de tipo de dados
GEOMETRY
ou uma expressão que é avaliada como um subtipo POINT. A coordenada x (longitude) do ponto deve estar dentro do intervalo de-180
a180
. A coordenada y (latitude) do ponto deve estar dentro do intervalo de-90
a90
. - max_depth
-
Um valor de tipo de dados
INTEGER
. O número máximo de vezes que o domínio contendo o ponto é subdividido recursivamente. O valor deve ser um número inteiro de 1 a 32. O padrão é 32. O número final real das subdivisões é menor ou igual ao max_depth especificado.
Tipo de retorno
BIGINT
A função retorna um valor exclusivo que identifica o quadrado geográfico final no qual o ponto de entrada está localizado.
Se a entrada geom não for um ponto, a função retornará um erro.
Se o ponto de entrada estiver vazio, o valor de retorno não será uma entrada válida para a função ST_GeomFromGeoSquare. Use a função ST_IsEmpty para evitar chamadas para ST_GeoSquare com um ponto vazio.
Se o ponto de entrada não estiver no intervalo, a função retornará um erro.
Se a entrada max_depth estiver fora do intervalo, a função retornará um erro.
Exemplos
O SQL a seguir retorna um quadrado geográfico de um ponto de entrada.
SELECT ST_GeoSquare(ST_Point(13.5, 52.5));
st_geosquare
-----------------------
-4410772491521635895
O SQL a seguir retorna um quadrado geográfico de um ponto de entrada com uma profundidade máxima de 10
.
SELECT ST_GeoSquare(ST_Point(13.5, 52.5), 10);
st_geosquare
--------------
797852