geo_polygon_densify()
Si applica a: ✅Microsoft Fabric✅Azure Esplora dati✅ Azure Monitor✅Microsoft Sentinel
Converte i bordi poligoni o multipolygon planari in geodesici aggiungendo punti intermedi.
Sintassi
geo_polygon_densify(
Tolleranza,
poligono,
[ preserve_crossing ])
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Digita | Obbligatorio | Descrizione |
---|---|---|---|
poligono | dynamic |
✔️ | Poligono o multipolygon nel formato GeoJSON. |
tolerance | int, long o real | Definisce la distanza massima in metri tra il bordo planare originale e la catena perimetrale geodesica convertita. I valori supportati sono compresi nell'intervallo [0.1, 10000]. Se non specificato, il valore predefinito è 10 . |
|
preserve_crossing | bool |
Se true , mantiene l'attraversamento dei bordi sull'antimeridiano. Se non specificato, viene usato il valore predefinito false . |
Definizione poligono
dynamic({"type": "Polygon","coordinates": [ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ]})
dynamic({"type": "MultiPolygon","coordinates": [[ LinearRingShell, LinearRingHole_1, ..., LinearRingHole_N ], ..., [LinearRingShell, LinearRingHole_1, ..., LinearRingHole_M]]})
LinearRingShell
è obbligatorio e definito come matricecounterclockwise
ordinata di coordinate [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Può essere presente una sola shell.LinearRingHole
è facoltativo e definito come matriceclockwise
ordinata di coordinate [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Ci può essere un numero qualsiasi di anelli interni e fori.LinearRing
i vertici devono essere distinti con almeno tre coordinate. La prima coordinata deve essere uguale all'ultima. Sono necessarie almeno quattro voci.- Le coordinate [longitudine, latitudine] devono essere valide. La longitudine deve essere un numero reale nell'intervallo [-180, +180] e latitudine deve essere un numero reale nell'intervallo [-90, +90].
LinearRingShell
racchiude al massimo la metà della sfera. LinearRing divide la sfera in due aree. Verranno scelte le dimensioni più piccole delle due aree.LinearRing
la lunghezza del bordo deve essere inferiore a 180 gradi. Verrà scelto il bordo più corto tra i due vertici.
Vincoli
- Il numero massimo di punti nel poligono densificato è limitato a 10485760.
- L'archiviazione di poligoni in formato dinamico presenta limiti di dimensioni.
- La densificazione di un poligono valido può invalidare il poligono. L'algoritmo aggiunge punti in modo non uniforme e, di conseguenza, può causare l'intreccio tra i bordi.
Motivazione
- Il formato GeoJSON definisce un bordo tra due punti come linea cartesiana retta, mentre
geo_polygon_densify()
usa la geodesica. - La decisione di usare bordi geodesici o planari può dipendere dal set di dati ed è particolarmente rilevante nei bordi lunghi.
Valori restituiti
Poligono densified nel formato GeoJSON e di un tipo di dati dinamico . Se il poligono o la tolleranza non sono validi, la query produce un risultato Null.
Nota
Le coordinate geospaziali vengono interpretate come rappresentate dal sistema di riferimento di coordinate WGS-84 .
Esempi
L'esempio seguente densifica il poligono di Manhattan Central Park. I bordi sono brevi e la distanza tra i bordi planari e le rispettive controparti geodesiche è minore della distanza specificata dalla tolleranza. Di conseguenza, il risultato rimane invariato.
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]]]})))
Output
densified_polygon |
---|
{"type":"Polygon","coordinates":[[-73.958244,40.800719],[-73.949146,40.79695],[-73.973093,40.764226],[-73.982062,40.768159],[-73.958244,40.800719]]]} |
Nell'esempio seguente vengono densificati due bordi del poligono. La lunghezza dei bordi densificati è di circa 110 km
print densified_polygon = tostring(geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]})))
Output
densified_polygon |
---|
{"type":"Polygon","coordinates":[[[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]]]} |
Nell'esempio seguente viene restituito un risultato Null a causa dell'input di coordinate non valido.
print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,900],[11,10],[11,11],[10,11],[10,10]]]}))
Output
densified_polygon |
---|
Nell'esempio seguente viene restituito un risultato Null a causa dell'input di tolleranza non valido.
print densified_polygon = geo_polygon_densify(dynamic({"type":"Polygon","coordinates":[[[10,10],[11,10],[11,11],[10,11],[10,10]]]}), 0)
Output
densified_polygon |
---|