Share via


geo_polygon_buffer()

Calcula el polígono o el multipolígono que contiene todos los puntos dentro del radio especificado del polígono de entrada o multipolygon en la Tierra.

Syntax

geo_polygon_buffer(Polígono,Radio,Tolerancia)

Obtenga más información sobre las convenciones de sintaxis.

Parámetros

Nombre Tipo Requerido Descripción
Polígono dynamic ✔️ Polígono o multipolígono en formato GeoJSON.
Radio real ✔️ Radio de búfer en metros. El valor válido debe ser positivo.
tolerance real Define la tolerancia en metros que determina cuánto un polígono puede desviarse del radio ideal. Si no se especifica, se usa el valor predeterminado 10. La tolerancia no debe ser inferior al 0,0001 % del radio. Si se especifica tolerancia mayor que radius, se reducirá la tolerancia al mayor valor posible por debajo del radio.

Devoluciones

Polígono o MultiPolygon alrededor del polígono de entrada o multipolígono. Si las coordenadas o el radio o la tolerancia no son válidas, la consulta generará un resultado nulo.

Nota

  • Las coordenadas geoespaciales se interpretan como representadas por el sistema de referencia de coordenadas WGS-84 .
  • La referencia geodética utilizada para las mediciones en la Tierra es una esfera. Los bordes de polígono son geodesics en la esfera.
  • Si los bordes de polígono de entrada son líneas cartesianas rectas, considere la posibilidad de usar geo_polygon_densify() para convertir bordes planales en geodesics.

Definición y restricciones de polígono

dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})

dynamic({"type": "MultiPolygon","coordinates": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})

  • LinearRingShell es necesario y se define como una counterclockwise matriz ordenada de coordenadas [[lng_1,lat_1], ..., [lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Solo puede haber un shell.
  • LinearRingHole es opcional y se define como una clockwise matriz ordenada de coordenadas [[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Puede haber cualquier número de anillos interiores y agujeros.
  • Los vértices linearRing deben ser distintos con al menos tres coordenadas. La primera coordenada debe ser igual a la última. Se requieren al menos cuatro entradas.
  • Las coordenadas [longitud, latitud] deben ser válidas. La longitud debe ser un número real en el intervalo [-180, +180] y la latitud debe ser un número real en el intervalo [-90, +90].
  • LinearRingShell incluye como máximo la mitad de la esfera. LinearRing divide la esfera en dos regiones. Se elegirá el menor de las dos regiones.
  • La longitud del borde linearRing debe ser inferior a 180 grados. Se elegirá el borde más corto entre los dos vértices.
  • LinearRings no debe cruzar y no compartir bordes. LinearRings puede compartir vértices.
  • Polygon contiene sus vértices.

Ejemplos

La consulta siguiente calcula el polígono alrededor del polígono de entrada, con un radio de 10km.

let polygon = dynamic({"type":"Polygon","coordinates":[[[139.813757,35.719666],[139.72558,35.71813],[139.727471,35.653231],[139.818721,35.657264],[139.813757,35.719666]]]});
print buffer = geo_polygon_buffer(polygon, 10000)
buffer
{"type": "Polygon","coordinates": [ ... ]}

La consulta siguiente calcula el búfer alrededor de cada polígono y unifica el resultado.

datatable(polygon:dynamic, radius:real )
[
    dynamic({"type":"Polygon","coordinates":[[[12.451218693639277,41.906457003556625],[12.445753852969375,41.90160968881543],[12.453514425793855,41.90361551885886],[12.451218693639277,41.906457003556625]]]}), 100,
    dynamic({"type":"Polygon","coordinates":[[[12.4566086734784,41.905119850039995],[12.453913683559591,41.903652663265234],[12.455485761012113,41.90146110630562],[12.4566086734784,41.905119850039995]]]}), 20
]
| project buffer = geo_polygon_buffer(polygon, radius)
| summarize polygons = make_list(buffer)
| project result = geo_union_polygons_array(polygons)
resultado
{"type": "Polygon","coordinates": [ ... ]}

En el ejemplo siguiente se devolverá true, debido a un polígono no válido.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
buffer
True

En el ejemplo siguiente se devolverá true, debido a un radio no válido.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
buffer
True