Partilhar via


geo_line_buffer()

Calcula o polígono ou o multipolygon que contém todos os pontos dentro do raio especificado da linha de entrada ou de várias linhas na Terra.

Syntax

geo_line_buffer(lineString,, raiotolerância)

Saiba mais sobre as convenções de sintaxe.

Parâmetros

Nome Tipo Necessário Descrição
lineString dynamic ✔️ Uma LineString ou MultiLineString no formato GeoJSON.
raio real ✔️ Raio da memória intermédia em metros. O valor válido tem de ser positivo.
tolerância real Define a tolerância em medidores que determina a quantidade de polígonos que se pode desviar do raio ideal. Se não for especificado, é utilizado o valor 10 predefinido. A tolerância não deve ser inferior a 0,0001% do raio. Especificar tolerância maior do que o raio reduz a tolerância ao maior valor possível abaixo do raio.

Devoluções

Polygon ou MultiPolygon em torno da LineString ou MultiLineString de entrada. Se as coordenadas, o raio ou a tolerância forem inválidos, a consulta produzirá um resultado nulo.

Nota

  • As coordenadas geoespaciais são interpretadas como representadas pelo sistema de referência de coordenadas WGS-84 .
  • O datum geodético usado para medir a distância na Terra é uma esfera.
  • Se as arestas da linha de entrada forem linhas cartesianas retas, considere utilizar geo_line_densify() para converter arestas planares em geodésico.
  • As extremidades das linhas são redondas.
  • Ambos os lados das linhas são colocados em memória intermédia.

Definição e restrições de LineString

dynamic({"type": "LineString","coordinates": [[lng_1,lat_1], [lng_2,lat_2], ..., [lng_N,lat_N]]})

dynamic({"type": "MultiLineString","coordinates": [[line_1, line_2, ..., line_N]]})

  • A matriz de coordenadas LineString tem de conter, pelo menos, duas entradas.
  • As coordenadas [longitude, latitude] têm de ser válidas em que longitude é um número real no intervalo [-180, +180] e a latitude é um número real no intervalo [-90, +90].
  • O comprimento do limite tem de ser inferior a 180 graus. Será escolhida a margem mais curta entre os dois vértices.

Exemplos

A consulta seguinte calcula o polígono à volta da linha, com raio de 4 metros e tolerância de 0,1 metros

let line = dynamic({"type":"LineString","coordinates":[[-80.66634997047466,24.894526340592122],[-80.67373241820246,24.890808090321286]]});
print buffer = geo_line_buffer(line, 4, 0.1)
memória intermédia
{"type": "Polygon", "coordinates": [ ... ]}

A consulta seguinte calcula a memória intermédia em torno de cada linha e unifica o resultado

datatable(line:dynamic)
[
    dynamic({"type":"LineString","coordinates":[[14.429214068940496,50.10043066548272],[14.431184174126173,50.10046525983731]]}),
    dynamic({"type":"LineString","coordinates":[[14.43030222687753,50.100780677801936],[14.4303847111523,50.10020274910934]]})
]
| project buffer = geo_line_buffer(line, 2, 0.1)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
result
{"type": "Polygon","coordinates": [ ... ]}

O exemplo seguinte irá devolver verdadeiro, devido a uma linha inválida.

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString"}), 5))
memória intermédia
Verdadeiro

O exemplo seguinte irá devolver verdadeiro, devido a um raio inválido.

print buffer = isnull(geo_line_buffer(dynamic({"type":"LineString","coordinates":[[0,0],[1,1]]}), 0))
memória intermédia
Verdadeiro