greatCircleDistance
Calcula a distância entre dois pontos na superfície da Terra com base na fórmula do círculo máximo.
greatCircleDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)Parâmetros de entrada
lon1Deg— Longitude do primeiro ponto em graus. Intervalo:[-180°, 180°].lat1Deg— Latitude do primeiro ponto em graus. Intervalo:[-90°, 90°].lon2Deg— Longitude do segundo ponto em graus. Intervalo:[-180°, 180°].lat2Deg— Latitude do segundo ponto em graus. Intervalo:[-90°, 90°].
Valores positivos correspondem à latitude norte e à longitude leste, e valores negativos correspondem à latitude sul e à longitude oeste.
Valor retornado
A distância entre dois pontos na superfície da Terra, em metros.
Gera uma exceção quando os valores dos parâmetros de entrada estão fora do intervalo.
Exemplo
SELECT greatCircleDistance(55.755831, 37.617673, -55.755831, -37.617673) AS greatCircleDistance┌─greatCircleDistance─┐
│ 14128352 │
└─────────────────────┘geoDistance
Semelhante a greatCircleDistance, mas calcula a distância no elipsoide WGS-84 em vez de na esfera. Esta é uma aproximação mais precisa do geoide da Terra.
O desempenho é o mesmo de greatCircleDistance (sem perda de desempenho). Recomenda-se usar geoDistance para calcular distâncias na Terra.
Nota técnica: para pontos suficientemente próximos, calculamos a distância usando uma aproximação planar com a métrica no plano tangente ao ponto médio das coordenadas.
geoDistance(lon1Deg, lat1Deg, lon2Deg, lat2Deg)Parâmetros de entrada
lon1Deg— Longitude do primeiro ponto em graus. Intervalo:[-180°, 180°].lat1Deg— Latitude do primeiro ponto em graus. Intervalo:[-90°, 90°].lon2Deg— Longitude do segundo ponto em graus. Intervalo:[-180°, 180°].lat2Deg— Latitude do segundo ponto em graus. Intervalo:[-90°, 90°].
Valores positivos correspondem à latitude norte e à longitude leste, e valores negativos correspondem à latitude sul e à longitude oeste.
Valor retornado
A distância entre dois pontos na superfície da Terra, em metros.
Gera uma exceção quando os valores dos parâmetros de entrada estão fora do intervalo.
Exemplo
SELECT geoDistance(38.8976, -77.0366, 39.9496, -75.1503) AS geoDistance┌─geoDistance─┐
│ 212458.73 │
└─────────────┘greatCircleAngle
Calcula o ângulo central entre dois pontos na superfície terrestre usando a fórmula do círculo máximo.
greatCircleAngle(lon1Deg, lat1Deg, lon2Deg, lat2Deg)Parâmetros de entrada
lon1Deg— Longitude do primeiro ponto em graus.lat1Deg— Latitude do primeiro ponto em graus.lon2Deg— Longitude do segundo ponto em graus.lat2Deg— Latitude do segundo ponto em graus.
Valor retornado
O ângulo central entre dois pontos, em graus.
Exemplo
SELECT greatCircleAngle(0, 0, 45, 0) AS arc┌─arc─┐
│ 45 │
└─────┘geoToUTM
Converte coordenadas geográficas WGS84 (longitude, latitude) em coordenadas Universal Transverse Mercator (UTM).
UTM é um conjunto de 60 projeções transversas de Mercator, cada uma cobrindo uma zona longitudinal de 6°, que mapeia coordenadas geográficas para uma grade plana em metros. A zona é selecionada automaticamente com base na longitude, aplicando as exceções padrão para a Noruega e Svalbard, a menos que uma zone explícita seja informada. UTM só é definido para latitudes no intervalo [-80°, 84°]; as calotas polares usam o sistema UPS separado.
geoToUTM(longitude, latitude[, zone])Argumentos
longitude— Longitude em graus. Intervalo:[-180°, 180°].Float32/Float64.latitude— Latitude em graus. Intervalo:[-80°, 84°].Float32/Float64.zone— Opcional. Força o uso desta zona UTM na projeção, em vez de selecioná-la automaticamente. Intervalo:[1, 60].(U)Int*.
Valor retornado
Uma tupla nomeada (easting, northing, zone, band): easting e northing em metros (Float64), o número da zone UTM (UInt8) e a letra da band de latitude MGRS (FixedString(1)). Uma band igual a 'N' ou superior indica o hemisfério norte.
Gera uma exceção quando a latitude está fora de [-80°, 84°] ou a longitude está fora de [-180°, 180°].
Exemplo
SELECT geoToUTM(2.294497, 48.858222) AS utm; -- Eiffel Tower(448251.5978370684,5411935.125629659,31,'U')UTMToGeo
Converte coordenadas UTM em coordenadas geográficas WGS84 (longitude, latitude). Esta é a função inversa de geoToUTM.
UTMToGeo(easting, northing, zone, is_north)Argumentos
easting— Coordenada leste em metros (inclui o false easting de 500000 m).(U)Int*/Float*.northing— Coordenada norte em metros (inclui o false northing de 10000000 m no hemisfério sul).(U)Int*/Float*.zone— Número da zona UTM. Intervalo:[1, 60].(U)Int*.is_north— Hemisfério:1para o hemisfério norte,0para o hemisfério sul.(U)Int*.
Valor retornado
Uma tupla nomeada (longitude, latitude) em graus. Tuple(Float64, Float64).
Exemplo
SELECT UTMToGeo(448251.6, 5411935.13, 31, 1) AS coord;(2.2944970289079203,48.85822204127082)geoToMGRS
Codifica coordenadas geográficas WGS84 (longitude, latitude) como uma string do Military Grid Reference System (MGRS).
A string tem o formato <zone><band><100km square><easting><northing>, por exemplo 31UDQ4825111935. O argumento precision controla o número de dígitos usados para cada um de easting e northing: 5 (padrão) para 1 m, 4 para 10 m, 3 para 100 m, 2 para 1 km, 1 para 10 km e 0 somente para o quadrado da grade de 100 km. O MGRS é definido apenas para latitudes no intervalo [-80°, 84°].
geoToMGRS(longitude, latitude[, precision])Argumentos
longitude— Longitude em graus. Intervalo:[-180°, 180°].Float32/Float64.latitude— Latitude em graus. Intervalo:[-80°, 84°].Float32/Float64.precision— Opcional. Número de dígitos para cada coordenada leste e norte. Padrão:5. Intervalo:[0, 5].(U)Int*.
Valor retornado
A cadeia de referência MGRS. String.
Exemplo
SELECT geoToMGRS(2.294497, 48.858222) AS mgrs, geoToMGRS(2.294497, 48.858222, 3) AS mgrs_100m;┌─mgrs────────────┬─mgrs_100m───┐
│ 31UDQ4825111935 │ 31UDQ482119 │
└─────────────────┴─────────────┘MGRSToGeo
Decodifica uma string MGRS em coordenadas geográficas WGS84 (longitude, latitude). Esta é a operação inversa de geoToMGRS.
O ponto retornado é o centro do quadrado da grade referenciado, portanto a precisão do resultado corresponde à precisão codificada na string. Os espaços em branco na entrada são ignorados, e as letras não diferenciam maiúsculas de minúsculas.
MGRSToGeo(mgrs)Argumentos
mgrs— string de referência MGRS a ser decodificada.String/FixedString.
Valor retornado
Uma tupla nomeada (longitude, latitude) em graus. Tuple(Float64, Float64).
Exemplo
SELECT MGRSToGeo('31UDQ4825111935') AS coord;(2.294495618908297,48.85822536113692)pointInEllipses
Verifica se o ponto pertence a pelo menos uma das elipses. As coordenadas são geométricas no sistema de coordenadas cartesiano.
pointInEllipses(x, y, x₀Parâmetros de entrada
x, y— Coordenadas de um ponto no plano.xᵢ, yᵢ— Coordenadas do centro dai-ésima elipse.aᵢ, bᵢ— Eixos dai-ésima elipse nas unidades das coordenadasxey.
O número de parâmetros de entrada deve ser 2+4⋅n, em que n é o número de elipses.
Valores retornados
1 se o ponto estiver dentro de pelo menos uma das elipses; 0 se não estiver.
Exemplo
SELECT pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)┌─pointInEllipses(10., 10., 10., 9.1, 1., 0.9999)─┐
│ 1 │
└─────────────────────────────────────────────────┘pointInPolygon
Verifica se o ponto está contido no polígono no plano.
pointInPolygon((x, y), [(a, b), (c, d) ...], ...)Valores de entrada
(x, y)— Coordenadas de um ponto no plano. Tipo de dado — Tuple — uma tupla de dois números, ou um Point.[(a, b), (c, d) ...]— Vértices do polígono. Tipo de dado — Array ou Ring. Cada vértice é representado por um par de coordenadas(a, b). Os vértices devem ser especificados em sentido horário ou anti-horário. O número mínimo de vértices é 3.- A função oferece suporte a polígonos com furos (áreas vazadas). Tipo de dado — Polygon. Passe o
Polygoninteiro como segundo argumento ou passe primeiro o anel externo e, em seguida, cada furo como argumento adicional separado. - A função também oferece suporte a multipolígonos. Tipo de dado — MultiPolygon. Passe o
MultiPolygoninteiro como segundo argumento ou liste cada polígono componente como um argumento separado. - O argumento do polígono também pode ser uma coluna Geometry que contenha valores em formato de polígono (
Ring,PolygonouMultiPolygon).
Os tipos em formato de polígono (Ring, Polygon, MultiPolygon e Geometry) podem ser passados tanto como constantes quanto como colunas regulares (não constantes) da tabela. Quando o polígono é fornecido em vários argumentos separados (um anel externo seguido por furos, ou vários polígonos de um multipolígono), todos esses argumentos devem ser constantes.
Valores retornados
1 se o ponto estiver dentro do polígono, 0 se não estiver.
Se o ponto estiver na borda do polígono, a função poderá retornar 0 ou 1.
Exemplo
SELECT pointInPolygon((3., 3.), [(6, 0), (8, 4), (5, 8), (0, 2)]) AS res┌─res─┐
│ 1 │
└─────┘O polígono também pode ser fornecido usando os tipos de dados geométricos nomeados, inclusive como coluna de uma tabela:
CREATE TABLE poly (id UInt32, shape Polygon) ENGINE = Memory;
INSERT INTO poly VALUES (1, [[(0, 0), (10, 0), (10, 10), (0, 10)], [(4, 4), (6, 4), (6, 6), (4, 6)]]);
SELECT id, pointInPolygon((2., 2.), shape) AS res FROM poly;┌─id─┬─res─┐
│ 1 │ 1 │
└────┴─────┘Nota • Você pode definir
validate_polygons = 0para ignorar a validação da geometria. •pointInPolygonpressupõe que todo polígono esteja bem formado. Se a entrada tiver auto-interseções, anéis em ordem incorreta ou arestas sobrepostas, os resultados se tornam pouco confiáveis — especialmente para pontos que ficam exatamente sobre uma aresta, um vértice ou dentro de uma auto-interseção, onde a noção de "dentro" vs. "fora" é indefinida. • Quando o argumento do polígono é constante e o ponto é expresso usando colunas-chave indexadas (por exemplo,pointInPolygon((x, y), constant_polygon)em uma tabela em quex, yfazem parte daPRIMARY KEYou são cobertos por um índiceminmax), o ClickHouse pode usar tanto a chave primária quanto os índices de data-skippingminmaxpara descartar grânulos irrelevantes.