geo_polygon_densify()
Converte i poligoni o i bordi planari multipolygon in geodesici aggiungendo punti intermedi.
Sintassi
geo_polygon_densify(
Poligono,
Tolleranza,
[ preserve_crossing ])
Altre informazioni sulle convenzioni di sintassi.
Parametri
Nome | Tipo | Obbligatoria | 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 comecounterclockwise
matrice ordinata di coordinate [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Può esserci una sola shell.LinearRingHole
è facoltativo e definito comeclockwise
matrice ordinata di coordinate [[lng_1,lat_1],...,[lng_i,lat_i],...,[lng_j,lat_j],...,[lng_1,lat_1]]. Ci possono essere qualsiasi numero 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 la 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 densficato è limitato a 10485760.
- L'archiviazione dei poligoni in formato dinamico presenta limiti di dimensione.
- 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 dei bordi tra loro.
Motivazione
- Il formato GeoJSON definisce un bordo tra due punti come linea cartesiana dritta 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.
Restituisce
Poligono densified nel formato GeoJSON e di un tipo di dati dinamico . Se il poligono o la tolleranza non è valido, la query genera un risultato Null.
Nota
Le coordinate geospaziali vengono interpretate come rappresentate dal sistema di riferimento delle coordinate WGS-84 .
Esempio
L'esempio seguente densifica il poligono di Manhattan Central Park. I bordi sono brevi e la distanza tra i bordi planari e le relative 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 |
---|
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per