geo_polygon_densify()
Platí pro: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Převede mnohoúhelník nebo multipolygon planární hrany na geodesics přidáním přechodných bodů.
Syntaxe
geo_polygon_densify(
polygon,
tolerance,
[ preserve_crossing ])
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. |
tolerance | int, long nebo real | Definuje maximální vzdálenost v metrech mezi původním planárním okrajem a převedeným geodesickým hraničním řetězcem. Podporované hodnoty jsou v rozsahu [0,1, 10000]. Pokud není zadáno, výchozí hodnota je 10 . |
|
preserve_crossing | bool |
Pokud true , zachová hrany přechod přes antimeridian. Pokud není zadáno, použije se výchozí hodnota false . |
Definice mnohoúhelníku
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 seřazenécounterclockwise
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ý jakoclockwise
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ů.LinearRing
vrcholy 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 na většinu poloviny koule. LinearRing rozdělí sféru do dvou oblastí. Zvolí se menší ze dvou oblastí.LinearRing
délka okraje musí být menší než 180 stupňů. Vybere se nejkratší hrana mezi dvěma vrcholy.
Omezení
- Maximální počet bodů v densifikovaném mnohoúhelníku je omezen na 10485760.
- Ukládání mnohoúhelníku v dynamickém formátu má omezení velikosti.
- Zrušení platného mnohoúhelníku může zneplatnit mnohoúhelník. Algoritmus přidává body nejednotným způsobem, a proto může způsobit vzájemné propletené hrany.
Motivace
- Formát GeoJSON definuje hranu mezi dvěma body jako přímku kartézské přímky při
geo_polygon_densify()
použití geodesické čáry. - Rozhodnutí o použití geodesických nebo planárních hran může záviset na datové sadě a je zvlášť relevantní v dlouhých hranách.
Návraty
Densified polygon in the GeoJSON format and of a dynamic data type. Pokud je mnohoúhelník 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 .
Příklady
Následující příklad označuje polygon Manhattan Central Park. Hrany jsou krátké a vzdálenost mezi planárními hrany a jejich geodesickými protějšky je menší než vzdálenost určená tolerancem. Výsledek tak zůstane beze změny.
print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]})))
Výstup
densified_polygon |
---|
{"type":"Mnohoúhelník";"souřadnice":[[-73.958244,40,800719],[-73,949146,40,79695],[-73.1973093,40.764226],[-73.982062,40,768159],[-73.958244,40.800719]]]} |
Následující příklad označuje dvě hrany mnohoúhelníku. Délka densifikovaných hran je ~110 km
print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))
Výstup
densified_polygon |
---|
{"type":"Mnohoúhelník";"souřadnice":[[[10;10],[10,25;10],[10,5;10],[10,75;10],[11;10],[11;11],[10,75;11],[10,5;11],[10,25;11],[10;11],[10;10]]]} |
Následující příklad vrátí výsledek null z důvodu neplatného vstupu souřadnic.
print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))
Výstup
densified_polygon |
---|
Následující příklad vrátí výsledek null z důvodu neplatného vstupu tolerance.
print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)
Výstup
densified_polygon |
---|