Sdílet prostřednictvím


geo_polygon_densify()

Převede mnohoúhelník nebo vícepolygonové planární hrany na geodézie přidáním mezilehlých bodů.

Syntax

geo_polygon_densify(Mnohoúhelník,Tolerance, [ preserve_crossing ])

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.
Tolerance int, long nebo real Definuje maximální vzdálenost v metrech mezi původním planárním okrajem a převedeným geodetickým řetězcem okrajů. Podporované hodnoty jsou v rozsahu [0,1, 10000]. Pokud není zadáno, výchozí hodnota je 10.
preserve_crossing bool Pokud true, zachová hraniční přechod přes antimeridian. Pokud není zadáno, použije se výchozí hodnota false .

Definice 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 uspořádané counterclockwise pole souřadnic [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Může existovat jenom jedno prostředí.
  • LinearRingHole je nepovinný a definovaný jako uspořádané clockwise 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é alespoň 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 oblasti [-180, +180] a zeměpisná šířka musí být reálné číslo v rozsahu [-90, +90].
  • LinearRingShell uzavře maximálně polovinu koule. LinearRing rozdělí kouli na dvě oblasti. Zvolí se menší z těchto dvou oblastí.
  • LinearRing délka hrany musí být menší než 180 stupňů. Zvolí 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.
  • Zatěžování platného mnohoúhelníku může mnohoúhelník zneplatnit. Algoritmus přidává body nejednotným způsobem a jako takový může způsobit, že se hrany vzájemně prolínají.

Motivace

  • Formát GeoJSON definuje hranu mezi dvěma body jako rovnou kartézskou čáru, zatímco geo_polygon_densify() používá geodetické.
  • Rozhodnutí o použití geodetických nebo planárních okrajů může záviset na datové sadě a je důležité zejména u dlouhých okrajů.

Návraty

Densifikovaný mnohoúhelník ve formátu GeoJSON a dynamického datového typu. Pokud je mnohoúhelník nebo tolerance neplatný, dotaz vytvoří výsledek null.

Poznámka

Geoprostorové souřadnice jsou interpretovány jako reprezentované systémem souřadnic WGS-84 .

Příklady

Následující příklad znespravuje polygon Manhattan Central Park. Hrany jsou krátké a vzdálenost mezi planárními hrany a jejich geodetickými protějšky je menší než vzdálenost určená tolerancí. Výsledek 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.79695;[-73.1973093,40,764226],[-73.982062,40.768159],[-73.958244,40.800719]]]}

Následující příklad zatěžuje dva okraje mnohoúhelníku. Délka denifikovaných okrajů 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