Sdílet prostřednictvím


geo_polygon_buffer()

Vypočítá mnohoúhelník nebo multipolygon, který obsahuje všechny body v daném poloměru vstupního mnohoúhelníku nebo multipolygonu na Zemi.

Syntaxe

geo_polygon_buffer(tolerance poloměru mnohoúhelníku, , )

Přečtěte si další informace o konvencích syntaxe.

Parametry

Název Type Požadováno Popis
mnohoúhelník dynamic ✔️ Mnohoúhelník nebo multipolygon ve formátu GeoJSON.
poloměr real ✔️ Poloměr vyrovnávací paměti v metrech. Platná hodnota musí být kladná.
tolerance real Definuje toleranci v metrech, která určuje, kolik mnohoúhelníku se může odcházet od ideálního poloměru. Pokud není zadáno, použije se výchozí hodnota 10 . Tolerance nesmí být nižší než 0,0001 % poloměru. Určení tolerance větší než poloměr sníží toleranci na největší možnou hodnotu pod poloměrem.

Návraty

Mnohoúhelník nebo MultiPolygon kolem vstupního polygonu nebo multipolygonu. Pokud jsou souřadnice nebo poloměr nebo tolerance neplatné, dotaz vytvoří výsledek null.

Poznámka:

  • Geoprostorové souřadnice jsou interpretovány jako reprezentované referenčním systémem souřadnic WGS-84 .
  • Geodetické datum používané pro měření na Zemi je sféra. Polygonové hrany jsou geodesické oblasti na kouli.
  • Pokud jsou vstupní mnohoúhelníky rovné kartézské čáry, zvažte použití geo_polygon_densify() k převodu planárních hran na geodesické čáry.

Definice mnohoúhelníku a omezení

dynamic({"type": "Mnohoúhelník";"souřadnice": [LinearRingShell, LinearRingHole_1; ..., LinearRingHole_N]})

dynamic({"type": "MultiPolygon";"souřadnice": [[LinearRingShell, LinearRingHole_1; ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1; ..., LinearRingHole_M]})

  • LinearRingShell je povinný a definovaný jako counterclockwise uspořádané pole souřadnic [[lng_1;lat_1], ..., [lng_i;lat_i], ...;[lng_j;lat_j], ...;[lng_1;lat_1]]. Může existovat pouze jedno prostředí.
  • LinearRingHole je nepovinný a definovaný jako clockwise uspořádaná matice souřadnic [[lng_1;lat_1], ...;[lng_i;lat_i], ...;[lng_j;lat_j], ...;[lng_1;lat_1]]. Může existovat libovolný počet vnitřních kroužků a otvorů.
  • Vrcholy linearring musí být odlišné s alespoň třemi souřadnicemi. První souřadnice musí být rovna poslední. Vyžaduje se aspoň čtyři položky.
  • Souřadnice [zeměpisná délka, zeměpisná šířka] musí být platné. Zeměpisná délka musí být reálné číslo v oblasti [-180, +180] a zeměpisná šířka musí být reálné číslo v oblasti [-90, +90].
  • LinearRingShell uzavře většinu poloviny sféry. LinearRing rozdělí sféru do dvou oblastí. Zvolí se menší ze dvou oblastí.
  • Délka hrany linearring musí být menší než 180 stupňů. Vybere se nejkratší hrana mezi dvěma vrcholy.
  • LinearRings nesmí křížovat a nesmí sdílet hrany. LinearRings může sdílet vrcholy.
  • Mnohoúhelník obsahuje jeho vrcholy.

Příklady

Následující dotaz vypočítá mnohoúhelník kolem vstupního mnohoúhelníku s poloměrem 10 km.

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)
vyrovnávací paměť
{"type": "Mnohoúhelník","souřadnice": [ ... ]}

Následující dotaz vypočítá vyrovnávací paměť kolem každého mnohoúhelníku a sjednocuje výsledek.

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)
result
{"type": "Mnohoúhelník","souřadnice": [ ... ]}

Následující příklad vrátí hodnotu true, protože je neplatný mnohoúhelník.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
vyrovnávací paměť
True

Následující příklad vrátí hodnotu true kvůli neplatnému poloměru.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
vyrovnávací paměť
Pravda