Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Oblicza wielokąt lub wielokąt, który zawiera wszystkie punkty w danym promieniu wielokąta wejściowego lub wielopolygonu na Ziemi.
Składnia
geo_polygon_buffer(
,
Dowiedz się więcej na temat konwencji składni.
Parametry
| Nazwisko | Typ | Wymagania | opis |
|---|---|---|---|
| wielokąt | dynamic |
✔️ | Wielokąt lub multipolygon w formacie GeoJSON. |
| promień | real |
✔️ | Promień buforu w metrach. Prawidłowa wartość musi być dodatnia. |
| tolerancja | real |
Definiuje tolerancję w metrach, która określa, ile wielokąt może odbiegać od idealnego promienia. Jeśli nie określono, zostanie użyta wartość 10 domyślna. Tolerancja nie powinna być niższa niż 0,0001% promienia. Określenie tolerancji większej niż promień obniży tolerancję największej możliwej wartości poniżej promienia. |
Zwraca
Wielokąt lub MultiPolygon wokół wejściowego wielokąta lub wielopolygonu. Jeśli współrzędne lub promień lub tolerancja są nieprawidłowe, zapytanie zwróci wynik o wartości null.
Uwaga
- Współrzędne geoprzestrzenne są interpretowane jako reprezentowane przez system odniesienia współrzędnych WGS-84 .
- Geodetyczne datum używane do pomiarów na Ziemi jest sferą. Krawędzie wielokątne są geodesykami na sferze.
- Jeśli krawędzie wielokąta wejściowe są liniami kartezjańskimi, rozważ użycie geo_polygon_densify() w celu przekonwertowania krawędzi planarnych na geodesyki.
Definicja i ograniczenia wielokątne
dynamic({"type": "Polygon","coordinates": [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N]})
dynamic({"type": "MultiPolygon","współrzędne": [[LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})
- Program LinearRingShell jest wymagany i zdefiniowany jako uporządkowana tablica współrzędnych
counterclockwise[[lng_1,lat_1], ..., [lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Może istnieć tylko jedna powłoka. - LinearRingHole jest opcjonalny i zdefiniowany jako uporządkowana tablica współrzędnych
clockwise[[lng_1,lat_1], ...,[lng_i,lat_i], ...,[lng_j,lat_j], ...,[lng_1,lat_1]]. Może istnieć dowolna liczba pierścieni i otworów wewnętrznych. - Wierzchołki liniowe muszą być odrębne z co najmniej trzema współrzędnymi. Pierwsza współrzędna musi być równa ostatniej. Wymagane są co najmniej cztery wpisy.
- Współrzędne [długość geograficzna, szerokość geograficzna] muszą być prawidłowe. Długość geograficzna musi być liczbą rzeczywistą w zakresie [-180, +180], a szerokość geograficzna musi być liczbą rzeczywistą w zakresie [-90, +90].
- LinearRingShell otacza co najwyżej połowę kuli. Funkcja LinearRing dzieli sferę na dwa regiony. Zostaną wybrane mniejsze z dwóch regionów.
- Długość krawędzi liniowej musi być mniejsza niż 180 stopni. Zostanie wybrana najkrótsza krawędź między dwoma wierzchołkami.
- Wyrażenia liniowe nie mogą być krzyżowe i nie mogą współużytkować krawędzi. LinearRingi mogą współdzielić wierzchołki.
- Wielokąt zawiera wierzchołki.
Przykłady
Poniższy przykład oblicza wielokąt wokół wielokąta wejściowego z promieniem 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)
| bufor |
|---|
| {"type": "Wielokąt","współrzędne": [ ... ]} |
Poniższe zapytanie oblicza bufor wokół każdego wielokąta i unifies wynik
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)
| wynik |
|---|
| {"type": "Wielokąt","współrzędne": [ ... ]} |
Poniższy przykład zwróci wartość true z powodu nieprawidłowego wielokąta.
print buffer = isnull(geo_polygon_buffer(dynamic({"type":"p"}), 1))
| bufor |
|---|
| Prawda |
Poniższy przykład zwróci wartość true z powodu nieprawidłowego promienia.
print buffer = isnull(geo_polygon_buffer(dynamic({"type":"Polygon","coordinates":[[[10,10],[0,10],[0,0],[10,10]]]}), 0))
| bufor |
|---|
| Prawda |