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.

Syntax

geo_polygon_buffer(Mnohoúhelník,Radius,Tolerance)

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

Parametry

Název Typ Vyžadováno Popis
Mnohoúhelník dynamic ✔️ Mnohoúhelník nebo multipolygon ve formátu GeoJSON.
Radius real ✔️ Poloměr vyrovnávací paměti v metrech. Platná hodnota musí být kladná.
Tolerance real Definuje toleranci v metrech, která určuje, jak moc se mnohoúhelník může odchylovat od ideálního poloměru. Pokud není zadán, použije se výchozí hodnota 10 . Tolerance by neměla být menší než 0,0001 % poloměru. Zadáním tolerance větší než poloměr snížíte toleranci na největší možnou hodnotu pod poloměrem.

Návraty

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

Poznámka

  • Geoprostorové souřadnice jsou interpretovány jako reprezentované systémem souřadnic WGS-84 .
  • Geodetické datum používané pro měření na Zemi je koule. Mnohoúhelníkové hrany jsou geodézie na kouli.
  • Pokud jsou vstupní mnohoúhelníky rovné kartézské čáry, zvažte použití geo_polygon_densify() k převodu rovinných okrajů na geodézie.

Definice a omezení mnohoúhelníku

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

dynamic({"type": "MultiPolygon";"coordinates": [[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 volitelný a definovaný jako clockwise uspořádané pole 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 nejméně třemi souřadnicemi. První souřadnice musí být rovna poslední. Vyžadují se alespoň č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 rozsahu [-180, +180] a zeměpisná šířka musí být reálné číslo v rozsahu [-90, +90].
  • LinearRingShell obklopuje nejvýše polovinu sféry. LinearRing rozdělí kouli do dvou oblastí. Zvolí se menší z těchto dvou oblastí.
  • Délka hrany linearRing musí být menší než 180 stupňů. Zvolí se nejkratší hrana mezi těmito dvěma vrcholy.
  • LinearRings se 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ěti
{"type": "Polygon","coordinates": [ ... ]}

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": "Polygon","coordinates": [ ... ]}

Následující příklad vrátí hodnotu true z důvodu neplatného mnohoúhelníku.

print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
Vyrovnávací paměti
Ano

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ěti
Ano