From 594e1abe7eddf9f82721d83d789f1377ab215b98 Mon Sep 17 00:00:00 2001 From: <> Date: Tue, 31 Oct 2023 07:50:04 +0000 Subject: [PATCH] Deployed 3daf210 with MkDocs version: 1.5.3 --- 404.html | 4 +- LICENSE_my/index.html | 4 +- assets/stylesheets/main.35e1ed30.min.css | 1 - assets/stylesheets/main.35e1ed30.min.css.map | 1 - assets/stylesheets/main.4b4a2bd9.min.css | 1 + assets/stylesheets/main.4b4a2bd9.min.css.map | 1 + autore/index.html | 4 +- .../10/hfcqgis-e-la-sezione-blog/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../09/14/array-nel-field-calc/index.html | 4 +- .../index.html | 4 +- .../09/18/le-variabili-in-qgis/index.html | 4 +- blog/2023/09/25/help-in-linea/index.html | 4 +- blog/archive/2023/index.html | 4 +- blog/category/array/index.html | 4 +- blog/category/custom/index.html | 4 +- blog/category/espressioni/index.html | 4 +- blog/category/help/index.html | 4 +- blog/category/misure/index.html | 4 +- blog/category/news/index.html | 4 +- blog/category/progetto/index.html | 4 +- blog/category/variabili/index.html | 4 +- blog/index.html | 4 +- calcolatore_campi/concetti/index.html | 4 +- .../editor_delle_funzioni/index.html | 4 +- calcolatore_campi/field_calc/index.html | 4 +- .../field_calc_processing/index.html | 4 +- .../gruppo_espressioni_utente/index.html | 4 +- calcolatore_campi/interfaccia/index.html | 4 +- calcolatore_campi/operatori/index.html | 4 +- changelog/index.html | 8 +- classici_problemi_gis/index.html | 4 +- contributing/index.html | 4 +- .../corso_di_formazione/index.html | 4 +- .../corso_di_formazione_avanzato/index.html | 4 +- disclaimer/index.html | 4 +- .../ID_univoco_gruppi_consecutivi/index.html | 4 +- esempi/add_campo_sum_cumulativo/index.html | 4 +- esempi/add_campo_virtuale/index.html | 4 +- esempi/add_col_area/index.html | 4 +- esempi/add_col_z/index.html | 4 +- esempi/add_coord_xy/index.html | 4 +- esempi/agg_geom/index.html | 4 +- esempi/aggiungere_punto_a_linea/index.html | 4 +- esempi/aggregare_con_sr_differenti/index.html | 4 +- esempi/aggregare_elementi_contigui/index.html | 4 +- esempi/aggregare_valori_tabella/index.html | 4 +- esempi/array_natural_sorting/index.html | 4 +- esempi/assegnare_cat_prevalente/index.html | 4 +- esempi/atlas_righe_verticale/index.html | 4 +- esempi/attributi_da_layer_vicini/index.html | 4 +- .../calcolo_area_poligoni_reticolo/index.html | 4 +- .../calcolo_incrementi_giornalieri/index.html | 4 +- esempi/campo_coord_in_lat_lon/index.html | 4 +- esempi/centroid_linee/index.html | 4 +- esempi/classificazione_specie/index.html | 4 +- esempi/colorare_distanza_da_punto/index.html | 4 +- esempi/confrontare_campi_tabella/index.html | 4 +- esempi/conta_punti_in_poligono/index.html | 4 +- .../index.html | 4 +- esempi/conteggio/index.html | 4 +- esempi/conteggio_caratteri_diversi/index.html | 4 +- esempi/conversione/index.html | 4 +- esempi/core_area/index.html | 4 +- esempi/cronometro/index.html | 4 +- esempi/decimali_come_apice/index.html | 4 +- .../index.html | 4 +- esempi/drilldown_form_multiple/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../eliminare_duplicati_condizione/index.html | 4 +- .../eliminare_testo_tra_parentesi/index.html | 4 +- esempi/espressione_regolare/index.html | 4 +- esempi/estrarre_campo_hstore/index.html | 4 +- esempi/estrarre_numeri_iniziali/index.html | 4 +- esempi/etichettare_chiave_valore/index.html | 4 +- esempi/etichettare_con_apici/index.html | 4 +- .../index.html | 4 +- esempi/etichette/index.html | 4 +- .../index.html | 4 +- esempi/fill-down/index.html | 4 +- esempi/finestra_temporale/index.html | 4 +- esempi/generalizzare_linee/index.html | 4 +- esempi/geometria_vicina_filtro/index.html | 4 +- .../index.html | 4 +- esempi/gpkg_blob_immagini/index.html | 4 +- esempi/hub_lines/index.html | 4 +- esempi/lavorare_con_le_ore/index.html | 4 +- esempi/layer_vicino/index.html | 4 +- esempi/linea_min_distanza/index.html | 4 +- esempi/linea_min_distanza2/index.html | 4 +- esempi/lista_esempi/index.html | 4 +- esempi/livello_acqua/index.html | 4 +- esempi/lunghezze_segmenti_poligono/index.html | 4 +- esempi/maxValoreCampoNome/index.html | 4 +- esempi/media_stdev_tra_campi/index.html | 4 +- esempi/nascondi_etichette/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- esempi/punti_in_poligoni_categorie/index.html | 4 +- esempi/ricerca_caratteri_speciali/index.html | 4 +- esempi/rotazione_pattern/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- esempi/select_duplicate_vertices/index.html | 4 +- esempi/select_with_aggregate/index.html | 4 +- .../index.html | 4 +- esempi/selezionare_primi_n_valori/index.html | 4 +- .../index.html | 4 +- .../selezionare_punti_vicini_punto/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../somma_lunghezze_nel_poligono/index.html | 4 +- esempi/spatial_join/index.html | 4 +- esempi/spatial_join_condizionato/index.html | 4 +- esempi/spatial_join_condizionato2/index.html | 4 +- esempi/sposta_etichetta_linea/index.html | 4 +- .../index.html | 4 +- esempi/tema_unico_contorno/index.html | 4 +- esempi/tematizzare/index.html | 4 +- .../index.html | 4 +- .../index.html | 4 +- .../trova_nella_tabella_attributi/index.html | 4 +- .../index.html" | 4 +- feed_rss_created.xml | 2 +- feed_rss_updated.xml | 2 +- gis-stackexchange/index.html | 4 +- gr_funzioni/aggrega/aggrega_unico/index.html | 4 +- gr_funzioni/array/array_unico/index.html | 8 +- .../campi_e_valori_unico/index.html | 4 +- gr_funzioni/colore/colore_unico/index.html | 4 +- .../condizioni/condizioni_unico/index.html | 4 +- .../conversioni/conversioni_unico/index.html | 4 +- .../corrispondenza_fuzzy_unico/index.html | 4 +- gr_funzioni/custom/custom_unico/index.html | 4 +- gr_funzioni/da_documentare/index.html | 4 +- .../data_ora/data_ora_unico/index.html | 4 +- .../espressione_utente_unico/index.html | 4 +- .../file_e_percorsi_unico/index.html | 4 +- gr_funzioni/form/form_unico/index.html | 4 +- .../generale/generale_unico/index.html | 4 +- .../geometria/geometria_unico/index.html | 4 +- gr_funzioni/gruppo_funzioni/index.html | 4 +- .../lat_lon_tools_unico/index.html | 4 +- .../layer_mappa/layer_mappa_unico/index.html | 4 +- gr_funzioni/layout/layout_unico/index.html | 4 +- gr_funzioni/maps/maps_unico/index.html | 4 +- .../matematica/matematica_unico/index.html | 4 +- .../operatori/operatori_unico/index.html | 4 +- gr_funzioni/raster/raster_unico/index.html | 4 +- gr_funzioni/recente/recente/index.html | 4 +- .../record_e_attributi_unico/index.html | 4 +- gr_funzioni/reference/dbquery/index.html | 4 +- gr_funzioni/reference/dbsql/index.html | 4 +- gr_funzioni/reference/dbvalue/index.html | 4 +- gr_funzioni/reference/dbvaluebyid/index.html | 4 +- gr_funzioni/reference/geomcontains/index.html | 4 +- gr_funzioni/reference/geomcrosses/index.html | 4 +- gr_funzioni/reference/geomdisjoint/index.html | 4 +- gr_funzioni/reference/geomdistance/index.html | 4 +- gr_funzioni/reference/geomequals/index.html | 4 +- .../reference/geomintersects/index.html | 4 +- gr_funzioni/reference/geomnearest/index.html | 4 +- gr_funzioni/reference/geomoverlaps/index.html | 4 +- gr_funzioni/reference/geomredef/index.html | 4 +- gr_funzioni/reference/geomtouches/index.html | 4 +- gr_funzioni/reference/geomwithin/index.html | 4 +- .../intersecting_geom_count/index.html | 4 +- .../intersecting_geom_sum/index.html | 4 +- gr_funzioni/reference/reference/index.html | 4 +- gr_funzioni/reference/wktarea/index.html | 4 +- gr_funzioni/reference/wktcentroid/index.html | 4 +- gr_funzioni/reference/wktlenght/index.html | 4 +- .../reference/wktpointonsurface/index.html | 4 +- gr_funzioni/relazioni/relazioni/index.html | 4 +- .../stringhe_di_testo_unico/index.html | 4 +- gr_funzioni/variabili/_file_tipo/index.html | 4 +- gr_funzioni/variabili/algorithm_id/index.html | 4 +- .../variabili/animation_end_time/index.html | 4 +- .../variabili/animation_interval/index.html | 4 +- .../variabili/animation_start_time/index.html | 4 +- .../variabili/atlas_feature/index.html | 4 +- .../variabili/atlas_featureid/index.html | 4 +- .../variabili/atlas_featurenumber/index.html | 4 +- .../variabili/atlas_filename/index.html | 4 +- .../variabili/atlas_geometry/index.html | 4 +- .../variabili/atlas_layerid/index.html | 4 +- .../variabili/atlas_layername/index.html | 4 +- .../variabili/atlas_pagename/index.html | 4 +- .../variabili/atlas_totalfeatures/index.html | 4 +- .../variabili/canvas_cursor_point/index.html | 4 +- .../variabili/cluster_color/index.html | 4 +- gr_funzioni/variabili/cluster_size/index.html | 4 +- .../variabili/current_feature/index.html | 4 +- .../variabili/current_geometry/index.html | 4 +- .../current_parent_feature/index.html | 4 +- .../current_parent_geometry/index.html | 4 +- gr_funzioni/variabili/form_mode/index.html | 4 +- .../variabili/frame_duration/index.html | 4 +- gr_funzioni/variabili/frame_number/index.html | 4 +- gr_funzioni/variabili/frame_rate/index.html | 4 +- .../variabili/fullextent_maxx/index.html | 4 +- .../variabili/fullextent_maxy/index.html | 4 +- .../variabili/fullextent_minx/index.html | 4 +- .../variabili/fullextent_miny/index.html | 4 +- .../variabili/geometry_part_count/index.html | 4 +- .../variabili/geometry_part_num/index.html | 4 +- .../variabili/geometry_point_count/index.html | 4 +- .../variabili/geometry_point_num/index.html | 4 +- .../variabili/geometry_ring_num/index.html | 4 +- gr_funzioni/variabili/grid_axis/index.html | 4 +- gr_funzioni/variabili/grid_number/index.html | 4 +- gr_funzioni/variabili/item_id/index.html | 4 +- gr_funzioni/variabili/item_uuid/index.html | 4 +- gr_funzioni/variabili/layer/index.html | 4 +- gr_funzioni/variabili/layer_crs/index.html | 4 +- gr_funzioni/variabili/layer_id/index.html | 4 +- gr_funzioni/variabili/layer_ids/index.html | 4 +- gr_funzioni/variabili/layer_name/index.html | 4 +- gr_funzioni/variabili/layers/index.html | 4 +- gr_funzioni/variabili/layout_dpi/index.html | 4 +- gr_funzioni/variabili/layout_name/index.html | 4 +- .../variabili/layout_numpages/index.html | 4 +- gr_funzioni/variabili/layout_page/index.html | 4 +- .../variabili/layout_pageheight/index.html | 4 +- .../variabili/layout_pageoffsets/index.html | 4 +- .../variabili/layout_pagewidth/index.html | 4 +- .../variabili/legend_column_count/index.html | 4 +- .../variabili/legend_filter_by_map/index.html | 4 +- .../legend_filter_out_atlas/index.html | 4 +- .../variabili/legend_split_layers/index.html | 4 +- gr_funzioni/variabili/legend_title/index.html | 4 +- .../variabili/legend_wrap_string/index.html | 4 +- gr_funzioni/variabili/map_crs/index.html | 4 +- .../variabili/map_crs_acronym/index.html | 4 +- .../variabili/map_crs_definition/index.html | 4 +- .../variabili/map_crs_description/index.html | 4 +- .../variabili/map_crs_ellipsoid/index.html | 4 +- .../variabili/map_crs_proj4/index.html | 4 +- .../variabili/map_crs_projection/index.html | 4 +- gr_funzioni/variabili/map_crs_wkt/index.html | 4 +- gr_funzioni/variabili/map_end_time/index.html | 4 +- gr_funzioni/variabili/map_extent/index.html | 4 +- .../variabili/map_extent_center/index.html | 4 +- .../variabili/map_extent_height/index.html | 4 +- .../variabili/map_extent_width/index.html | 4 +- gr_funzioni/variabili/map_id/index.html | 4 +- gr_funzioni/variabili/map_interval/index.html | 4 +- .../variabili/map_layer_ids/index.html | 4 +- gr_funzioni/variabili/map_layers/index.html | 4 +- gr_funzioni/variabili/map_rotation/index.html | 4 +- gr_funzioni/variabili/map_scale/index.html | 4 +- .../variabili/map_start_time/index.html | 4 +- gr_funzioni/variabili/map_units/index.html | 4 +- gr_funzioni/variabili/model_folder/index.html | 4 +- gr_funzioni/variabili/model_group/index.html | 4 +- gr_funzioni/variabili/model_name/index.html | 4 +- gr_funzioni/variabili/model_path/index.html | 4 +- .../variabili/notification_message/index.html | 4 +- gr_funzioni/variabili/parent/index.html | 4 +- .../variabili/project_abstract/index.html | 4 +- .../variabili/project_area_units/index.html | 4 +- .../variabili/project_author/index.html | 4 +- .../variabili/project_basename/index.html | 4 +- .../project_creation_date/index.html | 4 +- gr_funzioni/variabili/project_crs/index.html | 4 +- .../variabili/project_crs_arconym/index.html | 4 +- .../project_crs_definition/index.html | 4 +- .../project_crs_description/index.html | 4 +- .../project_crs_ellipsoid/index.html | 4 +- .../variabili/project_crs_proj4/index.html | 4 +- .../variabili/project_crs_wkt/index.html | 4 +- .../project_distance_units/index.html | 4 +- .../variabili/project_ellipsoid/index.html | 4 +- .../variabili/project_filename/index.html | 4 +- .../variabili/project_folder/index.html | 4 +- gr_funzioni/variabili/project_home/index.html | 4 +- .../variabili/project_identifier/index.html | 4 +- .../variabili/project_keywords/index.html | 4 +- .../variabili/project_last_saved/index.html | 4 +- gr_funzioni/variabili/project_path/index.html | 4 +- .../variabili/project_title/index.html | 4 +- .../variabili/project_units/index.html | 4 +- gr_funzioni/variabili/qgis_locale/index.html | 4 +- gr_funzioni/variabili/qgis_os_name/index.html | 4 +- .../variabili/qgis_platform/index.html | 4 +- .../variabili/qgis_release_name/index.html | 4 +- .../variabili/qgis_short_version/index.html | 4 +- gr_funzioni/variabili/qgis_version/index.html | 4 +- .../variabili/qgis_version_no/index.html | 4 +- gr_funzioni/variabili/row_number/index.html | 4 +- gr_funzioni/variabili/scale_value/index.html | 4 +- .../variabili/snapping_results/index.html | 4 +- gr_funzioni/variabili/symbol_angle/index.html | 4 +- gr_funzioni/variabili/symbol_color/index.html | 4 +- gr_funzioni/variabili/symbol_count/index.html | 4 +- gr_funzioni/variabili/symbol_id/index.html | 4 +- gr_funzioni/variabili/symbol_label/index.html | 4 +- .../variabili/symbol_layer_count/index.html | 4 +- .../variabili/symbol_layer_index/index.html | 4 +- .../variabili/symbol_marker_column/index.html | 4 +- .../variabili/symbol_marker_row/index.html | 4 +- .../variabili/user_account_name/index.html | 4 +- .../variabili/user_full_name/index.html | 4 +- gr_funzioni/variabili/value/index.html | 4 +- gr_funzioni/variabili/variabili/index.html | 4 +- .../variabili/with_variable/index.html | 4 +- gr_funzioni/variabili/zoom_level/index.html | 4 +- img/index.html | 4 +- index.html | 4 +- mettiti_alla_prova/index.html | 4 +- ods/index.html | 4 +- parlano_di_noi/index.html | 4 +- privacy/index.html | 4 +- pull-request/index.html | 4 +- release/index.html | 4 +- release/intro_novita/index.html | 4 +- release/novita_30/index.html | 4 +- release/novita_310/index.html | 4 +- release/novita_312/index.html | 4 +- release/novita_314/index.html | 4 +- release/novita_316/index.html | 4 +- release/novita_318/index.html | 4 +- release/novita_32/index.html | 4 +- release/novita_320/index.html | 4 +- release/novita_322/index.html | 4 +- release/novita_324/index.html | 4 +- release/novita_326/index.html | 4 +- release/novita_328/index.html | 4 +- release/novita_330/index.html | 4 +- release/novita_332/index.html | 4 +- release/novita_334/index.html | 8 +- release/novita_34/index.html | 4 +- release/novita_36/index.html | 4 +- release/novita_38/index.html | 4 +- risorse/index.html | 4 +- search/search_index.json | 2 +- sitemap.xml | 678 +++++++++--------- sitemap.xml.gz | Bin 3211 -> 3211 bytes sitografia_field_calc/index.html | 4 +- supporter/index.html | 4 +- .../tabella_attributi/index.html | 4 +- tag_espressioni/funzioni-tags/index.html | 4 +- tag_espressioni/tags_esplose/index.html | 4 +- tags/index.html | 4 +- traduzione/index.html | 4 +- webmaster/gbvitrano/index.html | 4 +- 348 files changed, 1033 insertions(+), 1023 deletions(-) delete mode 100644 assets/stylesheets/main.35e1ed30.min.css delete mode 100644 assets/stylesheets/main.35e1ed30.min.css.map create mode 100644 assets/stylesheets/main.4b4a2bd9.min.css create mode 100644 assets/stylesheets/main.4b4a2bd9.min.css.map diff --git a/404.html b/404.html index 7c5e17f28..e1ce04c23 100644 --- a/404.html +++ b/404.html @@ -20,7 +20,7 @@ - + @@ -28,7 +28,7 @@ - + diff --git a/LICENSE_my/index.html b/LICENSE_my/index.html index cd2f83fad..f8c9ea814 100644 --- a/LICENSE_my/index.html +++ b/LICENSE_my/index.html @@ -24,7 +24,7 @@ - + @@ -32,7 +32,7 @@ - + diff --git a/assets/stylesheets/main.35e1ed30.min.css b/assets/stylesheets/main.35e1ed30.min.css deleted file mode 100644 index 0fb3e3a2c..000000000 --- a/assets/stylesheets/main.35e1ed30.min.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr[title]:focus:after,.md-typeset abbr[title]:hover:after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);font-size:.7rem;left:.8rem;margin-top:2em;padding:.2rem .3rem;position:absolute;right:.8rem}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-typeset .md-author{display:block;flex-shrink:0;height:1.6rem;overflow:hidden;position:relative;transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .md-author img{border-radius:100%;display:block}.md-typeset .md-author--more{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .md-author--long{height:2.4rem;width:2.4rem}.md-typeset a.md-author{transform:scale(1)}.md-typeset a.md-author img{filter:grayscale(100%) opacity(75%);transition:filter 125ms}.md-typeset a.md-author:focus,.md-typeset a.md-author:hover{transform:scale(1.1);z-index:1}.md-typeset a.md-author:focus img,.md-typeset a.md-author:hover img{filter:grayscale(0)}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{align-content:baseline;display:flex;flex-wrap:wrap;justify-content:center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;opacity:.7}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:focus,.md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-left:1rem}[dir=rtl] .md-header__title{margin-right:1rem}[dir=ltr] .md-header__title{margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-meta{color:var(--md-default-fg-color--light);font-size:.7rem;line-height:1.3}.md-meta__list{display:inline-flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.md-meta__item:not(:last-child):after{content:"ยท";margin-left:.2rem;margin-right:.2rem}.md-meta__link{color:var(--md-typeset-a-color)}.md-meta__link:focus,.md-meta__link:hover{color:var(--md-accent-fg-color)}.md-draft{background-color:#ff1744;border-radius:.125em;color:#fff;display:inline-block;font-weight:700;padding-left:.5714285714em;padding-right:.5714285714em}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__link{align-items:flex-start;display:flex;gap:.4rem;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__link .md-ellipsis{position:relative}[dir=ltr] .md-nav__link .md-icon:last-child{margin-left:auto}[dir=rtl] .md-nav__link .md-icon:last-child{margin-right:auto}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em}.md-nav__link[for]:focus,.md-nav__link[for]:hover,.md-nav__link[href]:focus,.md-nav__link[href]:hover{color:var(--md-accent-fg-color);cursor:pointer}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__container>.md-nav__link{margin-top:0}.md-nav__container>.md-nav__link:first-child{flex-grow:1;min-width:0}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.234375em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:focus,.md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link svg{margin-top:.1em}.md-nav--primary .md-nav__link>.md-nav__link{padding:0}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.984375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav{margin-bottom:-.4rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--secondary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--secondary .md-nav__list{padding-right:.6rem}.md-nav--secondary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--secondary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--secondary .md-nav__item>.md-nav__link{margin-left:.4rem}}@media screen and (min-width:76.25em){.md-nav{margin-bottom:-.4rem;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--primary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--primary .md-nav__list{padding-right:.6rem}.md-nav--primary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--primary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--primary .md-nav__item>.md-nav__link{margin-left:.4rem}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle:checked~.md-nav,.md-nav__toggle:indeterminate~.md-nav{grid-template-rows:1fr;opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav__link .md-icon,.md-nav__item--section>.md-nav__link>[for]{display:none}[dir=ltr] .md-nav__item--section>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav__item--section>.md-nav{margin-right:-.6rem}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);margin-top:0;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}[dir=ltr] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav{margin-right:-.6rem}.md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:1fr;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}.md-pagination{font-size:.8rem;font-weight:700;gap:.4rem}.md-pagination,.md-pagination>*{align-items:center;display:flex;justify-content:center}.md-pagination>*{border-radius:.2rem;height:1.8rem;min-width:1.8rem;text-align:center}.md-pagination__current{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light)}.md-pagination__link{transition:color 125ms,background-color 125ms}.md-pagination__link:focus,.md-pagination__link:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-pagination__link:focus svg,.md-pagination__link:hover svg{color:var(--md-accent-fg-color)}.md-pagination__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-pagination__link svg{fill:currentcolor;color:var(--md-default-fg-color--lighter);display:block;max-height:100%;width:1.2rem}.md-post__back{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin-bottom:1.2rem;padding-bottom:1.2rem}@media screen and (max-width:76.234375em){.md-post__back{display:none}}[dir=rtl] .md-post__back svg{transform:scaleX(-1)}.md-post__authors{display:flex;flex-direction:column;gap:.6rem;margin:0 .6rem 1.2rem}.md-post .md-post__meta a{transition:color 125ms}.md-post .md-post__meta a:focus,.md-post .md-post__meta a:hover{color:var(--md-accent-fg-color)}.md-post__title{color:var(--md-default-fg-color--light);font-weight:700}.md-post--excerpt{margin-bottom:3.2rem}.md-post--excerpt .md-post__header{align-items:center;display:flex;gap:.6rem;min-height:1.6rem}.md-post--excerpt .md-post__authors{align-items:center;display:inline-flex;flex-direction:row;gap:.2rem;margin:0;min-height:2.4rem}[dir=ltr] .md-post--excerpt .md-post__meta .md-meta__list{margin-right:.4rem}[dir=rtl] .md-post--excerpt .md-post__meta .md-meta__list{margin-left:.4rem}.md-post--excerpt .md-post__content>:first-child{--md-scroll-margin:6rem;margin-top:0}.md-post>.md-nav--secondary{margin:1em 0}.md-profile{align-items:center;display:flex;font-size:.7rem;gap:.6rem;line-height:1.4;width:100%}.md-profile__description{flex-grow:1}.md-content--post{display:flex}@media screen and (max-width:76.234375em){.md-content--post{flex-flow:column-reverse}}.md-content--post>.md-content__inner{min-width:0}@media screen and (min-width:76.25em){[dir=ltr] .md-content--post>.md-content__inner{margin-left:1.2rem}[dir=rtl] .md-content--post>.md-content__inner{margin-right:1.2rem}}@media screen and (max-width:76.234375em){.md-sidebar.md-sidebar--post{padding:0;position:static;width:100%}.md-sidebar.md-sidebar--post .md-sidebar__scrollwrap{overflow:visible}.md-sidebar.md-sidebar--post .md-sidebar__inner{padding:0}.md-sidebar.md-sidebar--post .md-post__meta{margin-left:.6rem;margin-right:.6rem}.md-sidebar.md-sidebar--post .md-nav__item{border:none;display:inline}.md-sidebar.md-sidebar--post .md-nav__list{display:inline-flex;flex-wrap:wrap;gap:.6rem;padding-bottom:.6rem;padding-top:.6rem}.md-sidebar.md-sidebar--post .md-nav__link{padding:0}.md-sidebar.md-sidebar--post .md-nav{height:auto;margin-bottom:0;position:static}}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:#0000008a;cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.234375em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem #0000;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:#00000042;border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:#ffffff1f}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem #00000012;color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:#0000;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::placeholder{transition:color .25s}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.984375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:#0000}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>.md-icon{margin-left:.2rem}[dir=rtl] .md-search__options>.md-icon{margin-right:.2rem}.md-search__options>.md-icon{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>.md-icon:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.984375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more>summary{cursor:pointer;display:block;outline:none;position:sticky;scroll-snap-align:start;top:0;z-index:1}.md-search-result__more>summary::marker{display:none}.md-search-result__more>summary::-webkit-details-marker{display:none}.md-search-result__more>summary>div{color:var(--md-typeset-a-color);font-size:.64rem;padding:.75em .8rem;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more>summary>div{padding-left:2.2rem}[dir=rtl] .md-search-result__more>summary>div{padding-right:2.2rem}}.md-search-result__more>summary:focus>div,.md-search-result__more>summary:hover>div{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more[open]>summary{background-color:var(--md-default-bg-color)}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.984375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result .md-typeset{color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.6}.md-search-result .md-typeset h1{color:var(--md-default-fg-color);font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}.md-search-result .md-typeset h1 mark{text-decoration:none}.md-search-result .md-typeset h2{color:var(--md-default-fg-color);font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result .md-typeset h2 mark{text-decoration:none}.md-search-result__terms{color:var(--md-default-fg-color);display:block;font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color);text-decoration:underline}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.234375em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}:root{--md-status:url('data:image/svg+xml;charset=utf-8,');--md-status--new:url('data:image/svg+xml;charset=utf-8,');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,');--md-status--encrypted:url('data:image/svg+xml;charset=utf-8,')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-status--encrypted:after{-webkit-mask-image:var(--md-status--encrypted);mask-image:var(--md-status--encrypted)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags:not([hidden]){display:inline-flex;flex-wrap:wrap;gap:.5em;margin-bottom:.75em;margin-top:-.125em}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,');--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:xxx;list-style:none}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(xxx);counter-increment:xxx;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.075rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid;transition:box-shadow 125ms}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition:focus-within,.md-typeset details:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset .admonition.note,.md-typeset details.note{border-color:#448aff}.md-typeset .admonition.note:focus-within,.md-typeset details.note:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .note>.admonition-title,.md-typeset .note>summary{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{border-color:#00b0ff}.md-typeset .admonition.abstract:focus-within,.md-typeset details.abstract:focus-within{box-shadow:0 0 0 .2rem #00b0ff1a}.md-typeset .abstract>.admonition-title,.md-typeset .abstract>summary{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{border-color:#00b8d4}.md-typeset .admonition.info:focus-within,.md-typeset details.info:focus-within{box-shadow:0 0 0 .2rem #00b8d41a}.md-typeset .info>.admonition-title,.md-typeset .info>summary{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{border-color:#00bfa5}.md-typeset .admonition.tip:focus-within,.md-typeset details.tip:focus-within{box-shadow:0 0 0 .2rem #00bfa51a}.md-typeset .tip>.admonition-title,.md-typeset .tip>summary{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{border-color:#00c853}.md-typeset .admonition.success:focus-within,.md-typeset details.success:focus-within{box-shadow:0 0 0 .2rem #00c8531a}.md-typeset .success>.admonition-title,.md-typeset .success>summary{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{border-color:#64dd17}.md-typeset .admonition.question:focus-within,.md-typeset details.question:focus-within{box-shadow:0 0 0 .2rem #64dd171a}.md-typeset .question>.admonition-title,.md-typeset .question>summary{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{border-color:#ff9100}.md-typeset .admonition.warning:focus-within,.md-typeset details.warning:focus-within{box-shadow:0 0 0 .2rem #ff91001a}.md-typeset .warning>.admonition-title,.md-typeset .warning>summary{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{border-color:#ff5252}.md-typeset .admonition.failure:focus-within,.md-typeset details.failure:focus-within{box-shadow:0 0 0 .2rem #ff52521a}.md-typeset .failure>.admonition-title,.md-typeset .failure>summary{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{border-color:#ff1744}.md-typeset .admonition.danger:focus-within,.md-typeset details.danger:focus-within{box-shadow:0 0 0 .2rem #ff17441a}.md-typeset .danger>.admonition-title,.md-typeset .danger>summary{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{border-color:#f50057}.md-typeset .admonition.bug:focus-within,.md-typeset details.bug:focus-within{box-shadow:0 0 0 .2rem #f500571a}.md-typeset .bug>.admonition-title,.md-typeset .bug>summary{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{border-color:#7c4dff}.md-typeset .admonition.example:focus-within,.md-typeset details.example:focus-within{box-shadow:0 0 0 .2rem #7c4dff1a}.md-typeset .example>.admonition-title,.md-typeset .example>summary{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{border-color:#9e9e9e}.md-typeset .admonition.quote:focus-within,.md-typeset details.quote:focus-within{box-shadow:0 0 0 .2rem #9e9e9e1a}.md-typeset .quote>.admonition-title,.md-typeset .quote>summary{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target,.md-typeset h2:target,.md-typeset h3:target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"โŽ‡";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"โŒ˜";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"โŒƒ";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"โ—†";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"โŒฅ";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"โ‡ง";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"โ–";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"โŠž";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"โ†“";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"โ†";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"โ†’";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"โ†‘";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"โŒซ";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"โ‡ค";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"โ‡ช";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"โŒง";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"โ˜ฐ";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"โŒฆ";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"โ";padding-right:.4em}.md-typeset .keys .key-end:before{content:"โค“";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"โŽ‹";padding-right:.4em}.md-typeset .keys .key-home:before{content:"โค’";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"โŽ€";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"โ‡Ÿ";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"โ‡ž";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"โŽ™";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"โ‡ฅ";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"โŒค";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"โŽ";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/assets/stylesheets/main.35e1ed30.min.css.map b/assets/stylesheets/main.35e1ed30.min.css.map deleted file mode 100644 index 7612577e8..000000000 --- a/assets/stylesheets/main.35e1ed30.min.css.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["src/templates/assets/stylesheets/main/components/_meta.scss","../../../../src/templates/assets/stylesheets/main.scss","src/templates/assets/stylesheets/main/_resets.scss","src/templates/assets/stylesheets/main/_colors.scss","src/templates/assets/stylesheets/main/_icons.scss","src/templates/assets/stylesheets/main/_typeset.scss","src/templates/assets/stylesheets/utilities/_break.scss","src/templates/assets/stylesheets/main/components/_author.scss","src/templates/assets/stylesheets/main/components/_banner.scss","src/templates/assets/stylesheets/main/components/_base.scss","src/templates/assets/stylesheets/main/components/_clipboard.scss","src/templates/assets/stylesheets/main/components/_consent.scss","src/templates/assets/stylesheets/main/components/_content.scss","src/templates/assets/stylesheets/main/components/_dialog.scss","src/templates/assets/stylesheets/main/components/_feedback.scss","src/templates/assets/stylesheets/main/components/_footer.scss","src/templates/assets/stylesheets/main/components/_form.scss","src/templates/assets/stylesheets/main/components/_header.scss","node_modules/material-design-color/material-color.scss","src/templates/assets/stylesheets/main/components/_nav.scss","src/templates/assets/stylesheets/main/components/_pagination.scss","src/templates/assets/stylesheets/main/components/_post.scss","src/templates/assets/stylesheets/main/components/_progress.scss","src/templates/assets/stylesheets/main/components/_search.scss","src/templates/assets/stylesheets/main/components/_select.scss","src/templates/assets/stylesheets/main/components/_sidebar.scss","src/templates/assets/stylesheets/main/components/_source.scss","src/templates/assets/stylesheets/main/components/_status.scss","src/templates/assets/stylesheets/main/components/_tabs.scss","src/templates/assets/stylesheets/main/components/_tag.scss","src/templates/assets/stylesheets/main/components/_tooltip.scss","src/templates/assets/stylesheets/main/components/_top.scss","src/templates/assets/stylesheets/main/components/_version.scss","src/templates/assets/stylesheets/main/extensions/markdown/_admonition.scss","src/templates/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/templates/assets/stylesheets/main/extensions/markdown/_toc.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_keys.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/templates/assets/stylesheets/main/integrations/_mermaid.scss","src/templates/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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gC5vGI,kFACE,ahC8vGN,CgCnxGE,4DACE,oBhCsxGJ,CgCnxGI,sFACE,gChCqxGN,CgChxGE,oEACE,0BhCmxGJ,CgChxGI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ChCkxGN,CgC9wGI,gFACE,ahCgxGN,CgCryGE,4DACE,oBhCwyGJ,CgCryGI,sFACE,gChCuyGN,CgClyGE,oEACE,0BhCqyGJ,CgClyGI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ChCoyGN,CgChyGI,gFACE,ahCkyGN,CgCvzGE,0DACE,oBhC0zGJ,CgCvzGI,oFACE,gChCyzGN,CgCpzGE,kEACE,0BhCuzGJ,CgCpzGI,gFACE,wBAlBG,CAmBH,oDAAA,CAAA,4ChCszGN,CgClzGI,8EACE,ahCozGN,CgCz0GE,oDACE,oBhC40GJ,CgCz0GI,8EACE,gChC20GN,CgCt0GE,4DACE,0BhCy0GJ,CgCt0GI,0EACE,wBAlBG,CAmBH,iDAAA,CAAA,yChCw0GN,CgCp0GI,wEACE,ahCs0GN,CgC31GE,4DACE,oBhC81GJ,CgC31GI,sFACE,gChC61GN,CgCx1GE,oEACE,0BhC21GJ,CgCx1GI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ChC01GN,CgCt1GI,gFACE,ahCw1GN,CgC72GE,wDACE,oBhCg3GJ,CgC72GI,kFACE,gChC+2GN,CgC12GE,gEACE,0BhC62GJ,CgC12GI,8EACE,wBAlBG,CAmBH,mDAAA,CAAA,2ChC42GN,CgCx2GI,4EACE,ahC02GN,CiC9gHA,MACE,wMjCihHF,CiCxgHE,sBAEE,uCAAA,CADA,gBjC4gHJ,CiCxgHI,mCACE,ajC0gHN,CiC3gHI,mCACE,cjC0gHN,CiCtgHM,4BACE,sBjCwgHR,CiCrgHQ,mCACE,gCjCugHV,CiCngHQ,2DACE,SAAA,CAEA,uBAAA,CADA,ejCsgHV,CiCjgHQ,yGACE,SAAA,CACA,uBjCmgHV,CiC//GQ,yCACE,YjCigHV,CiC1/GE,0BACE,eAAA,CACA,ejC4/GJ,CiCz/GI,+BACE,oBjC2/GN,CiCt/GE,gDACE,YjCw/GJ,CiCp/GE,8BAIE,+BAAA,CAHA,oBAAA,CAEA,WAAA,CAGA,SAAA,CAKA,4BAAA,CAJA,4DACE,CAHF,0BjCw/GJ,CiC/+GI,aAdF,8BAeI,+BAAA,CACA,SAAA,CACA,uBjCk/GJ,CACF,CiC/+GI,wCACE,6BjCi/GN,CiC7+GI,oCACE,+BjC++GN,CiC3+GI,qCAKE,6BAAA,CADA,UAAA,CAHA,oBAAA,CAEA,YAAA,CAGA,2CAAA,CAAA,mCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CAPA,WjCo/GN,CiCv+GQ,mDACE,oBjCy+GV,CkCvlHE,kCAEE,iBlC6lHJ,CkC/lHE,kCAEE,kBlC6lHJ,CkC/lHE,wBAGE,yCAAA,CAFA,oBAAA,CAGA,SAAA,CACA,mClC0lHJ,CkCrlHI,aAVF,wBAWI,YlCwlHJ,CACF,CkCplHE,6FAEE,SAAA,CACA,mClCslHJ,CkChlHE,4FAEE,+BlCklHJ,CkC9kHE,oBACE,yBAAA,CACA,uBAAA,CAGA,yElC8kHJ,CK/8GI,sC6BrHE,qDACE,uBlCukHN,CACF,CkClkHE,kEACE,yBlCokHJ,CkChkHE,sBACE,0BlCkkHJ,CmC7nHE,2BACE,anCgoHJ,CK38GI,0C8BtLF,2BAKI,enCgoHJ,CACF,CmC7nHI,6BAGE,0BAAA,CAAA,2BAAA,CADA,eAAA,CAEA,iBAAA,CAHA,yBAAA,CAAA,iBnCkoHN,CmC5nHM,2CACE,kBnC8nHR,CoC/oHE,uBACE,4CpCmpHJ,CoC9oHE,8CAJE,kCAAA,CAAA,0BpCspHJ,CoClpHE,uBACE,4CpCipHJ,CoC5oHE,4BAEE,kCAAA,CAAA,0BAAA,CADA,qCpC+oHJ,CoC3oHI,mCACE,apC6oHN,CoCzoHI,kCACE,apC2oHN,CoCtoHE,0BAKE,eAAA,CAJA,aAAA,CAEA,YAAA,CACA,aAAA,CAFA,kBAAA,CAAA,mBpC2oHJ,CoCroHI,uCACE,epCuoHN,CoCnoHI,sCACE,kBpCqoHN,CqClrHA,MACE,8LrCqrHF,CqC5qHE,oBAGE,iBAAA,CAEA,gBAAA,CADA,arC8qHJ,CqC1qHI,wCACE,uBrC4qHN,CqCxqHI,gCAEE,eAAA,CADA,gBrC2qHN,CqCpqHM,wCACE,mBrCsqHR,CqChqHE,8BAKE,oBrCmqHJ,CqCxqHE,8BAKE,mBrCmqHJ,CqCxqHE,8BAOE,4BrCiqHJ,CqCxqHE,4DAQE,6BrCgqHJ,CqCxqHE,8BAQE,4BrCgqHJ,CqCxqHE,oBAME,cAAA,CAHA,aAAA,CACA,erCoqHJ,CqC7pHI,kCACE,uCAAA,CACA,oBrC+pHN,CqC3pHI,wCAEE,uCAAA,CADA,YrC8pHN,CqCzpHI,oCASE,WrC+pHN,CqCxqHI,oCASE,UrC+pHN,CqCxqHI,0BAME,6BAAA,CADA,UAAA,CADA,WAAA,CAMA,yCAAA,CAAA,iCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CAZA,iBAAA,CACA,UAAA,CAMA,sBAAA,CADA,yBAAA,CAJA,UrCqqHN,CqCxpHM,oCACE,wBrC0pHR,CqCrpHI,4BACE,YrCupHN,CqClpHI,4CACE,YrCopHN,CsC3uHE,+DACE,mBAAA,CACA,cAAA,CACA,uBtC8uHJ,CsC3uHI,2EAGE,iBAAA,CADA,eAAA,CADA,atC+uHN,CuCrvHE,6BACE,sCvCwvHJ,CuCrvHE,cACE,yCvCuvHJ,CuC3uHE,sIACE,oCvC6uHJ,CuCruHE,2EACE,qCvCuuHJ,CuC7tHE,wGACE,oCvC+tHJ,CuCttHE,yFACE,qCvCwtHJ,CuCntHE,6BACE,kCvCqtHJ,CuC/sHE,6CACE,sCvCitHJ,CuC1sHE,4DACE,sCvC4sHJ,CuCrsHE,4DACE,qCvCusHJ,CuC9rHE,yFACE,qCvCgsHJ,CuCxrHE,2EACE,sCvC0rHJ,CuC/qHE,wHACE,qCvCirHJ,CuC5qHE,8BAGE,mBAAA,CADA,gBAAA,CADA,gBvCgrHJ,CuC3qHE,eACE,4CvC6qHJ,CuC1qHE,eACE,4CvC4qHJ,CuCxqHE,gBAIE,+CAAA,CACA,kDAAA,CAJA,aAAA,CAEA,wBAAA,CADA,wBvC6qHJ,CuCtqHE,yBAOE,wCAAA,CACA,+DAAA,CACA,4BAAA,CACA,6BAAA,CARA,iBAAA,CAGA,eAAA,CACA,eAAA,CAFA,cAAA,CADA,oCAAA,CAFA,iBvCirHJ,CuCrqHI,6BACE,YvCuqHN,CuCpqHM,kCACE,wBAAA,CACA,yBvCsqHR,CuChqHE,iCAaE,wCAAA,CACA,+DAAA,CAJA,uCAAA,CACA,0BAAA,CALA,UAAA,CAJA,oBAAA,CAOA,2BAAA,CADA,2BAAA,CADA,2BAAA,CANA,eAAA,CAWA,wBAAA,CAAA,gBAAA,CAPA,SvCyqHJ,CuCvpHE,sBACE,iBAAA,CACA,iBvCypHJ,CuCjpHI,sCACE,gBvCmpHN,CuC/oHI,gDACE,YvCipHN,CuCvoHA,gBACE,iBvC0oHF,CuCtoHE,yCACE,aAAA,CACA,SvCwoHJ,CuCnoHE,mBACE,YvCqoHJ,CuChoHE,oBACE,QvCkoHJ,CuC9nHE,4BACE,WAAA,CACA,SAAA,CACA,evCgoHJ,CuC7nHI,0CACE,YvC+nHN,CuCznHE,yBAKE,wCAAA,CAEA,+BAAA,CADA,4BAAA,CAHA,eAAA,CADA,oDAAA,CAEA,wBAAA,CAAA,gBvC8nHJ,CuCvnHE,2BAEE,+DAAA,CADA,2BvC0nHJ,CuCtnHI,+BACE,uCAAA,CACA,gBvCwnHN,CuCnnHE,sBACE,MAAA,CACA,WvCqnHJ,CuChnHA,aACE,avCmnHF,CuCzmHE,4BAEE,aAAA,CADA,YvC6mHJ,CuCzmHI,wDAEE,2BAAA,CADA,wBvC4mHN,CuCtmHE,+BAKE,2CAAA,CAEA,+BAAA,CADA,gCAAA,CADA,sBAAA,CAHA,mBAAA,CACA,gBAAA,CAFA,avC8mHJ,CuCrmHI,qCAEE,UAAA,CACA,UAAA,CAFA,avCymHN,CK3uHI,0CkCiJF,8BACE,iBvC8lHF,CuCplHE,wSAGE,evC0lHJ,CuCtlHE,sCAEE,mBAAA,CACA,eAAA,CADA,oBAAA,CADA,kBAAA,CAAA,mBvC0lHJ,CACF,CwCl7HI,yDAIE,+BAAA,CACA,8BAAA,CAFA,aAAA,CADA,QAAA,CADA,iBxCw7HN,CwCh7HI,uBAEE,uCAAA,CADA,cxCm7HN,CwC93HM,iHAEE,WAlDkB,CAiDlB,kBxCy4HR,CwC14HM,6HAEE,WAlDkB,CAiDlB,kBxCq5HR,CwCt5HM,6HAEE,WAlDkB,CAiDlB,kBxCi6HR,CwCl6HM,oHAEE,WAlDkB,CAiDlB,kBxC66HR,CwC96HM,0HAEE,WAlDkB,CAiDlB,kBxCy7HR,CwC17HM,uHAEE,WAlDkB,CAiDlB,kBxCq8HR,CwCt8HM,uHAEE,WAlDkB,CAiDlB,kBxCi9HR,CwCl9HM,6HAEE,WAlDkB,CAiDlB,kBxC69HR,CwC99HM,yCAEE,WAlDkB,CAiDlB,kBxCi+HR,CwCl+HM,yCAEE,WAlDkB,CAiDlB,kBxCq+HR,CwCt+HM,0CAEE,WAlDkB,CAiDlB,kBxCy+HR,CwC1+HM,uCAEE,WAlDkB,CAiDlB,kBxC6+HR,CwC9+HM,wCAEE,WAlDkB,CAiDlB,kBxCi/HR,CwCl/HM,sCAEE,WAlDkB,CAiDlB,kBxCq/HR,CwCt/HM,wCAEE,WAlDkB,CAiDlB,kBxCy/HR,CwC1/HM,oCAEE,WAlDkB,CAiDlB,kBxC6/HR,CwC9/HM,2CAEE,WAlDkB,CAiDlB,kBxCigIR,CwClgIM,qCAEE,WAlDkB,CAiDlB,kBxCqgIR,CwCtgIM,oCAEE,WAlDkB,CAiDlB,kBxCygIR,CwC1gIM,kCAEE,WAlDkB,CAiDlB,kBxC6gIR,CwC9gIM,qCAEE,WAlDkB,CAiDlB,kBxCihIR,CwClhIM,mCAEE,WAlDkB,CAiDlB,kBxCqhIR,CwCthIM,qCAEE,WAlDkB,CAiDlB,kBxCyhIR,CwC1hIM,wCAEE,WAlDkB,CAiDlB,kBxC6hIR,CwC9hIM,sCAEE,WAlDkB,CAiDlB,kBxCiiIR,CwCliIM,2CAEE,WAlDkB,CAiDlB,kBxCqiIR,CwC1hIM,iCAEE,WAPkB,CAMlB,iBxC6hIR,CwC9hIM,uCAEE,WAPkB,CAMlB,iBxCiiIR,CwCliIM,mCAEE,WAPkB,CAMlB,iBxCqiIR,CyCvnIA,MACE,qMAAA,CACA,mMzC0nIF,CyCjnIE,wBAKE,mBAAA,CAHA,YAAA,CACA,qBAAA,CACA,YAAA,CAHA,iBzCwnIJ,CyC9mII,8BAGE,QAAA,CACA,SAAA,CAHA,iBAAA,CACA,OzCknIN,CyC7mIM,qCACE,0BzC+mIR,CyCllIM,kEACE,0CzColIR,CyC9kIE,2BAKE,uBAAA,CADA,+DAAA,CAHA,YAAA,CACA,cAAA,CACA,aAAA,CAGA,oBzCglIJ,CyC7kII,aATF,2BAUI,gBzCglIJ,CACF,CyC7kII,cAGE,+BACE,iBzC6kIN,CyC1kIM,sCAQE,qCAAA,CANA,QAAA,CAKA,UAAA,CAHA,aAAA,CAEA,UAAA,CAHA,MAAA,CAFA,iBAAA,CAaA,2CAAA,CALA,2DACE,CAGF,kDAAA,CARA,+BzCklIR,CACF,CyCpkII,8CACE,YzCskIN,CyClkII,iCASE,+BAAA,CACA,6BAAA,CAJA,uCAAA,CAEA,cAAA,CAPA,aAAA,CAGA,gBAAA,CACA,eAAA,CAFA,8BAAA,CAWA,+BAAA,CAHA,2CACE,CALF,kBAAA,CALA,UzC8kIN,CyC/jIM,aAII,6CACE,OzC8jIV,CyC/jIQ,8CACE,OzCikIV,CyClkIQ,8CACE,OzCokIV,CyCrkIQ,8CACE,OzCukIV,CyCxkIQ,8CACE,OzC0kIV,CyC3kIQ,8CACE,OzC6kIV,CyC9kIQ,8CACE,OzCglIV,CyCjlIQ,8CACE,OzCmlIV,CyCplIQ,8CACE,OzCslIV,CyCvlIQ,+CACE,QzCylIV,CyC1lIQ,+CACE,QzC4lIV,CyC7lIQ,+CACE,QzC+lIV,CyChmIQ,+CACE,QzCkmIV,CyCnmIQ,+CACE,QzCqmIV,CyCtmIQ,+CACE,QzCwmIV,CyCzmIQ,+CACE,QzC2mIV,CyC5mIQ,+CACE,QzC8mIV,CyC/mIQ,+CACE,QzCinIV,CyClnIQ,+CACE,QzConIV,CyCrnIQ,+CACE,QzCunIV,CACF,CyClnIM,uCACE,gCzConIR,CyC9mIE,4BACE,UzCgnIJ,CyC7mII,aAJF,4BAKI,gBzCgnIJ,CACF,CyC5mIE,0BACE,YzC8mIJ,CyC3mII,aAJF,0BAKI,azC8mIJ,CyC1mIM,sCACE,OzC4mIR,CyC7mIM,uCACE,OzC+mIR,CyChnIM,uCACE,OzCknIR,CyCnnIM,uCACE,OzCqnIR,CyCtnIM,uCACE,OzCwnIR,CyCznIM,uCACE,OzC2nIR,CyC5nIM,uCACE,OzC8nIR,CyC/nIM,uCACE,OzCioIR,CyCloIM,uCACE,OzCooIR,CyCroIM,wCACE,QzCuoIR,CyCxoIM,wCACE,QzC0oIR,CyC3oIM,wCACE,QzC6oIR,CyC9oIM,wCACE,QzCgpIR,CyCjpIM,wCACE,QzCmpIR,CyCppIM,wCACE,QzCspIR,CyCvpIM,wCACE,QzCypIR,CyC1pIM,wCACE,QzC4pIR,CyC7pIM,wCACE,QzC+pIR,CyChqIM,wCACE,QzCkqIR,CyCnqIM,wCACE,QzCqqIR,CACF,CyC/pII,+FAEE,QzCiqIN,CyC9pIM,yGACE,wBAAA,CACA,yBzCiqIR,CyCxpIM,2DAEE,wBAAA,CACA,yBAAA,CAFA,QzC4pIR,CyCrpIM,iEACE,QzCupIR,CyCppIQ,qLAGE,wBAAA,CACA,yBAAA,CAFA,QzCwpIV,CyClpIQ,6FACE,wBAAA,CACA,yBzCopIV,CyC/oIM,yDACE,kBzCipIR,CyC5oII,sCACE,QzC8oIN,CyCzoIE,2BAEE,iBAAA,CAOA,kBAAA,CAHA,uCAAA,CAEA,cAAA,CAPA,aAAA,CAGA,YAAA,CACA,gBAAA,CAEA,mBAAA,CAGA,gCAAA,CAPA,WzCkpIJ,CyCxoII,iCAEE,uDAAA,CADA,+BzC2oIN,CyCtoII,iCAKE,6BAAA,CADA,UAAA,CAHA,aAAA,CAEA,WAAA,CAMA,8CAAA,CAAA,sCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CANA,+CACE,CALF,UzCgpIN,CyCjoIE,4BAOE,yEACE,CANF,YAAA,CAGA,aAAA,CAFA,qBAAA,CAGA,mBAAA,CALA,iBAAA,CAYA,wBAAA,CATA,YzCuoIJ,CyC3nII,sCACE,wBzC6nIN,CyCznII,oCACE,SzC2nIN,CyCvnII,kCAGE,wEACE,CAFF,mBAAA,CADA,OzC2nIN,CyCjnIM,uDACE,8CAAA,CAAA,sCzCmnIR,CKzuII,0CoCoIF,wDAEE,kBzC2mIF,CyC7mIA,wDAEE,mBzC2mIF,CyC7mIA,8CAGE,eAAA,CAFA,eAAA,CAGA,iCzCymIF,CyCrmIE,8DACE,mBzCwmIJ,CyCzmIE,8DACE,kBzCwmIJ,CyCzmIE,oDAEE,UzCumIJ,CyCnmIE,8EAEE,kBzCsmIJ,CyCxmIE,8EAEE,mBzCsmIJ,CyCxmIE,8EAGE,kBzCqmIJ,CyCxmIE,8EAGE,mBzCqmIJ,CyCxmIE,oEACE,UzCumIJ,CyCjmIE,8EAEE,mBzComIJ,CyCtmIE,8EAEE,kBzComIJ,CyCtmIE,8EAGE,mBzCmmIJ,CyCtmIE,8EAGE,kBzCmmIJ,CyCtmIE,oEACE,UzCqmIJ,CACF,CyCvlIE,cAHF,olDAII,gCzC0lIF,CyCvlIE,g8GACE,uCzCylIJ,CACF,CyCplIA,4sDACE,+BzCulIF,CyCnlIA,wmDACE,azCslIF,C0Cz8IA,MACE,8WAAA,CACA,uX1C48IF,C0Cn8IE,4BAEE,oBAAA,CADA,iB1Cu8IJ,C0Cl8II,sDAGE,S1Co8IN,C0Cv8II,sDAGE,U1Co8IN,C0Cv8II,4CACE,iBAAA,CACA,S1Cq8IN,C0C/7IE,+CAEE,SAAA,CADA,U1Ck8IJ,C0C77IE,kDAOE,W1Cm8IJ,C0C18IE,kDAOE,Y1Cm8IJ,C0C18IE,wCAME,qDAAA,CADA,UAAA,CADA,aAAA,CAIA,0CAAA,CAAA,kCAAA,CACA,4BAAA,CAAA,oBAAA,CACA,6BAAA,CAAA,qBAAA,CACA,yBAAA,CAAA,iBAAA,CAVA,iBAAA,CACA,SAAA,CACA,Y1Cu8IJ,C0C37IE,gEACE,wBzB2Wa,CyB1Wb,mDAAA,CAAA,2C1C67IJ,C2C7+IA,QACE,8DAAA,CAGA,+CAAA,CACA,iEAAA,CACA,oDAAA,CACA,sDAAA,CACA,mDAAA,CAGA,qEAAA,CACA,qEAAA,CACA,wEAAA,CACA,0EAAA,CACA,wEAAA,CACA,yEAAA,CACA,kEAAA,CACA,+DAAA,CACA,oEAAA,CACA,oEAAA,CACA,mEAAA,CACA,gEAAA,CACA,uEAAA,CACA,mEAAA,CACA,qEAAA,CACA,oEAAA,CACA,gEAAA,CACA,wEAAA,CACA,qEAAA,CACA,+D3C4+IF,C2Ct+IA,SAEE,kBAAA,CADA,Y3C0+IF,CKz2II,mCuChKA,8BACE,U5CihJJ,C4ClhJE,8BACE,W5CihJJ,C4ClhJE,8BAGE,kB5C+gJJ,C4ClhJE,8BAGE,iB5C+gJJ,C4ClhJE,oBAKE,mBAAA,CADA,YAAA,CAFA,a5CghJJ,C4C1gJI,kCACE,W5C6gJN,C4C9gJI,kCACE,U5C6gJN,C4C9gJI,kCAEE,iBAAA,CAAA,c5C4gJN,C4C9gJI,kCAEE,aAAA,CAAA,kB5C4gJN,CACF","file":"main.css"} \ No newline at end of file diff --git a/assets/stylesheets/main.4b4a2bd9.min.css b/assets/stylesheets/main.4b4a2bd9.min.css new file mode 100644 index 000000000..55c3549e1 --- /dev/null +++ b/assets/stylesheets/main.4b4a2bd9.min.css @@ -0,0 +1 @@ +@charset "UTF-8";html{-webkit-text-size-adjust:none;-moz-text-size-adjust:none;text-size-adjust:none;box-sizing:border-box}*,:after,:before{box-sizing:inherit}@media (prefers-reduced-motion){*,:after,:before{transition:none!important}}body{margin:0}a,button,input,label{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}hr{border:0;box-sizing:initial;display:block;height:.05rem;overflow:visible;padding:0}small{font-size:80%}sub,sup{line-height:1em}img{border-style:none}table{border-collapse:initial;border-spacing:0}td,th{font-weight:400;vertical-align:top}button{background:#0000;border:0;font-family:inherit;font-size:inherit;margin:0;padding:0}input{border:0;outline:none}:root{--md-primary-fg-color:#4051b5;--md-primary-fg-color--light:#5d6cc0;--md-primary-fg-color--dark:#303fa1;--md-primary-bg-color:#fff;--md-primary-bg-color--light:#ffffffb3;--md-accent-fg-color:#526cfe;--md-accent-fg-color--transparent:#526cfe1a;--md-accent-bg-color:#fff;--md-accent-bg-color--light:#ffffffb3}[data-md-color-scheme=default]{color-scheme:light}[data-md-color-scheme=default] img[src$="#gh-dark-mode-only"],[data-md-color-scheme=default] img[src$="#only-dark"]{display:none}:root,[data-md-color-scheme=default]{--md-hue:225deg;--md-default-fg-color:#000000de;--md-default-fg-color--light:#0000008a;--md-default-fg-color--lighter:#00000052;--md-default-fg-color--lightest:#00000012;--md-default-bg-color:#fff;--md-default-bg-color--light:#ffffffb3;--md-default-bg-color--lighter:#ffffff4d;--md-default-bg-color--lightest:#ffffff1f;--md-code-fg-color:#36464e;--md-code-bg-color:#f5f5f5;--md-code-hl-color:#4287ff;--md-code-hl-color--light:#4287ff1a;--md-code-hl-number-color:#d52a2a;--md-code-hl-special-color:#db1457;--md-code-hl-function-color:#a846b9;--md-code-hl-constant-color:#6e59d9;--md-code-hl-keyword-color:#3f6ec6;--md-code-hl-string-color:#1c7d4d;--md-code-hl-name-color:var(--md-code-fg-color);--md-code-hl-operator-color:var(--md-default-fg-color--light);--md-code-hl-punctuation-color:var(--md-default-fg-color--light);--md-code-hl-comment-color:var(--md-default-fg-color--light);--md-code-hl-generic-color:var(--md-default-fg-color--light);--md-code-hl-variable-color:var(--md-default-fg-color--light);--md-typeset-color:var(--md-default-fg-color);--md-typeset-a-color:var(--md-primary-fg-color);--md-typeset-del-color:#f5503d26;--md-typeset-ins-color:#0bd57026;--md-typeset-kbd-color:#fafafa;--md-typeset-kbd-accent-color:#fff;--md-typeset-kbd-border-color:#b8b8b8;--md-typeset-mark-color:#ffff0080;--md-typeset-table-color:#0000001f;--md-typeset-table-color--light:rgba(0,0,0,.035);--md-admonition-fg-color:var(--md-default-fg-color);--md-admonition-bg-color:var(--md-default-bg-color);--md-warning-fg-color:#000000de;--md-warning-bg-color:#ff9;--md-footer-fg-color:#fff;--md-footer-fg-color--light:#ffffffb3;--md-footer-fg-color--lighter:#ffffff73;--md-footer-bg-color:#000000de;--md-footer-bg-color--dark:#00000052;--md-shadow-z1:0 0.2rem 0.5rem #0000000d,0 0 0.05rem #0000001a;--md-shadow-z2:0 0.2rem 0.5rem #0000001a,0 0 0.05rem #00000040;--md-shadow-z3:0 0.2rem 0.5rem #0003,0 0 0.05rem #00000059}.md-icon svg{fill:currentcolor;display:block;height:1.2rem;width:1.2rem}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;--md-text-font-family:var(--md-text-font,_),-apple-system,BlinkMacSystemFont,Helvetica,Arial,sans-serif;--md-code-font-family:var(--md-code-font,_),SFMono-Regular,Consolas,Menlo,monospace}aside,body,input{font-feature-settings:"kern","liga";color:var(--md-typeset-color);font-family:var(--md-text-font-family)}code,kbd,pre{font-feature-settings:"kern";font-family:var(--md-code-font-family)}:root{--md-typeset-table-sort-icon:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--asc:url('data:image/svg+xml;charset=utf-8,');--md-typeset-table-sort-icon--desc:url('data:image/svg+xml;charset=utf-8,')}.md-typeset{-webkit-print-color-adjust:exact;color-adjust:exact;font-size:.8rem;line-height:1.6}@media print{.md-typeset{font-size:.68rem}}.md-typeset blockquote,.md-typeset dl,.md-typeset figure,.md-typeset ol,.md-typeset pre,.md-typeset ul{margin-bottom:1em;margin-top:1em}.md-typeset h1{color:var(--md-default-fg-color--light);font-size:2em;line-height:1.3;margin:0 0 1.25em}.md-typeset h1,.md-typeset h2{font-weight:300;letter-spacing:-.01em}.md-typeset h2{font-size:1.5625em;line-height:1.4;margin:1.6em 0 .64em}.md-typeset h3{font-size:1.25em;font-weight:400;letter-spacing:-.01em;line-height:1.5;margin:1.6em 0 .8em}.md-typeset h2+h3{margin-top:.8em}.md-typeset h4{font-weight:700;letter-spacing:-.01em;margin:1em 0}.md-typeset h5,.md-typeset h6{color:var(--md-default-fg-color--light);font-size:.8em;font-weight:700;letter-spacing:-.01em;margin:1.25em 0}.md-typeset h5{text-transform:uppercase}.md-typeset hr{border-bottom:.05rem solid var(--md-default-fg-color--lightest);display:flow-root;margin:1.5em 0}.md-typeset a{color:var(--md-typeset-a-color);word-break:break-word}.md-typeset a,.md-typeset a:before{transition:color 125ms}.md-typeset a:focus,.md-typeset a:hover{color:var(--md-accent-fg-color)}.md-typeset a:focus code,.md-typeset a:hover code{background-color:var(--md-accent-fg-color--transparent)}.md-typeset a code{color:currentcolor;transition:background-color 125ms}.md-typeset a.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset code,.md-typeset kbd,.md-typeset pre{color:var(--md-code-fg-color);direction:ltr;font-variant-ligatures:none}@media print{.md-typeset code,.md-typeset kbd,.md-typeset pre{white-space:pre-wrap}}.md-typeset code{background-color:var(--md-code-bg-color);border-radius:.1rem;-webkit-box-decoration-break:clone;box-decoration-break:clone;font-size:.85em;padding:0 .2941176471em;word-break:break-word}.md-typeset code:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-typeset pre{display:flow-root;line-height:1.4;position:relative}.md-typeset pre>code{-webkit-box-decoration-break:slice;box-decoration-break:slice;box-shadow:none;display:block;margin:0;outline-color:var(--md-accent-fg-color);overflow:auto;padding:.7720588235em 1.1764705882em;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin;touch-action:auto;word-break:normal}.md-typeset pre>code:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-typeset pre>code::-webkit-scrollbar{height:.2rem;width:.2rem}.md-typeset pre>code::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-typeset pre>code::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}.md-typeset kbd{background-color:var(--md-typeset-kbd-color);border-radius:.1rem;box-shadow:0 .1rem 0 .05rem var(--md-typeset-kbd-border-color),0 .1rem 0 var(--md-typeset-kbd-border-color),0 -.1rem .2rem var(--md-typeset-kbd-accent-color) inset;color:var(--md-default-fg-color);display:inline-block;font-size:.75em;padding:0 .6666666667em;vertical-align:text-top;word-break:break-word}.md-typeset mark{background-color:var(--md-typeset-mark-color);-webkit-box-decoration-break:clone;box-decoration-break:clone;color:inherit;word-break:break-word}.md-typeset abbr{border-bottom:.05rem dotted var(--md-default-fg-color--light);cursor:help;text-decoration:none}@media (hover:none){.md-typeset abbr[title]:focus:after,.md-typeset abbr[title]:hover:after{background-color:var(--md-default-fg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z3);color:var(--md-default-bg-color);content:attr(title);font-size:.7rem;left:.8rem;margin-top:2em;padding:.2rem .3rem;position:absolute;right:.8rem}}.md-typeset small{opacity:.75}[dir=ltr] .md-typeset sub,[dir=ltr] .md-typeset sup{margin-left:.078125em}[dir=rtl] .md-typeset sub,[dir=rtl] .md-typeset sup{margin-right:.078125em}[dir=ltr] .md-typeset blockquote{padding-left:.6rem}[dir=rtl] .md-typeset blockquote{padding-right:.6rem}[dir=ltr] .md-typeset blockquote{border-left:.2rem solid var(--md-default-fg-color--lighter)}[dir=rtl] .md-typeset blockquote{border-right:.2rem solid var(--md-default-fg-color--lighter)}.md-typeset blockquote{color:var(--md-default-fg-color--light);margin-left:0;margin-right:0}.md-typeset ul{list-style-type:disc}[dir=ltr] .md-typeset ol,[dir=ltr] .md-typeset ul{margin-left:.625em}[dir=rtl] .md-typeset ol,[dir=rtl] .md-typeset ul{margin-right:.625em}.md-typeset ol,.md-typeset ul{padding:0}.md-typeset ol:not([hidden]),.md-typeset ul:not([hidden]){display:flow-root}.md-typeset ol ol,.md-typeset ul ol{list-style-type:lower-alpha}.md-typeset ol ol ol,.md-typeset ul ol ol{list-style-type:lower-roman}[dir=ltr] .md-typeset ol li,[dir=ltr] .md-typeset ul li{margin-left:1.25em}[dir=rtl] .md-typeset ol li,[dir=rtl] .md-typeset ul li{margin-right:1.25em}.md-typeset ol li,.md-typeset ul li{margin-bottom:.5em}.md-typeset ol li blockquote,.md-typeset ol li p,.md-typeset ul li blockquote,.md-typeset ul li p{margin:.5em 0}.md-typeset ol li:last-child,.md-typeset ul li:last-child{margin-bottom:0}[dir=ltr] .md-typeset ol li ol,[dir=ltr] .md-typeset ol li ul,[dir=ltr] .md-typeset ul li ol,[dir=ltr] .md-typeset ul li ul{margin-left:.625em}[dir=rtl] .md-typeset ol li ol,[dir=rtl] .md-typeset ol li ul,[dir=rtl] .md-typeset ul li ol,[dir=rtl] .md-typeset ul li ul{margin-right:.625em}.md-typeset ol li ol,.md-typeset ol li ul,.md-typeset ul li ol,.md-typeset ul li ul{margin-bottom:.5em;margin-top:.5em}[dir=ltr] .md-typeset dd{margin-left:1.875em}[dir=rtl] .md-typeset dd{margin-right:1.875em}.md-typeset dd{margin-bottom:1.5em;margin-top:1em}.md-typeset img,.md-typeset svg,.md-typeset video{height:auto;max-width:100%}.md-typeset img[align=left]{margin:1em 1em 1em 0}.md-typeset img[align=right]{margin:1em 0 1em 1em}.md-typeset img[align]:only-child{margin-top:0}.md-typeset figure{display:flow-root;margin:1em auto;max-width:100%;text-align:center;width:-webkit-fit-content;width:-moz-fit-content;width:fit-content}.md-typeset figure img{display:block}.md-typeset figcaption{font-style:italic;margin:1em auto;max-width:24rem}.md-typeset iframe{max-width:100%}.md-typeset table:not([class]){background-color:var(--md-default-bg-color);border:.05rem solid var(--md-typeset-table-color);border-radius:.1rem;display:inline-block;font-size:.64rem;max-width:100%;overflow:auto;touch-action:auto}@media print{.md-typeset table:not([class]){display:table}}.md-typeset table:not([class])+*{margin-top:1.5em}.md-typeset table:not([class]) td>:first-child,.md-typeset table:not([class]) th>:first-child{margin-top:0}.md-typeset table:not([class]) td>:last-child,.md-typeset table:not([class]) th>:last-child{margin-bottom:0}.md-typeset table:not([class]) td:not([align]),.md-typeset table:not([class]) th:not([align]){text-align:left}[dir=rtl] .md-typeset table:not([class]) td:not([align]),[dir=rtl] .md-typeset table:not([class]) th:not([align]){text-align:right}.md-typeset table:not([class]) th{font-weight:700;min-width:5rem;padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) td{border-top:.05rem solid var(--md-typeset-table-color);padding:.9375em 1.25em;vertical-align:top}.md-typeset table:not([class]) tbody tr{transition:background-color 125ms}.md-typeset table:not([class]) tbody tr:hover{background-color:var(--md-typeset-table-color--light);box-shadow:0 .05rem 0 var(--md-default-bg-color) inset}.md-typeset table:not([class]) a{word-break:normal}.md-typeset table th[role=columnheader]{cursor:pointer}[dir=ltr] .md-typeset table th[role=columnheader]:after{margin-left:.5em}[dir=rtl] .md-typeset table th[role=columnheader]:after{margin-right:.5em}.md-typeset table th[role=columnheader]:after{content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-typeset-table-sort-icon);mask-image:var(--md-typeset-table-sort-icon);-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset table th[role=columnheader]:hover:after{background-color:var(--md-default-fg-color--lighter)}.md-typeset table th[role=columnheader][aria-sort=ascending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--asc);mask-image:var(--md-typeset-table-sort-icon--asc)}.md-typeset table th[role=columnheader][aria-sort=descending]:after{background-color:var(--md-default-fg-color--light);-webkit-mask-image:var(--md-typeset-table-sort-icon--desc);mask-image:var(--md-typeset-table-sort-icon--desc)}.md-typeset__scrollwrap{margin:1em -.8rem;overflow-x:auto;touch-action:auto}.md-typeset__table{display:inline-block;margin-bottom:.5em;padding:0 .8rem}@media print{.md-typeset__table{display:block}}html .md-typeset__table table{display:table;margin:0;overflow:hidden;width:100%}@media screen and (max-width:44.984375em){.md-content__inner>pre{margin:1em -.8rem}.md-content__inner>pre code{border-radius:0}}.md-typeset .md-author{display:block;flex-shrink:0;height:1.6rem;overflow:hidden;position:relative;transition:color 125ms,transform 125ms;width:1.6rem}.md-typeset .md-author img{border-radius:100%;display:block}.md-typeset .md-author--more{background:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--lighter);font-size:.6rem;font-weight:700;line-height:1.6rem;text-align:center}.md-typeset .md-author--long{height:2.4rem;width:2.4rem}.md-typeset a.md-author{transform:scale(1)}.md-typeset a.md-author img{filter:grayscale(100%) opacity(75%);transition:filter 125ms}.md-typeset a.md-author:focus,.md-typeset a.md-author:hover{transform:scale(1.1);z-index:1}.md-typeset a.md-author:focus img,.md-typeset a.md-author:hover img{filter:grayscale(0)}.md-banner{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color);overflow:auto}@media print{.md-banner{display:none}}.md-banner--warning{background-color:var(--md-warning-bg-color);color:var(--md-warning-fg-color)}.md-banner__inner{font-size:.7rem;margin:.6rem auto;padding:0 .8rem}[dir=ltr] .md-banner__button{float:right}[dir=rtl] .md-banner__button{float:left}.md-banner__button{color:inherit;cursor:pointer;transition:opacity .25s}.no-js .md-banner__button{display:none}.md-banner__button:hover{opacity:.7}html{font-size:125%;height:100%;overflow-x:hidden}@media screen and (min-width:100em){html{font-size:137.5%}}@media screen and (min-width:125em){html{font-size:150%}}body{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;font-size:.5rem;min-height:100%;position:relative;width:100%}@media print{body{display:block}}@media screen and (max-width:59.984375em){body[data-md-scrolllock]{position:fixed}}.md-grid{margin-left:auto;margin-right:auto;max-width:61rem}.md-container{display:flex;flex-direction:column;flex-grow:1}@media print{.md-container{display:block}}.md-main{flex-grow:1}.md-main__inner{display:flex;height:100%;margin-top:1.5rem}.md-ellipsis{overflow:hidden;text-overflow:ellipsis}.md-toggle{display:none}.md-option{height:0;opacity:0;position:absolute;width:0}.md-option:checked+label:not([hidden]){display:block}.md-option.focus-visible+label{outline-color:var(--md-accent-fg-color);outline-style:auto}.md-skip{background-color:var(--md-default-fg-color);border-radius:.1rem;color:var(--md-default-bg-color);font-size:.64rem;margin:.5rem;opacity:0;outline-color:var(--md-accent-fg-color);padding:.3rem .5rem;position:fixed;transform:translateY(.4rem);z-index:-1}.md-skip:focus{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 175ms 75ms;z-index:10}@page{margin:25mm}:root{--md-clipboard-icon:url('data:image/svg+xml;charset=utf-8,')}.md-clipboard{border-radius:.1rem;color:var(--md-default-fg-color--lightest);cursor:pointer;height:1.5em;outline-color:var(--md-accent-fg-color);outline-offset:.1rem;position:absolute;right:.5em;top:.5em;transition:color .25s;width:1.5em;z-index:1}@media print{.md-clipboard{display:none}}.md-clipboard:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}:hover>.md-clipboard{color:var(--md-default-fg-color--light)}.md-clipboard:focus,.md-clipboard:hover{color:var(--md-accent-fg-color)}.md-clipboard:after{background-color:currentcolor;content:"";display:block;height:1.125em;margin:0 auto;-webkit-mask-image:var(--md-clipboard-icon);mask-image:var(--md-clipboard-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:1.125em}.md-clipboard--inline{cursor:pointer}.md-clipboard--inline code{transition:color .25s,background-color .25s}.md-clipboard--inline:focus code,.md-clipboard--inline:hover code{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}@keyframes consent{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@keyframes overlay{0%{opacity:0}to{opacity:1}}.md-consent__overlay{animation:overlay .25s both;-webkit-backdrop-filter:blur(.1rem);backdrop-filter:blur(.1rem);background-color:#0000008a;height:100%;opacity:1;position:fixed;top:0;width:100%;z-index:5}.md-consent__inner{animation:consent .5s cubic-bezier(.1,.7,.1,1) both;background-color:var(--md-default-bg-color);border:0;border-radius:.1rem;bottom:0;box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;max-height:100%;overflow:auto;padding:0;position:fixed;width:100%;z-index:5}.md-consent__form{padding:.8rem}.md-consent__settings{display:none;margin:1em 0}input:checked+.md-consent__settings{display:block}.md-consent__controls{margin-bottom:.8rem}.md-typeset .md-consent__controls .md-button{display:inline}@media screen and (max-width:44.984375em){.md-typeset .md-consent__controls .md-button{display:block;margin-top:.4rem;text-align:center;width:100%}}.md-consent label{cursor:pointer}.md-content{flex-grow:1;min-width:0}.md-content__inner{margin:0 .8rem 1.2rem;padding-top:.6rem}@media screen and (min-width:76.25em){[dir=ltr] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}[dir=ltr] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner,[dir=rtl] .md-sidebar--primary:not([hidden])~.md-content>.md-content__inner{margin-right:1.2rem}[dir=rtl] .md-sidebar--secondary:not([hidden])~.md-content>.md-content__inner{margin-left:1.2rem}}.md-content__inner:before{content:"";display:block;height:.4rem}.md-content__inner>:last-child{margin-bottom:0}[dir=ltr] .md-content__button{float:right}[dir=rtl] .md-content__button{float:left}[dir=ltr] .md-content__button{margin-left:.4rem}[dir=rtl] .md-content__button{margin-right:.4rem}.md-content__button{margin:.4rem 0;padding:0}@media print{.md-content__button{display:none}}.md-typeset .md-content__button{color:var(--md-default-fg-color--lighter)}.md-content__button svg{display:inline;vertical-align:top}[dir=rtl] .md-content__button svg{transform:scaleX(-1)}[dir=ltr] .md-dialog{right:.8rem}[dir=rtl] .md-dialog{left:.8rem}.md-dialog{background-color:var(--md-default-fg-color);border-radius:.1rem;bottom:.8rem;box-shadow:var(--md-shadow-z3);min-width:11.1rem;opacity:0;padding:.4rem .6rem;pointer-events:none;position:fixed;transform:translateY(100%);transition:transform 0ms .4s,opacity .4s;z-index:4}@media print{.md-dialog{display:none}}.md-dialog--active{opacity:1;pointer-events:auto;transform:translateY(0);transition:transform .4s cubic-bezier(.075,.85,.175,1),opacity .4s}.md-dialog__inner{color:var(--md-default-bg-color);font-size:.7rem}.md-feedback{margin:2em 0 1em;text-align:center}.md-feedback fieldset{border:none;margin:0;padding:0}.md-feedback__title{font-weight:700;margin:1em auto}.md-feedback__inner{position:relative}.md-feedback__list{display:flex;flex-wrap:wrap;place-content:baseline center;position:relative}.md-feedback__list:hover .md-icon:not(:disabled){color:var(--md-default-fg-color--lighter)}:disabled .md-feedback__list{min-height:1.8rem}.md-feedback__icon{color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;margin:0 .1rem;transition:color 125ms}.md-feedback__icon:not(:disabled).md-icon:hover{color:var(--md-accent-fg-color)}.md-feedback__icon:disabled{color:var(--md-default-fg-color--lightest);pointer-events:none}.md-feedback__note{opacity:0;position:relative;transform:translateY(.4rem);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-feedback__note>*{margin:0 auto;max-width:16rem}:disabled .md-feedback__note{opacity:1;transform:translateY(0)}.md-footer{background-color:var(--md-footer-bg-color);color:var(--md-footer-fg-color)}@media print{.md-footer{display:none}}.md-footer__inner{justify-content:space-between;overflow:auto;padding:.2rem}.md-footer__inner:not([hidden]){display:flex}.md-footer__link{align-items:end;display:flex;flex-grow:0.01;margin-bottom:.4rem;margin-top:1rem;max-width:100%;outline-color:var(--md-accent-fg-color);overflow:hidden;transition:opacity .25s}.md-footer__link:focus,.md-footer__link:hover{opacity:.7}[dir=rtl] .md-footer__link svg{transform:scaleX(-1)}@media screen and (max-width:44.984375em){.md-footer__link--prev{flex-shrink:0}.md-footer__link--prev .md-footer__title{display:none}}[dir=ltr] .md-footer__link--next{margin-left:auto}[dir=rtl] .md-footer__link--next{margin-right:auto}.md-footer__link--next{text-align:right}[dir=rtl] .md-footer__link--next{text-align:left}.md-footer__title{flex-grow:1;font-size:.9rem;margin-bottom:.7rem;max-width:calc(100% - 2.4rem);padding:0 1rem;white-space:nowrap}.md-footer__button{margin:.2rem;padding:.4rem}.md-footer__direction{font-size:.64rem;opacity:.7}.md-footer-meta{background-color:var(--md-footer-bg-color--dark)}.md-footer-meta__inner{display:flex;flex-wrap:wrap;justify-content:space-between;padding:.2rem}html .md-footer-meta.md-typeset a{color:var(--md-footer-fg-color--light)}html .md-footer-meta.md-typeset a:focus,html .md-footer-meta.md-typeset a:hover{color:var(--md-footer-fg-color)}.md-copyright{color:var(--md-footer-fg-color--lighter);font-size:.64rem;margin:auto .6rem;padding:.4rem 0;width:100%}@media screen and (min-width:45em){.md-copyright{width:auto}}.md-copyright__highlight{color:var(--md-footer-fg-color--light)}.md-social{display:inline-flex;gap:.2rem;margin:0 .4rem;padding:.2rem 0 .6rem}@media screen and (min-width:45em){.md-social{padding:.6rem 0}}.md-social__link{display:inline-block;height:1.6rem;text-align:center;width:1.6rem}.md-social__link:before{line-height:1.9}.md-social__link svg{fill:currentcolor;max-height:.8rem;vertical-align:-25%}.md-typeset .md-button{border:.1rem solid;border-radius:.1rem;color:var(--md-primary-fg-color);cursor:pointer;display:inline-block;font-weight:700;padding:.625em 2em;transition:color 125ms,background-color 125ms,border-color 125ms}.md-typeset .md-button--primary{background-color:var(--md-primary-fg-color);border-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color)}.md-typeset .md-button:focus,.md-typeset .md-button:hover{background-color:var(--md-accent-fg-color);border-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[dir=ltr] .md-typeset .md-input{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .md-input,[dir=rtl] .md-typeset .md-input{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .md-input{border-top-left-radius:.1rem}.md-typeset .md-input{border-bottom:.1rem solid var(--md-default-fg-color--lighter);box-shadow:var(--md-shadow-z1);font-size:.8rem;height:1.8rem;padding:0 .6rem;transition:border .25s,box-shadow .25s}.md-typeset .md-input:focus,.md-typeset .md-input:hover{border-bottom-color:var(--md-accent-fg-color);box-shadow:var(--md-shadow-z2)}.md-typeset .md-input--stretch{width:100%}.md-header{background-color:var(--md-primary-fg-color);box-shadow:0 0 .2rem #0000,0 .2rem .4rem #0000;color:var(--md-primary-bg-color);display:block;left:0;position:sticky;right:0;top:0;z-index:4}@media print{.md-header{display:none}}.md-header[hidden]{transform:translateY(-100%);transition:transform .25s cubic-bezier(.8,0,.6,1),box-shadow .25s}.md-header--shadow{box-shadow:0 0 .2rem #0000001a,0 .2rem .4rem #0003;transition:transform .25s cubic-bezier(.1,.7,.1,1),box-shadow .25s}.md-header__inner{align-items:center;display:flex;padding:0 .2rem}.md-header__button{color:currentcolor;cursor:pointer;margin:.2rem;outline-color:var(--md-accent-fg-color);padding:.4rem;position:relative;transition:opacity .25s;vertical-align:middle;z-index:1}.md-header__button:hover{opacity:.7}.md-header__button:not([hidden]){display:inline-block}.md-header__button:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}.md-header__button.md-logo{margin:.2rem;padding:.4rem}@media screen and (max-width:76.234375em){.md-header__button.md-logo{display:none}}.md-header__button.md-logo img,.md-header__button.md-logo svg{fill:currentcolor;display:block;height:1.2rem;width:auto}@media screen and (min-width:60em){.md-header__button[for=__search]{display:none}}.no-js .md-header__button[for=__search]{display:none}[dir=rtl] .md-header__button[for=__search] svg{transform:scaleX(-1)}@media screen and (min-width:76.25em){.md-header__button[for=__drawer]{display:none}}.md-header__topic{display:flex;max-width:100%;position:absolute;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;white-space:nowrap}.md-header__topic+.md-header__topic{opacity:0;pointer-events:none;transform:translateX(1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__topic+.md-header__topic{transform:translateX(-1.25rem)}.md-header__topic:first-child{font-weight:700}[dir=ltr] .md-header__title{margin-left:1rem;margin-right:.4rem}[dir=rtl] .md-header__title{margin-left:.4rem;margin-right:1rem}.md-header__title{flex-grow:1;font-size:.9rem;height:2.4rem;line-height:2.4rem}.md-header__title--active .md-header__topic{opacity:0;pointer-events:none;transform:translateX(-1.25rem);transition:transform .4s cubic-bezier(1,.7,.1,.1),opacity .15s;z-index:-1}[dir=rtl] .md-header__title--active .md-header__topic{transform:translateX(1.25rem)}.md-header__title--active .md-header__topic+.md-header__topic{opacity:1;pointer-events:auto;transform:translateX(0);transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .15s;z-index:0}.md-header__title>.md-header__ellipsis{height:100%;position:relative;width:100%}.md-header__option{display:flex;flex-shrink:0;max-width:100%;transition:max-width 0ms .25s,opacity .25s .25s;white-space:nowrap}[data-md-toggle=search]:checked~.md-header .md-header__option{max-width:0;opacity:0;transition:max-width 0ms,opacity 0ms}.md-header__option>input{bottom:0}.md-header__source{display:none}@media screen and (min-width:60em){[dir=ltr] .md-header__source{margin-left:1rem}[dir=rtl] .md-header__source{margin-right:1rem}.md-header__source{display:block;max-width:11.7rem;width:11.7rem}}@media screen and (min-width:76.25em){[dir=ltr] .md-header__source{margin-left:1.4rem}[dir=rtl] .md-header__source{margin-right:1.4rem}}.md-meta{color:var(--md-default-fg-color--light);font-size:.7rem;line-height:1.3}.md-meta__list{display:inline-flex;flex-wrap:wrap;list-style:none;margin:0;padding:0}.md-meta__item:not(:last-child):after{content:"ยท";margin-left:.2rem;margin-right:.2rem}.md-meta__link{color:var(--md-typeset-a-color)}.md-meta__link:focus,.md-meta__link:hover{color:var(--md-accent-fg-color)}.md-draft{background-color:#ff1744;border-radius:.125em;color:#fff;display:inline-block;font-weight:700;padding-left:.5714285714em;padding-right:.5714285714em}:root{--md-nav-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-nav-icon--next:url('data:image/svg+xml;charset=utf-8,');--md-toc-icon:url('data:image/svg+xml;charset=utf-8,')}.md-nav{font-size:.7rem;line-height:1.3}.md-nav__title{color:var(--md-default-fg-color--light);display:block;font-weight:700;overflow:hidden;padding:0 .6rem;text-overflow:ellipsis}.md-nav__title .md-nav__button{display:none}.md-nav__title .md-nav__button img{height:100%;width:auto}.md-nav__title .md-nav__button.md-logo img,.md-nav__title .md-nav__button.md-logo svg{fill:currentcolor;display:block;height:2.4rem;max-width:100%;object-fit:contain;width:auto}.md-nav__list{list-style:none;margin:0;padding:0}.md-nav__link{align-items:flex-start;display:flex;gap:.4rem;margin-top:.625em;scroll-snap-align:start;transition:color 125ms}.md-nav__link--passed{color:var(--md-default-fg-color--light)}.md-nav__item .md-nav__link--active,.md-nav__item .md-nav__link--active code{color:var(--md-typeset-a-color)}.md-nav__link .md-ellipsis{position:relative}[dir=ltr] .md-nav__link .md-icon:last-child{margin-left:auto}[dir=rtl] .md-nav__link .md-icon:last-child{margin-right:auto}.md-nav__link svg{fill:currentcolor;flex-shrink:0;height:1.3em}.md-nav__link[for]:focus,.md-nav__link[for]:hover,.md-nav__link[href]:focus,.md-nav__link[href]:hover{color:var(--md-accent-fg-color);cursor:pointer}.md-nav__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-nav--primary .md-nav__link[for=__toc]{display:none}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{background-color:currentcolor;display:block;height:100%;-webkit-mask-image:var(--md-toc-icon);mask-image:var(--md-toc-icon);width:100%}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:none}.md-nav__container>.md-nav__link{margin-top:0}.md-nav__container>.md-nav__link:first-child{flex-grow:1;min-width:0}.md-nav__icon{flex-shrink:0}.md-nav__source{display:none}@media screen and (max-width:76.234375em){.md-nav--primary,.md-nav--primary .md-nav{background-color:var(--md-default-bg-color);display:flex;flex-direction:column;height:100%;left:0;position:absolute;right:0;top:0;z-index:1}.md-nav--primary .md-nav__item,.md-nav--primary .md-nav__title{font-size:.8rem;line-height:1.5}.md-nav--primary .md-nav__title{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);cursor:pointer;height:5.6rem;line-height:2.4rem;padding:3rem .8rem .2rem;position:relative;white-space:nowrap}[dir=ltr] .md-nav--primary .md-nav__title .md-nav__icon{left:.4rem}[dir=rtl] .md-nav--primary .md-nav__title .md-nav__icon{right:.4rem}.md-nav--primary .md-nav__title .md-nav__icon{display:block;height:1.2rem;margin:.2rem;position:absolute;top:.4rem;width:1.2rem}.md-nav--primary .md-nav__title .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--prev);mask-image:var(--md-nav-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}.md-nav--primary .md-nav__title~.md-nav__list{background-color:var(--md-default-bg-color);box-shadow:0 .05rem 0 var(--md-default-fg-color--lightest) inset;overflow-y:auto;scroll-snap-type:y mandatory;touch-action:pan-y}.md-nav--primary .md-nav__title~.md-nav__list>:first-child{border-top:0}.md-nav--primary .md-nav__title[for=__drawer]{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);font-weight:700}.md-nav--primary .md-nav__title .md-logo{display:block;left:.2rem;margin:.2rem;padding:.4rem;position:absolute;right:.2rem;top:.2rem}.md-nav--primary .md-nav__list{flex:1}.md-nav--primary .md-nav__item{border-top:.05rem solid var(--md-default-fg-color--lightest)}.md-nav--primary .md-nav__item--active>.md-nav__link{color:var(--md-typeset-a-color)}.md-nav--primary .md-nav__item--active>.md-nav__link:focus,.md-nav--primary .md-nav__item--active>.md-nav__link:hover{color:var(--md-accent-fg-color)}.md-nav--primary .md-nav__link{margin-top:0;padding:.6rem .8rem}.md-nav--primary .md-nav__link svg{margin-top:.1em}.md-nav--primary .md-nav__link>.md-nav__link{padding:0}[dir=ltr] .md-nav--primary .md-nav__link .md-nav__icon{margin-right:-.2rem}[dir=rtl] .md-nav--primary .md-nav__link .md-nav__icon{margin-left:-.2rem}.md-nav--primary .md-nav__link .md-nav__icon{font-size:1.2rem;height:1.2rem;width:1.2rem}.md-nav--primary .md-nav__link .md-nav__icon:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-nav--primary .md-nav__icon:after{transform:scale(-1)}.md-nav--primary .md-nav--secondary .md-nav{background-color:initial;position:static}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-left:1.4rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav__link{padding-right:1.4rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-left:2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav__link{padding-right:2rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-left:2.6rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav__link{padding-right:2.6rem}[dir=ltr] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-left:3.2rem}[dir=rtl] .md-nav--primary .md-nav--secondary .md-nav .md-nav .md-nav .md-nav .md-nav__link{padding-right:3.2rem}.md-nav--secondary{background-color:initial}.md-nav__toggle~.md-nav{display:flex;opacity:0;transform:translateX(100%);transition:transform .25s cubic-bezier(.8,0,.6,1),opacity 125ms 50ms}[dir=rtl] .md-nav__toggle~.md-nav{transform:translateX(-100%)}.md-nav__toggle:checked~.md-nav{opacity:1;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),opacity 125ms 125ms}.md-nav__toggle:checked~.md-nav>.md-nav__list{-webkit-backface-visibility:hidden;backface-visibility:hidden}}@media screen and (max-width:59.984375em){.md-nav--primary .md-nav__link[for=__toc]{display:flex}.md-nav--primary .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--primary .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--primary .md-nav__link[for=__toc]~.md-nav{display:flex}.md-nav__source{background-color:var(--md-primary-fg-color--dark);color:var(--md-primary-bg-color);display:block;padding:0 .2rem}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-nav--integrated .md-nav__link[for=__toc]{display:flex}.md-nav--integrated .md-nav__link[for=__toc] .md-icon:after{content:""}.md-nav--integrated .md-nav__link[for=__toc]+.md-nav__link{display:none}.md-nav--integrated .md-nav__link[for=__toc]~.md-nav{display:flex}}@media screen and (min-width:60em){.md-nav{margin-bottom:-.4rem}.md-nav--secondary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--secondary .md-nav__title[for=__toc]{scroll-snap-align:start}.md-nav--secondary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--secondary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--secondary .md-nav__list{padding-right:.6rem}.md-nav--secondary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--secondary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--secondary .md-nav__item>.md-nav__link{margin-left:.4rem}}@media screen and (min-width:76.25em){.md-nav{margin-bottom:-.4rem;transition:max-height .25s cubic-bezier(.86,0,.07,1)}.md-nav--primary .md-nav__title{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);position:sticky;top:0;z-index:1}.md-nav--primary .md-nav__title[for=__drawer]{scroll-snap-align:start}.md-nav--primary .md-nav__title .md-nav__icon{display:none}[dir=ltr] .md-nav--primary .md-nav__list{padding-left:.6rem}[dir=rtl] .md-nav--primary .md-nav__list{padding-right:.6rem}.md-nav--primary .md-nav__list{padding-bottom:.4rem}[dir=ltr] .md-nav--primary .md-nav__item>.md-nav__link{margin-right:.4rem}[dir=rtl] .md-nav--primary .md-nav__item>.md-nav__link{margin-left:.4rem}.md-nav__toggle~.md-nav{display:grid;grid-template-rows:0fr;opacity:0;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .25s,visibility 0ms .25s;visibility:collapse}.md-nav__toggle~.md-nav>.md-nav__list{overflow:hidden}.md-nav__toggle:checked~.md-nav,.md-nav__toggle:indeterminate~.md-nav{grid-template-rows:1fr;opacity:1;transition:grid-template-rows .25s cubic-bezier(.86,0,.07,1),opacity .15s .1s,visibility 0ms;visibility:visible}.md-nav__item--nested>.md-nav>.md-nav__title{display:none}.md-nav__item--section{display:block;margin:1.25em 0}.md-nav__item--section:last-child{margin-bottom:0}.md-nav__item--section>.md-nav__link{font-weight:700}.md-nav__item--section>.md-nav__link[for]{color:var(--md-default-fg-color--light)}.md-nav__item--section>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav__item--section>.md-nav__link .md-icon,.md-nav__item--section>.md-nav__link>[for]{display:none}[dir=ltr] .md-nav__item--section>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav__item--section>.md-nav{margin-right:-.6rem}.md-nav__item--section>.md-nav{display:block;opacity:1;visibility:visible}.md-nav__item--section>.md-nav>.md-nav__list>.md-nav__item{padding:0}.md-nav__icon{border-radius:100%;height:.9rem;transition:background-color .25s;width:.9rem}.md-nav__icon:hover{background-color:var(--md-accent-fg-color--transparent)}.md-nav__icon:after{background-color:currentcolor;border-radius:100%;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-nav-icon--next);mask-image:var(--md-nav-icon--next);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:transform .25s;vertical-align:-.1rem;width:100%}[dir=rtl] .md-nav__icon:after{transform:rotate(180deg)}.md-nav__item--nested .md-nav__toggle:checked~.md-nav__link .md-nav__icon:after,.md-nav__item--nested .md-nav__toggle:indeterminate~.md-nav__link .md-nav__icon:after{transform:rotate(90deg)}.md-nav--lifted>.md-nav__list>.md-nav__item,.md-nav--lifted>.md-nav__title{display:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active{display:block}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link{background:var(--md-default-bg-color);box-shadow:0 0 .4rem .4rem var(--md-default-bg-color);margin-top:0;position:sticky;top:0;z-index:1}.md-nav--lifted>.md-nav__list>.md-nav__item--active>.md-nav__link:not(.md-nav__container){pointer-events:none}.md-nav--lifted>.md-nav__list>.md-nav__item--active.md-nav__item--section{margin:0}[dir=ltr] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav{margin-left:-.6rem}[dir=rtl] .md-nav--lifted>.md-nav__list>.md-nav__item>.md-nav{margin-right:-.6rem}.md-nav--lifted>.md-nav__list>.md-nav__item>[for]{color:var(--md-default-fg-color--light)}.md-nav--lifted .md-nav[data-md-level="1"]{grid-template-rows:1fr;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested){padding:0 .6rem}.md-nav--integrated>.md-nav__list>.md-nav__item--active:not(.md-nav__item--nested)>.md-nav__link{padding:0}[dir=ltr] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-left:.05rem solid var(--md-primary-fg-color)}[dir=rtl] .md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{border-right:.05rem solid var(--md-primary-fg-color)}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary{display:block;margin-bottom:1.25em;opacity:1;visibility:visible}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__list{overflow:visible;padding-bottom:0}.md-nav--integrated>.md-nav__list>.md-nav__item--active .md-nav--secondary>.md-nav__title{display:none}}.md-pagination{font-size:.8rem;font-weight:700;gap:.4rem}.md-pagination,.md-pagination>*{align-items:center;display:flex;justify-content:center}.md-pagination>*{border-radius:.2rem;height:1.8rem;min-width:1.8rem;text-align:center}.md-pagination__current{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light)}.md-pagination__link{transition:color 125ms,background-color 125ms}.md-pagination__link:focus,.md-pagination__link:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-pagination__link:focus svg,.md-pagination__link:hover svg{color:var(--md-accent-fg-color)}.md-pagination__link.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-pagination__link svg{fill:currentcolor;color:var(--md-default-fg-color--lighter);display:block;max-height:100%;width:1.2rem}.md-post__back{border-bottom:.05rem solid var(--md-default-fg-color--lightest);margin-bottom:1.2rem;padding-bottom:1.2rem}@media screen and (max-width:76.234375em){.md-post__back{display:none}}[dir=rtl] .md-post__back svg{transform:scaleX(-1)}.md-post__authors{display:flex;flex-direction:column;gap:.6rem;margin:0 .6rem 1.2rem}.md-post .md-post__meta a{transition:color 125ms}.md-post .md-post__meta a:focus,.md-post .md-post__meta a:hover{color:var(--md-accent-fg-color)}.md-post__title{color:var(--md-default-fg-color--light);font-weight:700}.md-post--excerpt{margin-bottom:3.2rem}.md-post--excerpt .md-post__header{align-items:center;display:flex;gap:.6rem;min-height:1.6rem}.md-post--excerpt .md-post__authors{align-items:center;display:inline-flex;flex-direction:row;gap:.2rem;margin:0;min-height:2.4rem}[dir=ltr] .md-post--excerpt .md-post__meta .md-meta__list{margin-right:.4rem}[dir=rtl] .md-post--excerpt .md-post__meta .md-meta__list{margin-left:.4rem}.md-post--excerpt .md-post__content>:first-child{--md-scroll-margin:6rem;margin-top:0}.md-post>.md-nav--secondary{margin:1em 0}.md-profile{align-items:center;display:flex;font-size:.7rem;gap:.6rem;line-height:1.4;width:100%}.md-profile__description{flex-grow:1}.md-content--post{display:flex}@media screen and (max-width:76.234375em){.md-content--post{flex-flow:column-reverse}}.md-content--post>.md-content__inner{min-width:0}@media screen and (min-width:76.25em){[dir=ltr] .md-content--post>.md-content__inner{margin-left:1.2rem}[dir=rtl] .md-content--post>.md-content__inner{margin-right:1.2rem}}@media screen and (max-width:76.234375em){.md-sidebar.md-sidebar--post{padding:0;position:static;width:100%}.md-sidebar.md-sidebar--post .md-sidebar__scrollwrap{overflow:visible}.md-sidebar.md-sidebar--post .md-sidebar__inner{padding:0}.md-sidebar.md-sidebar--post .md-post__meta{margin-left:.6rem;margin-right:.6rem}.md-sidebar.md-sidebar--post .md-nav__item{border:none;display:inline}.md-sidebar.md-sidebar--post .md-nav__list{display:inline-flex;flex-wrap:wrap;gap:.6rem;padding-bottom:.6rem;padding-top:.6rem}.md-sidebar.md-sidebar--post .md-nav__link{padding:0}.md-sidebar.md-sidebar--post .md-nav{height:auto;margin-bottom:0;position:static}}:root{--md-progress-value:0;--md-progress-delay:400ms}.md-progress{background:var(--md-primary-bg-color);height:.075rem;opacity:min(clamp(0,var(--md-progress-value),1),clamp(0,100 - var(--md-progress-value),1));position:fixed;top:0;transform:scaleX(calc(var(--md-progress-value)*1%));transform-origin:left;transition:transform .5s cubic-bezier(.19,1,.22,1),opacity .25s var(--md-progress-delay);width:100%;z-index:4}:root{--md-search-result-icon:url('data:image/svg+xml;charset=utf-8,')}.md-search{position:relative}@media screen and (min-width:60em){.md-search{padding:.2rem 0}}.no-js .md-search{display:none}.md-search__overlay{opacity:0;z-index:1}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__overlay{left:-2.2rem}[dir=rtl] .md-search__overlay{right:-2.2rem}.md-search__overlay{background-color:var(--md-default-bg-color);border-radius:1rem;height:2rem;overflow:hidden;pointer-events:none;position:absolute;top:-1rem;transform-origin:center;transition:transform .3s .1s,opacity .2s .2s;width:2rem}[data-md-toggle=search]:checked~.md-header .md-search__overlay{opacity:1;transition:transform .4s,opacity .1s}}@media screen and (min-width:60em){[dir=ltr] .md-search__overlay{left:0}[dir=rtl] .md-search__overlay{right:0}.md-search__overlay{background-color:#0000008a;cursor:pointer;height:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0}[data-md-toggle=search]:checked~.md-header .md-search__overlay{height:200vh;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@media screen and (max-width:29.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(45)}}@media screen and (min-width:30em) and (max-width:44.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(60)}}@media screen and (min-width:45em) and (max-width:59.984375em){[data-md-toggle=search]:checked~.md-header .md-search__overlay{transform:scale(75)}}.md-search__inner{-webkit-backface-visibility:hidden;backface-visibility:hidden}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__inner{left:0}[dir=rtl] .md-search__inner{right:0}.md-search__inner{height:0;opacity:0;overflow:hidden;position:fixed;top:0;transform:translateX(5%);transition:width 0ms .3s,height 0ms .3s,transform .15s cubic-bezier(.4,0,.2,1) .15s,opacity .15s .15s;width:0;z-index:2}[dir=rtl] .md-search__inner{transform:translateX(-5%)}[data-md-toggle=search]:checked~.md-header .md-search__inner{height:100%;opacity:1;transform:translateX(0);transition:width 0ms 0ms,height 0ms 0ms,transform .15s cubic-bezier(.1,.7,.1,1) .15s,opacity .15s .15s;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__inner{float:right}[dir=rtl] .md-search__inner{float:left}.md-search__inner{padding:.1rem 0;position:relative;transition:width .25s cubic-bezier(.1,.7,.1,1);width:11.7rem}}@media screen and (min-width:60em) and (max-width:76.234375em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:23.4rem}}@media screen and (min-width:76.25em){[data-md-toggle=search]:checked~.md-header .md-search__inner{width:34.4rem}}.md-search__form{background-color:var(--md-default-bg-color);box-shadow:0 0 .6rem #0000;height:2.4rem;position:relative;transition:color .25s,background-color .25s;z-index:2}@media screen and (min-width:60em){.md-search__form{background-color:#00000042;border-radius:.1rem;height:1.8rem}.md-search__form:hover{background-color:#ffffff1f}}[data-md-toggle=search]:checked~.md-header .md-search__form{background-color:var(--md-default-bg-color);border-radius:.1rem .1rem 0 0;box-shadow:0 0 .6rem #00000012;color:var(--md-default-fg-color)}[dir=ltr] .md-search__input{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__input{padding-left:2.2rem;padding-right:3.6rem}.md-search__input{background:#0000;font-size:.9rem;height:100%;position:relative;text-overflow:ellipsis;width:100%;z-index:2}.md-search__input::placeholder{transition:color .25s}.md-search__input::placeholder,.md-search__input~.md-search__icon{color:var(--md-default-fg-color--light)}.md-search__input::-ms-clear{display:none}@media screen and (max-width:59.984375em){.md-search__input{font-size:.9rem;height:2.4rem;width:100%}}@media screen and (min-width:60em){[dir=ltr] .md-search__input{padding-left:2.2rem}[dir=rtl] .md-search__input{padding-right:2.2rem}.md-search__input{color:inherit;font-size:.8rem}.md-search__input::placeholder{color:var(--md-primary-bg-color--light)}.md-search__input+.md-search__icon{color:var(--md-primary-bg-color)}[data-md-toggle=search]:checked~.md-header .md-search__input{text-overflow:clip}[data-md-toggle=search]:checked~.md-header .md-search__input+.md-search__icon{color:var(--md-default-fg-color--light)}[data-md-toggle=search]:checked~.md-header .md-search__input::placeholder{color:#0000}}.md-search__icon{cursor:pointer;display:inline-block;height:1.2rem;transition:color .25s,opacity .25s;width:1.2rem}.md-search__icon:hover{opacity:.7}[dir=ltr] .md-search__icon[for=__search]{left:.5rem}[dir=rtl] .md-search__icon[for=__search]{right:.5rem}.md-search__icon[for=__search]{position:absolute;top:.3rem;z-index:2}[dir=rtl] .md-search__icon[for=__search] svg{transform:scaleX(-1)}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__icon[for=__search]{left:.8rem}[dir=rtl] .md-search__icon[for=__search]{right:.8rem}.md-search__icon[for=__search]{top:.6rem}.md-search__icon[for=__search] svg:first-child{display:none}}@media screen and (min-width:60em){.md-search__icon[for=__search]{pointer-events:none}.md-search__icon[for=__search] svg:last-child{display:none}}[dir=ltr] .md-search__options{right:.5rem}[dir=rtl] .md-search__options{left:.5rem}.md-search__options{pointer-events:none;position:absolute;top:.3rem;z-index:2}@media screen and (max-width:59.984375em){[dir=ltr] .md-search__options{right:.8rem}[dir=rtl] .md-search__options{left:.8rem}.md-search__options{top:.6rem}}[dir=ltr] .md-search__options>.md-icon{margin-left:.2rem}[dir=rtl] .md-search__options>.md-icon{margin-right:.2rem}.md-search__options>.md-icon{color:var(--md-default-fg-color--light);opacity:0;transform:scale(.75);transition:transform .15s cubic-bezier(.1,.7,.1,1),opacity .15s}.md-search__options>.md-icon:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon{opacity:1;pointer-events:auto;transform:scale(1)}[data-md-toggle=search]:checked~.md-header .md-search__input:valid~.md-search__options>.md-icon:hover{opacity:.7}[dir=ltr] .md-search__suggest{padding-left:3.6rem;padding-right:2.2rem}[dir=rtl] .md-search__suggest{padding-left:2.2rem;padding-right:3.6rem}.md-search__suggest{align-items:center;color:var(--md-default-fg-color--lighter);display:flex;font-size:.9rem;height:100%;opacity:0;position:absolute;top:0;transition:opacity 50ms;white-space:nowrap;width:100%}@media screen and (min-width:60em){[dir=ltr] .md-search__suggest{padding-left:2.2rem}[dir=rtl] .md-search__suggest{padding-right:2.2rem}.md-search__suggest{font-size:.8rem}}[data-md-toggle=search]:checked~.md-header .md-search__suggest{opacity:1;transition:opacity .3s .1s}[dir=ltr] .md-search__output{border-bottom-left-radius:.1rem}[dir=ltr] .md-search__output,[dir=rtl] .md-search__output{border-bottom-right-radius:.1rem}[dir=rtl] .md-search__output{border-bottom-left-radius:.1rem}.md-search__output{overflow:hidden;position:absolute;width:100%;z-index:1}@media screen and (max-width:59.984375em){.md-search__output{bottom:0;top:2.4rem}}@media screen and (min-width:60em){.md-search__output{opacity:0;top:1.9rem;transition:opacity .4s}[data-md-toggle=search]:checked~.md-header .md-search__output{box-shadow:var(--md-shadow-z3);opacity:1}}.md-search__scrollwrap{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);height:100%;overflow-y:auto;touch-action:pan-y}@media (-webkit-max-device-pixel-ratio:1),(max-resolution:1dppx){.md-search__scrollwrap{transform:translateZ(0)}}@media screen and (min-width:60em) and (max-width:76.234375em){.md-search__scrollwrap{width:23.4rem}}@media screen and (min-width:76.25em){.md-search__scrollwrap{width:34.4rem}}@media screen and (min-width:60em){.md-search__scrollwrap{max-height:0;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}[data-md-toggle=search]:checked~.md-header .md-search__scrollwrap{max-height:75vh}.md-search__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-search__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-search__scrollwrap::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-search__scrollwrap::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}}.md-search-result{color:var(--md-default-fg-color);word-break:break-word}.md-search-result__meta{background-color:var(--md-default-fg-color--lightest);color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.8rem;padding:0 .8rem;scroll-snap-align:start}@media screen and (min-width:60em){[dir=ltr] .md-search-result__meta{padding-left:2.2rem}[dir=rtl] .md-search-result__meta{padding-right:2.2rem}}.md-search-result__list{list-style:none;margin:0;padding:0;-webkit-user-select:none;user-select:none}.md-search-result__item{box-shadow:0 -.05rem var(--md-default-fg-color--lightest)}.md-search-result__item:first-child{box-shadow:none}.md-search-result__link{display:block;outline:none;scroll-snap-align:start;transition:background-color .25s}.md-search-result__link:focus,.md-search-result__link:hover{background-color:var(--md-accent-fg-color--transparent)}.md-search-result__link:last-child p:last-child{margin-bottom:.6rem}.md-search-result__more>summary{cursor:pointer;display:block;outline:none;position:sticky;scroll-snap-align:start;top:0;z-index:1}.md-search-result__more>summary::marker{display:none}.md-search-result__more>summary::-webkit-details-marker{display:none}.md-search-result__more>summary>div{color:var(--md-typeset-a-color);font-size:.64rem;padding:.75em .8rem;transition:color .25s,background-color .25s}@media screen and (min-width:60em){[dir=ltr] .md-search-result__more>summary>div{padding-left:2.2rem}[dir=rtl] .md-search-result__more>summary>div{padding-right:2.2rem}}.md-search-result__more>summary:focus>div,.md-search-result__more>summary:hover>div{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-search-result__more[open]>summary{background-color:var(--md-default-bg-color)}.md-search-result__article{overflow:hidden;padding:0 .8rem;position:relative}@media screen and (min-width:60em){[dir=ltr] .md-search-result__article{padding-left:2.2rem}[dir=rtl] .md-search-result__article{padding-right:2.2rem}}[dir=ltr] .md-search-result__icon{left:0}[dir=rtl] .md-search-result__icon{right:0}.md-search-result__icon{color:var(--md-default-fg-color--light);height:1.2rem;margin:.5rem;position:absolute;width:1.2rem}@media screen and (max-width:59.984375em){.md-search-result__icon{display:none}}.md-search-result__icon:after{background-color:currentcolor;content:"";display:inline-block;height:100%;-webkit-mask-image:var(--md-search-result-icon);mask-image:var(--md-search-result-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:100%}[dir=rtl] .md-search-result__icon:after{transform:scaleX(-1)}.md-search-result .md-typeset{color:var(--md-default-fg-color--light);font-size:.64rem;line-height:1.6}.md-search-result .md-typeset h1{color:var(--md-default-fg-color);font-size:.8rem;font-weight:400;line-height:1.4;margin:.55rem 0}.md-search-result .md-typeset h1 mark{text-decoration:none}.md-search-result .md-typeset h2{color:var(--md-default-fg-color);font-size:.64rem;font-weight:700;line-height:1.6;margin:.5em 0}.md-search-result .md-typeset h2 mark{text-decoration:none}.md-search-result__terms{color:var(--md-default-fg-color);display:block;font-size:.64rem;font-style:italic;margin:.5em 0}.md-search-result mark{background-color:initial;color:var(--md-accent-fg-color);text-decoration:underline}.md-select{position:relative;z-index:1}.md-select__inner{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);left:50%;margin-top:.2rem;max-height:0;opacity:0;position:absolute;top:calc(100% - .2rem);transform:translate3d(-50%,.3rem,0);transition:transform .25s 375ms,opacity .25s .25s,max-height 0ms .5s}.md-select:focus-within .md-select__inner,.md-select:hover .md-select__inner{max-height:10rem;opacity:1;transform:translate3d(-50%,0,0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,max-height 0ms}.md-select__inner:after{border-bottom:.2rem solid #0000;border-bottom-color:var(--md-default-bg-color);border-left:.2rem solid #0000;border-right:.2rem solid #0000;border-top:0;content:"";height:0;left:50%;margin-left:-.2rem;margin-top:-.2rem;position:absolute;top:0;width:0}.md-select__list{border-radius:.1rem;font-size:.8rem;list-style-type:none;margin:0;max-height:inherit;overflow:auto;padding:0}.md-select__item{line-height:1.8rem}[dir=ltr] .md-select__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-select__link{padding-left:1.2rem;padding-right:.6rem}.md-select__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:background-color .25s,color .25s;width:100%}.md-select__link:focus,.md-select__link:hover{color:var(--md-accent-fg-color)}.md-select__link:focus{background-color:var(--md-default-fg-color--lightest)}.md-sidebar{align-self:flex-start;flex-shrink:0;padding:1.2rem 0;position:sticky;top:2.4rem;width:12.1rem}@media print{.md-sidebar{display:none}}@media screen and (max-width:76.234375em){[dir=ltr] .md-sidebar--primary{left:-12.1rem}[dir=rtl] .md-sidebar--primary{right:-12.1rem}.md-sidebar--primary{background-color:var(--md-default-bg-color);display:block;height:100%;position:fixed;top:0;transform:translateX(0);transition:transform .25s cubic-bezier(.4,0,.2,1),box-shadow .25s;width:12.1rem;z-index:5}[data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{box-shadow:var(--md-shadow-z3);transform:translateX(12.1rem)}[dir=rtl] [data-md-toggle=drawer]:checked~.md-container .md-sidebar--primary{transform:translateX(-12.1rem)}.md-sidebar--primary .md-sidebar__scrollwrap{bottom:0;left:0;margin:0;overflow:hidden;position:absolute;right:0;scroll-snap-type:none;top:0}}@media screen and (min-width:76.25em){.md-sidebar{height:0}.no-js .md-sidebar{height:auto}.md-header--lifted~.md-container .md-sidebar{top:4.8rem}}.md-sidebar--secondary{display:none;order:2}@media screen and (min-width:60em){.md-sidebar--secondary{height:0}.no-js .md-sidebar--secondary{height:auto}.md-sidebar--secondary:not([hidden]){display:block}.md-sidebar--secondary .md-sidebar__scrollwrap{touch-action:pan-y}}.md-sidebar__scrollwrap{scrollbar-gutter:stable;-webkit-backface-visibility:hidden;backface-visibility:hidden;margin:0 .2rem;overflow-y:auto;scrollbar-color:var(--md-default-fg-color--lighter) #0000;scrollbar-width:thin}.md-sidebar__scrollwrap::-webkit-scrollbar{height:.2rem;width:.2rem}.md-sidebar__scrollwrap:focus-within,.md-sidebar__scrollwrap:hover{scrollbar-color:var(--md-accent-fg-color) #0000}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb{background-color:var(--md-default-fg-color--lighter)}.md-sidebar__scrollwrap:focus-within::-webkit-scrollbar-thumb:hover,.md-sidebar__scrollwrap:hover::-webkit-scrollbar-thumb:hover{background-color:var(--md-accent-fg-color)}@supports selector(::-webkit-scrollbar){.md-sidebar__scrollwrap{scrollbar-gutter:auto}[dir=ltr] .md-sidebar__inner{padding-right:calc(100% - 11.5rem)}[dir=rtl] .md-sidebar__inner{padding-left:calc(100% - 11.5rem)}}@media screen and (max-width:76.234375em){.md-overlay{background-color:#0000008a;height:0;opacity:0;position:fixed;top:0;transition:width 0ms .25s,height 0ms .25s,opacity .25s;width:0;z-index:5}[data-md-toggle=drawer]:checked~.md-overlay{height:100%;opacity:1;transition:width 0ms,height 0ms,opacity .25s;width:100%}}@keyframes facts{0%{height:0}to{height:.65rem}}@keyframes fact{0%{opacity:0;transform:translateY(100%)}50%{opacity:0}to{opacity:1;transform:translateY(0)}}:root{--md-source-forks-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-repositories-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-stars-icon:url('data:image/svg+xml;charset=utf-8,');--md-source-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-source{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:block;font-size:.65rem;line-height:1.2;outline-color:var(--md-accent-fg-color);transition:opacity .25s;white-space:nowrap}.md-source:hover{opacity:.7}.md-source__icon{display:inline-block;height:2.4rem;vertical-align:middle;width:2rem}[dir=ltr] .md-source__icon svg{margin-left:.6rem}[dir=rtl] .md-source__icon svg{margin-right:.6rem}.md-source__icon svg{margin-top:.6rem}[dir=ltr] .md-source__icon+.md-source__repository{padding-left:2rem}[dir=rtl] .md-source__icon+.md-source__repository{padding-right:2rem}[dir=ltr] .md-source__icon+.md-source__repository{margin-left:-2rem}[dir=rtl] .md-source__icon+.md-source__repository{margin-right:-2rem}[dir=ltr] .md-source__repository{margin-left:.6rem}[dir=rtl] .md-source__repository{margin-right:.6rem}.md-source__repository{display:inline-block;max-width:calc(100% - 1.2rem);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}.md-source__facts{display:flex;font-size:.55rem;gap:.4rem;list-style-type:none;margin:.1rem 0 0;opacity:.75;overflow:hidden;padding:0;width:100%}.md-source__repository--active .md-source__facts{animation:facts .25s ease-in}.md-source__fact{overflow:hidden;text-overflow:ellipsis}.md-source__repository--active .md-source__fact{animation:fact .4s ease-out}[dir=ltr] .md-source__fact:before{margin-right:.1rem}[dir=rtl] .md-source__fact:before{margin-left:.1rem}.md-source__fact:before{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-top;width:.6rem}.md-source__fact:nth-child(1n+2){flex-shrink:0}.md-source__fact--version:before{-webkit-mask-image:var(--md-source-version-icon);mask-image:var(--md-source-version-icon)}.md-source__fact--stars:before{-webkit-mask-image:var(--md-source-stars-icon);mask-image:var(--md-source-stars-icon)}.md-source__fact--forks:before{-webkit-mask-image:var(--md-source-forks-icon);mask-image:var(--md-source-forks-icon)}.md-source__fact--repositories:before{-webkit-mask-image:var(--md-source-repositories-icon);mask-image:var(--md-source-repositories-icon)}:root{--md-status:url('data:image/svg+xml;charset=utf-8,');--md-status--new:url('data:image/svg+xml;charset=utf-8,');--md-status--deprecated:url('data:image/svg+xml;charset=utf-8,');--md-status--encrypted:url('data:image/svg+xml;charset=utf-8,')}.md-status:after{background-color:var(--md-default-fg-color--light);content:"";display:inline-block;height:1.125em;-webkit-mask-image:var(--md-status);mask-image:var(--md-status);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;vertical-align:text-bottom;width:1.125em}.md-status:hover:after{background-color:currentcolor}.md-status--new:after{-webkit-mask-image:var(--md-status--new);mask-image:var(--md-status--new)}.md-status--deprecated:after{-webkit-mask-image:var(--md-status--deprecated);mask-image:var(--md-status--deprecated)}.md-status--encrypted:after{-webkit-mask-image:var(--md-status--encrypted);mask-image:var(--md-status--encrypted)}.md-tabs{background-color:var(--md-primary-fg-color);color:var(--md-primary-bg-color);display:block;line-height:1.3;overflow:auto;width:100%;z-index:3}@media print{.md-tabs{display:none}}@media screen and (max-width:76.234375em){.md-tabs{display:none}}.md-tabs[hidden]{pointer-events:none}[dir=ltr] .md-tabs__list{margin-left:.2rem}[dir=rtl] .md-tabs__list{margin-right:.2rem}.md-tabs__list{contain:content;display:flex;list-style:none;margin:0;overflow:auto;padding:0;scrollbar-width:none;white-space:nowrap}.md-tabs__list::-webkit-scrollbar{display:none}.md-tabs__item{height:2.4rem;padding-left:.6rem;padding-right:.6rem}.md-tabs__item--active .md-tabs__link{color:inherit;opacity:1}.md-tabs__link{-webkit-backface-visibility:hidden;backface-visibility:hidden;display:flex;font-size:.7rem;margin-top:.8rem;opacity:.7;outline-color:var(--md-accent-fg-color);outline-offset:.2rem;transition:transform .4s cubic-bezier(.1,.7,.1,1),opacity .25s}.md-tabs__link:focus,.md-tabs__link:hover{color:inherit;opacity:1}[dir=ltr] .md-tabs__link svg{margin-right:.4rem}[dir=rtl] .md-tabs__link svg{margin-left:.4rem}.md-tabs__link svg{fill:currentcolor;height:1.3em}.md-tabs__item:nth-child(2) .md-tabs__link{transition-delay:20ms}.md-tabs__item:nth-child(3) .md-tabs__link{transition-delay:40ms}.md-tabs__item:nth-child(4) .md-tabs__link{transition-delay:60ms}.md-tabs__item:nth-child(5) .md-tabs__link{transition-delay:80ms}.md-tabs__item:nth-child(6) .md-tabs__link{transition-delay:.1s}.md-tabs__item:nth-child(7) .md-tabs__link{transition-delay:.12s}.md-tabs__item:nth-child(8) .md-tabs__link{transition-delay:.14s}.md-tabs__item:nth-child(9) .md-tabs__link{transition-delay:.16s}.md-tabs__item:nth-child(10) .md-tabs__link{transition-delay:.18s}.md-tabs__item:nth-child(11) .md-tabs__link{transition-delay:.2s}.md-tabs__item:nth-child(12) .md-tabs__link{transition-delay:.22s}.md-tabs__item:nth-child(13) .md-tabs__link{transition-delay:.24s}.md-tabs__item:nth-child(14) .md-tabs__link{transition-delay:.26s}.md-tabs__item:nth-child(15) .md-tabs__link{transition-delay:.28s}.md-tabs__item:nth-child(16) .md-tabs__link{transition-delay:.3s}.md-tabs[hidden] .md-tabs__link{opacity:0;transform:translateY(50%);transition:transform 0ms .1s,opacity .1s}:root{--md-tag-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .md-tags:not([hidden]){display:inline-flex;flex-wrap:wrap;gap:.5em;margin-bottom:.75em;margin-top:-.125em}.md-typeset .md-tag{align-items:center;background:var(--md-default-fg-color--lightest);border-radius:2.4rem;display:inline-flex;font-size:.64rem;font-size:min(.8em,.64rem);font-weight:700;gap:.5em;letter-spacing:normal;line-height:1.6;padding:.3125em .78125em}.md-typeset .md-tag[href]{-webkit-tap-highlight-color:transparent;color:inherit;outline:none;transition:color 125ms,background-color 125ms}.md-typeset .md-tag[href]:focus,.md-typeset .md-tag[href]:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}[id]>.md-typeset .md-tag{vertical-align:text-top}.md-typeset .md-tag-icon:before{background-color:var(--md-default-fg-color--lighter);content:"";display:inline-block;height:1.2em;-webkit-mask-image:var(--md-tag-icon);mask-image:var(--md-tag-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color 125ms;vertical-align:text-bottom;width:1.2em}.md-typeset .md-tag-icon[href]:focus:before,.md-typeset .md-tag-icon[href]:hover:before{background-color:var(--md-accent-bg-color)}@keyframes pulse{0%{transform:scale(.95)}75%{transform:scale(1)}to{transform:scale(.95)}}:root{--md-annotation-bg-icon:url('data:image/svg+xml;charset=utf-8,');--md-annotation-icon:url('data:image/svg+xml;charset=utf-8,');--md-tooltip-width:20rem}.md-tooltip{-webkit-backface-visibility:hidden;backface-visibility:hidden;background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);font-family:var(--md-text-font-family);left:clamp(var(--md-tooltip-0,0rem) + .8rem,var(--md-tooltip-x),100vw + var(--md-tooltip-0,0rem) + .8rem - var(--md-tooltip-width) - 2 * .8rem);max-width:calc(100vw - 1.6rem);opacity:0;position:absolute;top:var(--md-tooltip-y);transform:translateY(-.4rem);transition:transform 0ms .25s,opacity .25s,z-index .25s;width:var(--md-tooltip-width);z-index:0}.md-tooltip--active{opacity:1;transform:translateY(0);transition:transform .25s cubic-bezier(.1,.7,.1,1),opacity .25s,z-index 0ms;z-index:2}.focus-visible>.md-tooltip,.md-tooltip:target{outline:var(--md-accent-fg-color) auto}.md-tooltip__inner{font-size:.64rem;padding:.8rem}.md-tooltip__inner.md-typeset>:first-child{margin-top:0}.md-tooltip__inner.md-typeset>:last-child{margin-bottom:0}.md-annotation{font-weight:400;outline:none;vertical-align:text-bottom;white-space:normal}[dir=rtl] .md-annotation{direction:rtl}code .md-annotation{font-family:var(--md-code-font-family);font-size:inherit}.md-annotation:not([hidden]){display:inline-block;line-height:1.25}.md-annotation__index{border-radius:.01px;cursor:pointer;display:inline-block;margin-left:.4ch;margin-right:.4ch;outline:none;overflow:hidden;position:relative;-webkit-user-select:none;user-select:none;vertical-align:text-top;z-index:0}.md-annotation .md-annotation__index{transition:z-index .25s}@media screen{.md-annotation__index{width:2.2ch}[data-md-visible]>.md-annotation__index{animation:pulse 2s infinite}.md-annotation__index:before{background:var(--md-default-bg-color);-webkit-mask-image:var(--md-annotation-bg-icon);mask-image:var(--md-annotation-bg-icon)}.md-annotation__index:after,.md-annotation__index:before{content:"";height:2.2ch;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:-.1ch;width:2.2ch;z-index:-1}.md-annotation__index:after{background-color:var(--md-default-fg-color--lighter);-webkit-mask-image:var(--md-annotation-icon);mask-image:var(--md-annotation-icon);transform:scale(1.0001);transition:background-color .25s,transform .25s}.md-tooltip--active+.md-annotation__index:after{transform:rotate(45deg)}.md-tooltip--active+.md-annotation__index:after,:hover>.md-annotation__index:after{background-color:var(--md-accent-fg-color)}}.md-tooltip--active+.md-annotation__index{animation-play-state:paused;transition-duration:0ms;z-index:2}.md-annotation__index [data-md-annotation-id]{display:inline-block}@media print{.md-annotation__index [data-md-annotation-id]{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);font-weight:700;padding:0 .6ch;white-space:nowrap}.md-annotation__index [data-md-annotation-id]:after{content:attr(data-md-annotation-id)}}.md-typeset .md-annotation-list{counter-reset:xxx;list-style:none}.md-typeset .md-annotation-list li{position:relative}[dir=ltr] .md-typeset .md-annotation-list li:before{left:-2.125em}[dir=rtl] .md-typeset .md-annotation-list li:before{right:-2.125em}.md-typeset .md-annotation-list li:before{background:var(--md-default-fg-color--lighter);border-radius:2ch;color:var(--md-default-bg-color);content:counter(xxx);counter-increment:xxx;font-size:.8875em;font-weight:700;height:2ch;line-height:1.25;min-width:2ch;padding:0 .6ch;position:absolute;text-align:center;top:.25em}[dir=ltr] .md-top{margin-left:50%}[dir=rtl] .md-top{margin-right:50%}.md-top{background-color:var(--md-default-bg-color);border-radius:1.6rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color--light);cursor:pointer;display:block;font-size:.7rem;outline:none;padding:.4rem .8rem;position:fixed;top:3.2rem;transform:translate(-50%);transition:color 125ms,background-color 125ms,transform 125ms cubic-bezier(.4,0,.2,1),opacity 125ms;z-index:2}@media print{.md-top{display:none}}[dir=rtl] .md-top{transform:translate(50%)}.md-top[hidden]{opacity:0;pointer-events:none;transform:translate(-50%,.2rem);transition-duration:0ms}[dir=rtl] .md-top[hidden]{transform:translate(50%,.2rem)}.md-top:focus,.md-top:hover{background-color:var(--md-accent-fg-color);color:var(--md-accent-bg-color)}.md-top svg{display:inline-block;vertical-align:-.5em}@keyframes hoverfix{0%{pointer-events:none}}:root{--md-version-icon:url('data:image/svg+xml;charset=utf-8,')}.md-version{flex-shrink:0;font-size:.8rem;height:2.4rem}[dir=ltr] .md-version__current{margin-left:1.4rem;margin-right:.4rem}[dir=rtl] .md-version__current{margin-left:.4rem;margin-right:1.4rem}.md-version__current{color:inherit;cursor:pointer;outline:none;position:relative;top:.05rem}[dir=ltr] .md-version__current:after{margin-left:.4rem}[dir=rtl] .md-version__current:after{margin-right:.4rem}.md-version__current:after{background-color:currentcolor;content:"";display:inline-block;height:.6rem;-webkit-mask-image:var(--md-version-icon);mask-image:var(--md-version-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.4rem}.md-version__list{background-color:var(--md-default-bg-color);border-radius:.1rem;box-shadow:var(--md-shadow-z2);color:var(--md-default-fg-color);list-style-type:none;margin:.2rem .8rem;max-height:0;opacity:0;overflow:auto;padding:0;position:absolute;scroll-snap-type:y mandatory;top:.15rem;transition:max-height 0ms .5s,opacity .25s .25s;z-index:3}.md-version:focus-within .md-version__list,.md-version:hover .md-version__list{max-height:10rem;opacity:1;transition:max-height 0ms,opacity .25s}@media (hover:none),(pointer:coarse){.md-version:hover .md-version__list{animation:hoverfix .25s forwards}.md-version:focus-within .md-version__list{animation:none}}.md-version__item{line-height:1.8rem}[dir=ltr] .md-version__link{padding-left:.6rem;padding-right:1.2rem}[dir=rtl] .md-version__link{padding-left:1.2rem;padding-right:.6rem}.md-version__link{cursor:pointer;display:block;outline:none;scroll-snap-align:start;transition:color .25s,background-color .25s;white-space:nowrap;width:100%}.md-version__link:focus,.md-version__link:hover{color:var(--md-accent-fg-color)}.md-version__link:focus{background-color:var(--md-default-fg-color--lightest)}:root{--md-admonition-icon--note:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--abstract:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--info:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--tip:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--success:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--question:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--warning:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--failure:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--danger:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--bug:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--example:url('data:image/svg+xml;charset=utf-8,');--md-admonition-icon--quote:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .admonition,.md-typeset details{background-color:var(--md-admonition-bg-color);border:.075rem solid #448aff;border-radius:.2rem;box-shadow:var(--md-shadow-z1);color:var(--md-admonition-fg-color);display:flow-root;font-size:.64rem;margin:1.5625em 0;padding:0 .6rem;page-break-inside:avoid;transition:box-shadow 125ms}@media print{.md-typeset .admonition,.md-typeset details{box-shadow:none}}.md-typeset .admonition:focus-within,.md-typeset details:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .admonition>*,.md-typeset details>*{box-sizing:border-box}.md-typeset .admonition .admonition,.md-typeset .admonition details,.md-typeset details .admonition,.md-typeset details details{margin-bottom:1em;margin-top:1em}.md-typeset .admonition .md-typeset__scrollwrap,.md-typeset details .md-typeset__scrollwrap{margin:1em -.6rem}.md-typeset .admonition .md-typeset__table,.md-typeset details .md-typeset__table{padding:0 .6rem}.md-typeset .admonition>.tabbed-set:only-child,.md-typeset details>.tabbed-set:only-child{margin-top:0}html .md-typeset .admonition>:last-child,html .md-typeset details>:last-child{margin-bottom:.6rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{padding-left:2rem;padding-right:.6rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{padding-left:.6rem;padding-right:2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-left-width:.2rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-right-width:.2rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset .admonition-title,[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset .admonition-title,[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset .admonition-title,.md-typeset summary{background-color:#448aff1a;border:none;font-weight:700;margin:0 -.6rem;padding-bottom:.4rem;padding-top:.4rem;position:relative}html .md-typeset .admonition-title:last-child,html .md-typeset summary:last-child{margin-bottom:0}[dir=ltr] .md-typeset .admonition-title:before,[dir=ltr] .md-typeset summary:before{left:.6rem}[dir=rtl] .md-typeset .admonition-title:before,[dir=rtl] .md-typeset summary:before{right:.6rem}.md-typeset .admonition-title:before,.md-typeset summary:before{background-color:#448aff;content:"";height:1rem;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;width:1rem}.md-typeset .admonition-title code,.md-typeset summary code{box-shadow:0 0 0 .05rem var(--md-default-fg-color--lightest)}.md-typeset .admonition.note,.md-typeset details.note{border-color:#448aff}.md-typeset .admonition.note:focus-within,.md-typeset details.note:focus-within{box-shadow:0 0 0 .2rem #448aff1a}.md-typeset .note>.admonition-title,.md-typeset .note>summary{background-color:#448aff1a}.md-typeset .note>.admonition-title:before,.md-typeset .note>summary:before{background-color:#448aff;-webkit-mask-image:var(--md-admonition-icon--note);mask-image:var(--md-admonition-icon--note)}.md-typeset .note>.admonition-title:after,.md-typeset .note>summary:after{color:#448aff}.md-typeset .admonition.abstract,.md-typeset details.abstract{border-color:#00b0ff}.md-typeset .admonition.abstract:focus-within,.md-typeset details.abstract:focus-within{box-shadow:0 0 0 .2rem #00b0ff1a}.md-typeset .abstract>.admonition-title,.md-typeset .abstract>summary{background-color:#00b0ff1a}.md-typeset .abstract>.admonition-title:before,.md-typeset .abstract>summary:before{background-color:#00b0ff;-webkit-mask-image:var(--md-admonition-icon--abstract);mask-image:var(--md-admonition-icon--abstract)}.md-typeset .abstract>.admonition-title:after,.md-typeset .abstract>summary:after{color:#00b0ff}.md-typeset .admonition.info,.md-typeset details.info{border-color:#00b8d4}.md-typeset .admonition.info:focus-within,.md-typeset details.info:focus-within{box-shadow:0 0 0 .2rem #00b8d41a}.md-typeset .info>.admonition-title,.md-typeset .info>summary{background-color:#00b8d41a}.md-typeset .info>.admonition-title:before,.md-typeset .info>summary:before{background-color:#00b8d4;-webkit-mask-image:var(--md-admonition-icon--info);mask-image:var(--md-admonition-icon--info)}.md-typeset .info>.admonition-title:after,.md-typeset .info>summary:after{color:#00b8d4}.md-typeset .admonition.tip,.md-typeset details.tip{border-color:#00bfa5}.md-typeset .admonition.tip:focus-within,.md-typeset details.tip:focus-within{box-shadow:0 0 0 .2rem #00bfa51a}.md-typeset .tip>.admonition-title,.md-typeset .tip>summary{background-color:#00bfa51a}.md-typeset .tip>.admonition-title:before,.md-typeset .tip>summary:before{background-color:#00bfa5;-webkit-mask-image:var(--md-admonition-icon--tip);mask-image:var(--md-admonition-icon--tip)}.md-typeset .tip>.admonition-title:after,.md-typeset .tip>summary:after{color:#00bfa5}.md-typeset .admonition.success,.md-typeset details.success{border-color:#00c853}.md-typeset .admonition.success:focus-within,.md-typeset details.success:focus-within{box-shadow:0 0 0 .2rem #00c8531a}.md-typeset .success>.admonition-title,.md-typeset .success>summary{background-color:#00c8531a}.md-typeset .success>.admonition-title:before,.md-typeset .success>summary:before{background-color:#00c853;-webkit-mask-image:var(--md-admonition-icon--success);mask-image:var(--md-admonition-icon--success)}.md-typeset .success>.admonition-title:after,.md-typeset .success>summary:after{color:#00c853}.md-typeset .admonition.question,.md-typeset details.question{border-color:#64dd17}.md-typeset .admonition.question:focus-within,.md-typeset details.question:focus-within{box-shadow:0 0 0 .2rem #64dd171a}.md-typeset .question>.admonition-title,.md-typeset .question>summary{background-color:#64dd171a}.md-typeset .question>.admonition-title:before,.md-typeset .question>summary:before{background-color:#64dd17;-webkit-mask-image:var(--md-admonition-icon--question);mask-image:var(--md-admonition-icon--question)}.md-typeset .question>.admonition-title:after,.md-typeset .question>summary:after{color:#64dd17}.md-typeset .admonition.warning,.md-typeset details.warning{border-color:#ff9100}.md-typeset .admonition.warning:focus-within,.md-typeset details.warning:focus-within{box-shadow:0 0 0 .2rem #ff91001a}.md-typeset .warning>.admonition-title,.md-typeset .warning>summary{background-color:#ff91001a}.md-typeset .warning>.admonition-title:before,.md-typeset .warning>summary:before{background-color:#ff9100;-webkit-mask-image:var(--md-admonition-icon--warning);mask-image:var(--md-admonition-icon--warning)}.md-typeset .warning>.admonition-title:after,.md-typeset .warning>summary:after{color:#ff9100}.md-typeset .admonition.failure,.md-typeset details.failure{border-color:#ff5252}.md-typeset .admonition.failure:focus-within,.md-typeset details.failure:focus-within{box-shadow:0 0 0 .2rem #ff52521a}.md-typeset .failure>.admonition-title,.md-typeset .failure>summary{background-color:#ff52521a}.md-typeset .failure>.admonition-title:before,.md-typeset .failure>summary:before{background-color:#ff5252;-webkit-mask-image:var(--md-admonition-icon--failure);mask-image:var(--md-admonition-icon--failure)}.md-typeset .failure>.admonition-title:after,.md-typeset .failure>summary:after{color:#ff5252}.md-typeset .admonition.danger,.md-typeset details.danger{border-color:#ff1744}.md-typeset .admonition.danger:focus-within,.md-typeset details.danger:focus-within{box-shadow:0 0 0 .2rem #ff17441a}.md-typeset .danger>.admonition-title,.md-typeset .danger>summary{background-color:#ff17441a}.md-typeset .danger>.admonition-title:before,.md-typeset .danger>summary:before{background-color:#ff1744;-webkit-mask-image:var(--md-admonition-icon--danger);mask-image:var(--md-admonition-icon--danger)}.md-typeset .danger>.admonition-title:after,.md-typeset .danger>summary:after{color:#ff1744}.md-typeset .admonition.bug,.md-typeset details.bug{border-color:#f50057}.md-typeset .admonition.bug:focus-within,.md-typeset details.bug:focus-within{box-shadow:0 0 0 .2rem #f500571a}.md-typeset .bug>.admonition-title,.md-typeset .bug>summary{background-color:#f500571a}.md-typeset .bug>.admonition-title:before,.md-typeset .bug>summary:before{background-color:#f50057;-webkit-mask-image:var(--md-admonition-icon--bug);mask-image:var(--md-admonition-icon--bug)}.md-typeset .bug>.admonition-title:after,.md-typeset .bug>summary:after{color:#f50057}.md-typeset .admonition.example,.md-typeset details.example{border-color:#7c4dff}.md-typeset .admonition.example:focus-within,.md-typeset details.example:focus-within{box-shadow:0 0 0 .2rem #7c4dff1a}.md-typeset .example>.admonition-title,.md-typeset .example>summary{background-color:#7c4dff1a}.md-typeset .example>.admonition-title:before,.md-typeset .example>summary:before{background-color:#7c4dff;-webkit-mask-image:var(--md-admonition-icon--example);mask-image:var(--md-admonition-icon--example)}.md-typeset .example>.admonition-title:after,.md-typeset .example>summary:after{color:#7c4dff}.md-typeset .admonition.quote,.md-typeset details.quote{border-color:#9e9e9e}.md-typeset .admonition.quote:focus-within,.md-typeset details.quote:focus-within{box-shadow:0 0 0 .2rem #9e9e9e1a}.md-typeset .quote>.admonition-title,.md-typeset .quote>summary{background-color:#9e9e9e1a}.md-typeset .quote>.admonition-title:before,.md-typeset .quote>summary:before{background-color:#9e9e9e;-webkit-mask-image:var(--md-admonition-icon--quote);mask-image:var(--md-admonition-icon--quote)}.md-typeset .quote>.admonition-title:after,.md-typeset .quote>summary:after{color:#9e9e9e}:root{--md-footnotes-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .footnote{color:var(--md-default-fg-color--light);font-size:.64rem}[dir=ltr] .md-typeset .footnote>ol{margin-left:0}[dir=rtl] .md-typeset .footnote>ol{margin-right:0}.md-typeset .footnote>ol>li{transition:color 125ms}.md-typeset .footnote>ol>li:target{color:var(--md-default-fg-color)}.md-typeset .footnote>ol>li:focus-within .footnote-backref{opacity:1;transform:translateX(0);transition:none}.md-typeset .footnote>ol>li:hover .footnote-backref,.md-typeset .footnote>ol>li:target .footnote-backref{opacity:1;transform:translateX(0)}.md-typeset .footnote>ol>li>:first-child{margin-top:0}.md-typeset .footnote-ref{font-size:.75em;font-weight:700}html .md-typeset .footnote-ref{outline-offset:.1rem}.md-typeset [id^="fnref:"]:target>.footnote-ref{outline:auto}.md-typeset .footnote-backref{color:var(--md-typeset-a-color);display:inline-block;font-size:0;opacity:0;transform:translateX(.25rem);transition:color .25s,transform .25s .25s,opacity 125ms .25s;vertical-align:text-bottom}@media print{.md-typeset .footnote-backref{color:var(--md-typeset-a-color);opacity:1;transform:translateX(0)}}[dir=rtl] .md-typeset .footnote-backref{transform:translateX(-.25rem)}.md-typeset .footnote-backref:hover{color:var(--md-accent-fg-color)}.md-typeset .footnote-backref:before{background-color:currentcolor;content:"";display:inline-block;height:.8rem;-webkit-mask-image:var(--md-footnotes-icon);mask-image:var(--md-footnotes-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;width:.8rem}[dir=rtl] .md-typeset .footnote-backref:before svg{transform:scaleX(-1)}[dir=ltr] .md-typeset .headerlink{margin-left:.5rem}[dir=rtl] .md-typeset .headerlink{margin-right:.5rem}.md-typeset .headerlink{color:var(--md-default-fg-color--lighter);display:inline-block;opacity:0;transition:color .25s,opacity 125ms}@media print{.md-typeset .headerlink{display:none}}.md-typeset .headerlink:focus,.md-typeset :hover>.headerlink,.md-typeset :target>.headerlink{opacity:1;transition:color .25s,opacity 125ms}.md-typeset .headerlink:focus,.md-typeset .headerlink:hover,.md-typeset :target>.headerlink{color:var(--md-accent-fg-color)}.md-typeset :target{--md-scroll-margin:3.6rem;--md-scroll-offset:0rem;scroll-margin-top:calc(var(--md-scroll-margin) - var(--md-scroll-offset))}@media screen and (min-width:76.25em){.md-header--lifted~.md-container .md-typeset :target{--md-scroll-margin:6rem}}.md-typeset h1:target,.md-typeset h2:target,.md-typeset h3:target{--md-scroll-offset:0.2rem}.md-typeset h4:target{--md-scroll-offset:0.15rem}.md-typeset div.arithmatex{overflow:auto}@media screen and (max-width:44.984375em){.md-typeset div.arithmatex{margin:0 -.8rem}}.md-typeset div.arithmatex>*{margin-left:auto!important;margin-right:auto!important;padding:0 .8rem;touch-action:auto;width:-webkit-min-content;width:min-content}.md-typeset div.arithmatex>* mjx-container{margin:0!important}.md-typeset del.critic{background-color:var(--md-typeset-del-color)}.md-typeset del.critic,.md-typeset ins.critic{-webkit-box-decoration-break:clone;box-decoration-break:clone}.md-typeset ins.critic{background-color:var(--md-typeset-ins-color)}.md-typeset .critic.comment{-webkit-box-decoration-break:clone;box-decoration-break:clone;color:var(--md-code-hl-comment-color)}.md-typeset .critic.comment:before{content:"/* "}.md-typeset .critic.comment:after{content:" */"}.md-typeset .critic.block{box-shadow:none;display:block;margin:1em 0;overflow:auto;padding-left:.8rem;padding-right:.8rem}.md-typeset .critic.block>:first-child{margin-top:.5em}.md-typeset .critic.block>:last-child{margin-bottom:.5em}:root{--md-details-icon:url('data:image/svg+xml;charset=utf-8,')}.md-typeset details{display:flow-root;overflow:visible;padding-top:0}.md-typeset details[open]>summary:after{transform:rotate(90deg)}.md-typeset details:not([open]){box-shadow:none;padding-bottom:0}.md-typeset details:not([open])>summary{border-radius:.1rem}[dir=ltr] .md-typeset summary{padding-right:1.8rem}[dir=rtl] .md-typeset summary{padding-left:1.8rem}[dir=ltr] .md-typeset summary{border-top-left-radius:.1rem}[dir=ltr] .md-typeset summary,[dir=rtl] .md-typeset summary{border-top-right-radius:.1rem}[dir=rtl] .md-typeset summary{border-top-left-radius:.1rem}.md-typeset summary{cursor:pointer;display:block;min-height:1rem}.md-typeset summary.focus-visible{outline-color:var(--md-accent-fg-color);outline-offset:.2rem}.md-typeset summary:not(.focus-visible){-webkit-tap-highlight-color:transparent;outline:none}[dir=ltr] .md-typeset summary:after{right:.4rem}[dir=rtl] .md-typeset summary:after{left:.4rem}.md-typeset summary:after{background-color:currentcolor;content:"";height:1rem;-webkit-mask-image:var(--md-details-icon);mask-image:var(--md-details-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.625em;transform:rotate(0deg);transition:transform .25s;width:1rem}[dir=rtl] .md-typeset summary:after{transform:rotate(180deg)}.md-typeset summary::marker{display:none}.md-typeset summary::-webkit-details-marker{display:none}.md-typeset .emojione,.md-typeset .gemoji,.md-typeset .twemoji{display:inline-flex;height:1.125em;vertical-align:text-top}.md-typeset .emojione svg,.md-typeset .gemoji svg,.md-typeset .twemoji svg{fill:currentcolor;max-height:100%;width:1.125em}.highlight .o,.highlight .ow{color:var(--md-code-hl-operator-color)}.highlight .p{color:var(--md-code-hl-punctuation-color)}.highlight .cpf,.highlight .l,.highlight .s,.highlight .s1,.highlight .s2,.highlight .sb,.highlight .sc,.highlight .si,.highlight .ss{color:var(--md-code-hl-string-color)}.highlight .cp,.highlight .se,.highlight .sh,.highlight .sr,.highlight .sx{color:var(--md-code-hl-special-color)}.highlight .il,.highlight .m,.highlight .mb,.highlight .mf,.highlight .mh,.highlight .mi,.highlight .mo{color:var(--md-code-hl-number-color)}.highlight .k,.highlight .kd,.highlight .kn,.highlight .kp,.highlight .kr,.highlight .kt{color:var(--md-code-hl-keyword-color)}.highlight .kc,.highlight .n{color:var(--md-code-hl-name-color)}.highlight .bp,.highlight .nb,.highlight .no{color:var(--md-code-hl-constant-color)}.highlight .nc,.highlight .ne,.highlight .nf,.highlight .nn{color:var(--md-code-hl-function-color)}.highlight .nd,.highlight .ni,.highlight .nl,.highlight .nt{color:var(--md-code-hl-keyword-color)}.highlight .c,.highlight .c1,.highlight .ch,.highlight .cm,.highlight .cs,.highlight .sd{color:var(--md-code-hl-comment-color)}.highlight .na,.highlight .nv,.highlight .vc,.highlight .vg,.highlight .vi{color:var(--md-code-hl-variable-color)}.highlight .ge,.highlight .gh,.highlight .go,.highlight .gp,.highlight .gr,.highlight .gs,.highlight .gt,.highlight .gu{color:var(--md-code-hl-generic-color)}.highlight .gd,.highlight .gi{border-radius:.1rem;margin:0 -.125em;padding:0 .125em}.highlight .gd{background-color:var(--md-typeset-del-color)}.highlight .gi{background-color:var(--md-typeset-ins-color)}.highlight .hll{background-color:var(--md-code-hl-color--light);box-shadow:2px 0 0 0 var(--md-code-hl-color) inset;display:block;margin:0 -1.1764705882em;padding:0 1.1764705882em}.highlight span.filename{background-color:var(--md-code-bg-color);border-bottom:.05rem solid var(--md-default-fg-color--lightest);border-top-left-radius:.1rem;border-top-right-radius:.1rem;display:flow-root;font-size:.85em;font-weight:700;margin-top:1em;padding:.6617647059em 1.1764705882em;position:relative}.highlight span.filename+pre{margin-top:0}.highlight span.filename+pre>code{border-top-left-radius:0;border-top-right-radius:0}.highlight [data-linenos]:before{background-color:var(--md-code-bg-color);box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;color:var(--md-default-fg-color--light);content:attr(data-linenos);float:left;left:-1.1764705882em;margin-left:-1.1764705882em;margin-right:1.1764705882em;padding-left:1.1764705882em;position:sticky;-webkit-user-select:none;user-select:none;z-index:3}.highlight code a[id]{position:absolute;visibility:hidden}.highlight code[data-md-copying] .hll{display:contents}.highlight code[data-md-copying] .md-annotation{display:none}.highlighttable{display:flow-root}.highlighttable tbody,.highlighttable td{display:block;padding:0}.highlighttable tr{display:flex}.highlighttable pre{margin:0}.highlighttable th.filename{flex-grow:1;padding:0;text-align:left}.highlighttable th.filename span.filename{margin-top:0}.highlighttable .linenos{background-color:var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-top-left-radius:.1rem;font-size:.85em;padding:.7720588235em 0 .7720588235em 1.1764705882em;-webkit-user-select:none;user-select:none}.highlighttable .linenodiv{box-shadow:-.05rem 0 var(--md-default-fg-color--lightest) inset;padding-right:.5882352941em}.highlighttable .linenodiv pre{color:var(--md-default-fg-color--light);text-align:right}.highlighttable .code{flex:1;min-width:0}.linenodiv a{color:inherit}.md-typeset .highlighttable{direction:ltr;margin:1em 0}.md-typeset .highlighttable>tbody>tr>.code>div>pre>code{border-bottom-left-radius:0;border-top-left-radius:0}.md-typeset .highlight+.result{border:.05rem solid var(--md-code-bg-color);border-bottom-left-radius:.1rem;border-bottom-right-radius:.1rem;border-top-width:.1rem;margin-top:-1.125em;overflow:visible;padding:0 1em}.md-typeset .highlight+.result:after{clear:both;content:"";display:block}@media screen and (max-width:44.984375em){.md-content__inner>.highlight{margin:1em -.8rem}.md-content__inner>.highlight>.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.code>div>pre>code,.md-content__inner>.highlight>.highlighttable>tbody>tr>.filename span.filename,.md-content__inner>.highlight>.highlighttable>tbody>tr>.linenos,.md-content__inner>.highlight>pre>code{border-radius:0}.md-content__inner>.highlight+.result{border-left-width:0;border-radius:0;border-right-width:0;margin-left:-.8rem;margin-right:-.8rem}}.md-typeset .keys kbd:after,.md-typeset .keys kbd:before{-moz-osx-font-smoothing:initial;-webkit-font-smoothing:initial;color:inherit;margin:0;position:relative}.md-typeset .keys span{color:var(--md-default-fg-color--light);padding:0 .2em}.md-typeset .keys .key-alt:before,.md-typeset .keys .key-left-alt:before,.md-typeset .keys .key-right-alt:before{content:"โŽ‡";padding-right:.4em}.md-typeset .keys .key-command:before,.md-typeset .keys .key-left-command:before,.md-typeset .keys .key-right-command:before{content:"โŒ˜";padding-right:.4em}.md-typeset .keys .key-control:before,.md-typeset .keys .key-left-control:before,.md-typeset .keys .key-right-control:before{content:"โŒƒ";padding-right:.4em}.md-typeset .keys .key-left-meta:before,.md-typeset .keys .key-meta:before,.md-typeset .keys .key-right-meta:before{content:"โ—†";padding-right:.4em}.md-typeset .keys .key-left-option:before,.md-typeset .keys .key-option:before,.md-typeset .keys .key-right-option:before{content:"โŒฅ";padding-right:.4em}.md-typeset .keys .key-left-shift:before,.md-typeset .keys .key-right-shift:before,.md-typeset .keys .key-shift:before{content:"โ‡ง";padding-right:.4em}.md-typeset .keys .key-left-super:before,.md-typeset .keys .key-right-super:before,.md-typeset .keys .key-super:before{content:"โ–";padding-right:.4em}.md-typeset .keys .key-left-windows:before,.md-typeset .keys .key-right-windows:before,.md-typeset .keys .key-windows:before{content:"โŠž";padding-right:.4em}.md-typeset .keys .key-arrow-down:before{content:"โ†“";padding-right:.4em}.md-typeset .keys .key-arrow-left:before{content:"โ†";padding-right:.4em}.md-typeset .keys .key-arrow-right:before{content:"โ†’";padding-right:.4em}.md-typeset .keys .key-arrow-up:before{content:"โ†‘";padding-right:.4em}.md-typeset .keys .key-backspace:before{content:"โŒซ";padding-right:.4em}.md-typeset .keys .key-backtab:before{content:"โ‡ค";padding-right:.4em}.md-typeset .keys .key-caps-lock:before{content:"โ‡ช";padding-right:.4em}.md-typeset .keys .key-clear:before{content:"โŒง";padding-right:.4em}.md-typeset .keys .key-context-menu:before{content:"โ˜ฐ";padding-right:.4em}.md-typeset .keys .key-delete:before{content:"โŒฆ";padding-right:.4em}.md-typeset .keys .key-eject:before{content:"โ";padding-right:.4em}.md-typeset .keys .key-end:before{content:"โค“";padding-right:.4em}.md-typeset .keys .key-escape:before{content:"โŽ‹";padding-right:.4em}.md-typeset .keys .key-home:before{content:"โค’";padding-right:.4em}.md-typeset .keys .key-insert:before{content:"โŽ€";padding-right:.4em}.md-typeset .keys .key-page-down:before{content:"โ‡Ÿ";padding-right:.4em}.md-typeset .keys .key-page-up:before{content:"โ‡ž";padding-right:.4em}.md-typeset .keys .key-print-screen:before{content:"โŽ™";padding-right:.4em}.md-typeset .keys .key-tab:after{content:"โ‡ฅ";padding-left:.4em}.md-typeset .keys .key-num-enter:after{content:"โŒค";padding-left:.4em}.md-typeset .keys .key-enter:after{content:"โŽ";padding-left:.4em}:root{--md-tabbed-icon--prev:url('data:image/svg+xml;charset=utf-8,');--md-tabbed-icon--next:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .tabbed-set{border-radius:.1rem;display:flex;flex-flow:column wrap;margin:1em 0;position:relative}.md-typeset .tabbed-set>input{height:0;opacity:0;position:absolute;width:0}.md-typeset .tabbed-set>input:target{--md-scroll-offset:0.625em}.md-typeset .tabbed-set>input.focus-visible~.tabbed-labels:before{background-color:var(--md-accent-fg-color)}.md-typeset .tabbed-labels{-ms-overflow-style:none;box-shadow:0 -.05rem var(--md-default-fg-color--lightest) inset;display:flex;max-width:100%;overflow:auto;scrollbar-width:none}@media print{.md-typeset .tabbed-labels{display:contents}}@media screen{.js .md-typeset .tabbed-labels{position:relative}.js .md-typeset .tabbed-labels:before{background:var(--md-default-fg-color);bottom:0;content:"";display:block;height:2px;left:0;position:absolute;transform:translateX(var(--md-indicator-x));transition:width 225ms,background-color .25s,transform .25s;transition-timing-function:cubic-bezier(.4,0,.2,1);width:var(--md-indicator-width)}}.md-typeset .tabbed-labels::-webkit-scrollbar{display:none}.md-typeset .tabbed-labels>label{border-bottom:.1rem solid #0000;border-radius:.1rem .1rem 0 0;color:var(--md-default-fg-color--light);cursor:pointer;flex-shrink:0;font-size:.64rem;font-weight:700;padding:.78125em 1.25em .625em;scroll-margin-inline-start:1rem;transition:background-color .25s,color .25s;white-space:nowrap;width:auto}@media print{.md-typeset .tabbed-labels>label:first-child{order:1}.md-typeset .tabbed-labels>label:nth-child(2){order:2}.md-typeset .tabbed-labels>label:nth-child(3){order:3}.md-typeset .tabbed-labels>label:nth-child(4){order:4}.md-typeset .tabbed-labels>label:nth-child(5){order:5}.md-typeset .tabbed-labels>label:nth-child(6){order:6}.md-typeset .tabbed-labels>label:nth-child(7){order:7}.md-typeset .tabbed-labels>label:nth-child(8){order:8}.md-typeset .tabbed-labels>label:nth-child(9){order:9}.md-typeset .tabbed-labels>label:nth-child(10){order:10}.md-typeset .tabbed-labels>label:nth-child(11){order:11}.md-typeset .tabbed-labels>label:nth-child(12){order:12}.md-typeset .tabbed-labels>label:nth-child(13){order:13}.md-typeset .tabbed-labels>label:nth-child(14){order:14}.md-typeset .tabbed-labels>label:nth-child(15){order:15}.md-typeset .tabbed-labels>label:nth-child(16){order:16}.md-typeset .tabbed-labels>label:nth-child(17){order:17}.md-typeset .tabbed-labels>label:nth-child(18){order:18}.md-typeset .tabbed-labels>label:nth-child(19){order:19}.md-typeset .tabbed-labels>label:nth-child(20){order:20}}.md-typeset .tabbed-labels>label:hover{color:var(--md-default-fg-color)}.md-typeset .tabbed-content{width:100%}@media print{.md-typeset .tabbed-content{display:contents}}.md-typeset .tabbed-block{display:none}@media print{.md-typeset .tabbed-block{display:block}.md-typeset .tabbed-block:first-child{order:1}.md-typeset .tabbed-block:nth-child(2){order:2}.md-typeset .tabbed-block:nth-child(3){order:3}.md-typeset .tabbed-block:nth-child(4){order:4}.md-typeset .tabbed-block:nth-child(5){order:5}.md-typeset .tabbed-block:nth-child(6){order:6}.md-typeset .tabbed-block:nth-child(7){order:7}.md-typeset .tabbed-block:nth-child(8){order:8}.md-typeset .tabbed-block:nth-child(9){order:9}.md-typeset .tabbed-block:nth-child(10){order:10}.md-typeset .tabbed-block:nth-child(11){order:11}.md-typeset .tabbed-block:nth-child(12){order:12}.md-typeset .tabbed-block:nth-child(13){order:13}.md-typeset .tabbed-block:nth-child(14){order:14}.md-typeset .tabbed-block:nth-child(15){order:15}.md-typeset .tabbed-block:nth-child(16){order:16}.md-typeset .tabbed-block:nth-child(17){order:17}.md-typeset .tabbed-block:nth-child(18){order:18}.md-typeset .tabbed-block:nth-child(19){order:19}.md-typeset .tabbed-block:nth-child(20){order:20}}.md-typeset .tabbed-block>.highlight:first-child>pre,.md-typeset .tabbed-block>pre:first-child{margin:0}.md-typeset .tabbed-block>.highlight:first-child>pre>code,.md-typeset .tabbed-block>pre:first-child>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child>.filename{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable{margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.filename span.filename,.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.linenos{border-top-left-radius:0;border-top-right-radius:0;margin:0}.md-typeset .tabbed-block>.highlight:first-child>.highlighttable>tbody>tr>.code>div>pre>code{border-top-left-radius:0;border-top-right-radius:0}.md-typeset .tabbed-block>.highlight:first-child+.result{margin-top:-.125em}.md-typeset .tabbed-block>.tabbed-set{margin:0}.md-typeset .tabbed-button{align-self:center;border-radius:100%;color:var(--md-default-fg-color--light);cursor:pointer;display:block;height:.9rem;margin-top:.1rem;pointer-events:auto;transition:background-color .25s;width:.9rem}.md-typeset .tabbed-button:hover{background-color:var(--md-accent-fg-color--transparent);color:var(--md-accent-fg-color)}.md-typeset .tabbed-button:after{background-color:currentcolor;content:"";display:block;height:100%;-webkit-mask-image:var(--md-tabbed-icon--prev);mask-image:var(--md-tabbed-icon--prev);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;transition:background-color .25s,transform .25s;width:100%}.md-typeset .tabbed-control{background:linear-gradient(to right,var(--md-default-bg-color) 60%,#0000);display:flex;height:1.9rem;justify-content:start;pointer-events:none;position:absolute;transition:opacity 125ms;width:1.2rem}[dir=rtl] .md-typeset .tabbed-control{transform:rotate(180deg)}.md-typeset .tabbed-control[hidden]{opacity:0}.md-typeset .tabbed-control--next{background:linear-gradient(to left,var(--md-default-bg-color) 60%,#0000);justify-content:end;right:0}.md-typeset .tabbed-control--next .tabbed-button:after{-webkit-mask-image:var(--md-tabbed-icon--next);mask-image:var(--md-tabbed-icon--next)}@media screen and (max-width:44.984375em){[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels{padding-right:.8rem}.md-content__inner>.tabbed-set .tabbed-labels{margin:0 -.8rem;max-width:100vw;scroll-padding-inline-start:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels:after{padding-left:.8rem}.md-content__inner>.tabbed-set .tabbed-labels:after{content:""}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-left:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{padding-right:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-left:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{margin-right:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--prev{width:2rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-right:.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{padding-left:.8rem}[dir=ltr] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-right:-.8rem}[dir=rtl] .md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{margin-left:-.8rem}.md-content__inner>.tabbed-set .tabbed-labels~.tabbed-control--next{width:2rem}}@media screen{.md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){color:var(--md-default-fg-color)}.md-typeset .no-js .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.md-typeset .no-js .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.md-typeset .no-js .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.md-typeset .no-js .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.md-typeset .no-js .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.md-typeset .no-js .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.md-typeset .no-js .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.md-typeset .no-js .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.md-typeset .no-js .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.md-typeset .no-js .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.md-typeset .no-js .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.md-typeset .no-js .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.md-typeset .no-js .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.md-typeset .no-js .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.md-typeset .no-js .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.md-typeset .no-js .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.md-typeset .no-js .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.md-typeset .no-js .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.md-typeset .no-js .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.md-typeset .no-js .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9),.no-js .md-typeset .tabbed-set>input:first-child:checked~.tabbed-labels>:first-child,.no-js .md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-labels>:nth-child(10),.no-js .md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-labels>:nth-child(11),.no-js .md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-labels>:nth-child(12),.no-js .md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-labels>:nth-child(13),.no-js .md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-labels>:nth-child(14),.no-js .md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-labels>:nth-child(15),.no-js .md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-labels>:nth-child(16),.no-js .md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-labels>:nth-child(17),.no-js .md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-labels>:nth-child(18),.no-js .md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-labels>:nth-child(19),.no-js .md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-labels>:nth-child(2),.no-js .md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-labels>:nth-child(20),.no-js .md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-labels>:nth-child(3),.no-js .md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-labels>:nth-child(4),.no-js .md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-labels>:nth-child(5),.no-js .md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-labels>:nth-child(6),.no-js .md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-labels>:nth-child(7),.no-js .md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-labels>:nth-child(8),.no-js .md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-labels>:nth-child(9){border-color:var(--md-default-fg-color)}}.md-typeset .tabbed-set>input:first-child.focus-visible~.tabbed-labels>:first-child,.md-typeset .tabbed-set>input:nth-child(10).focus-visible~.tabbed-labels>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11).focus-visible~.tabbed-labels>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12).focus-visible~.tabbed-labels>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13).focus-visible~.tabbed-labels>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14).focus-visible~.tabbed-labels>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15).focus-visible~.tabbed-labels>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16).focus-visible~.tabbed-labels>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17).focus-visible~.tabbed-labels>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18).focus-visible~.tabbed-labels>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19).focus-visible~.tabbed-labels>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2).focus-visible~.tabbed-labels>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20).focus-visible~.tabbed-labels>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3).focus-visible~.tabbed-labels>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4).focus-visible~.tabbed-labels>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5).focus-visible~.tabbed-labels>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6).focus-visible~.tabbed-labels>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7).focus-visible~.tabbed-labels>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8).focus-visible~.tabbed-labels>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9).focus-visible~.tabbed-labels>:nth-child(9){color:var(--md-accent-fg-color)}.md-typeset .tabbed-set>input:first-child:checked~.tabbed-content>:first-child,.md-typeset .tabbed-set>input:nth-child(10):checked~.tabbed-content>:nth-child(10),.md-typeset .tabbed-set>input:nth-child(11):checked~.tabbed-content>:nth-child(11),.md-typeset .tabbed-set>input:nth-child(12):checked~.tabbed-content>:nth-child(12),.md-typeset .tabbed-set>input:nth-child(13):checked~.tabbed-content>:nth-child(13),.md-typeset .tabbed-set>input:nth-child(14):checked~.tabbed-content>:nth-child(14),.md-typeset .tabbed-set>input:nth-child(15):checked~.tabbed-content>:nth-child(15),.md-typeset .tabbed-set>input:nth-child(16):checked~.tabbed-content>:nth-child(16),.md-typeset .tabbed-set>input:nth-child(17):checked~.tabbed-content>:nth-child(17),.md-typeset .tabbed-set>input:nth-child(18):checked~.tabbed-content>:nth-child(18),.md-typeset .tabbed-set>input:nth-child(19):checked~.tabbed-content>:nth-child(19),.md-typeset .tabbed-set>input:nth-child(2):checked~.tabbed-content>:nth-child(2),.md-typeset .tabbed-set>input:nth-child(20):checked~.tabbed-content>:nth-child(20),.md-typeset .tabbed-set>input:nth-child(3):checked~.tabbed-content>:nth-child(3),.md-typeset .tabbed-set>input:nth-child(4):checked~.tabbed-content>:nth-child(4),.md-typeset .tabbed-set>input:nth-child(5):checked~.tabbed-content>:nth-child(5),.md-typeset .tabbed-set>input:nth-child(6):checked~.tabbed-content>:nth-child(6),.md-typeset .tabbed-set>input:nth-child(7):checked~.tabbed-content>:nth-child(7),.md-typeset .tabbed-set>input:nth-child(8):checked~.tabbed-content>:nth-child(8),.md-typeset .tabbed-set>input:nth-child(9):checked~.tabbed-content>:nth-child(9){display:block}:root{--md-tasklist-icon:url('data:image/svg+xml;charset=utf-8,');--md-tasklist-icon--checked:url('data:image/svg+xml;charset=utf-8,')}.md-typeset .task-list-item{list-style-type:none;position:relative}[dir=ltr] .md-typeset .task-list-item [type=checkbox]{left:-2em}[dir=rtl] .md-typeset .task-list-item [type=checkbox]{right:-2em}.md-typeset .task-list-item [type=checkbox]{position:absolute;top:.45em}.md-typeset .task-list-control [type=checkbox]{opacity:0;z-index:-1}[dir=ltr] .md-typeset .task-list-indicator:before{left:-1.5em}[dir=rtl] .md-typeset .task-list-indicator:before{right:-1.5em}.md-typeset .task-list-indicator:before{background-color:var(--md-default-fg-color--lightest);content:"";height:1.25em;-webkit-mask-image:var(--md-tasklist-icon);mask-image:var(--md-tasklist-icon);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain;position:absolute;top:.15em;width:1.25em}.md-typeset [type=checkbox]:checked+.task-list-indicator:before{background-color:#00e676;-webkit-mask-image:var(--md-tasklist-icon--checked);mask-image:var(--md-tasklist-icon--checked)}:root>*{--md-mermaid-font-family:var(--md-text-font-family),sans-serif;--md-mermaid-edge-color:var(--md-code-fg-color);--md-mermaid-node-bg-color:var(--md-accent-fg-color--transparent);--md-mermaid-node-fg-color:var(--md-accent-fg-color);--md-mermaid-label-bg-color:var(--md-default-bg-color);--md-mermaid-label-fg-color:var(--md-code-fg-color);--md-mermaid-sequence-actor-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actor-fg-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-actor-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-actor-line-color:var(--md-default-fg-color--lighter);--md-mermaid-sequence-actorman-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-actorman-line-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-box-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-box-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-label-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-label-fg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-loop-bg-color:var(--md-mermaid-node-bg-color);--md-mermaid-sequence-loop-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-loop-border-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-message-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-message-line-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-bg-color:var(--md-mermaid-label-bg-color);--md-mermaid-sequence-note-fg-color:var(--md-mermaid-edge-color);--md-mermaid-sequence-note-border-color:var(--md-mermaid-label-fg-color);--md-mermaid-sequence-number-bg-color:var(--md-mermaid-node-fg-color);--md-mermaid-sequence-number-fg-color:var(--md-accent-bg-color)}.mermaid{line-height:normal;margin:1em 0}@media screen and (min-width:45em){[dir=ltr] .md-typeset .inline{float:left}[dir=rtl] .md-typeset .inline{float:right}[dir=ltr] .md-typeset .inline{margin-right:.8rem}[dir=rtl] .md-typeset .inline{margin-left:.8rem}.md-typeset .inline{margin-bottom:.8rem;margin-top:0;width:11.7rem}[dir=ltr] .md-typeset .inline.end{float:right}[dir=rtl] .md-typeset .inline.end{float:left}[dir=ltr] .md-typeset .inline.end{margin-left:.8rem;margin-right:0}[dir=rtl] .md-typeset .inline.end{margin-left:0;margin-right:.8rem}} \ No newline at end of file diff --git a/assets/stylesheets/main.4b4a2bd9.min.css.map b/assets/stylesheets/main.4b4a2bd9.min.css.map new file mode 100644 index 000000000..801360fd4 --- /dev/null +++ b/assets/stylesheets/main.4b4a2bd9.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["src/templates/assets/stylesheets/main/components/_meta.scss","../../../../src/templates/assets/stylesheets/main.scss","src/templates/assets/stylesheets/main/_resets.scss","src/templates/assets/stylesheets/main/_colors.scss","src/templates/assets/stylesheets/main/_icons.scss","src/templates/assets/stylesheets/main/_typeset.scss","src/templates/assets/stylesheets/utilities/_break.scss","src/templates/assets/stylesheets/main/components/_author.scss","src/templates/assets/stylesheets/main/components/_banner.scss","src/templates/assets/stylesheets/main/components/_base.scss","src/templates/assets/stylesheets/main/components/_clipboard.scss","src/templates/assets/stylesheets/main/components/_consent.scss","src/templates/assets/stylesheets/main/components/_content.scss","src/templates/assets/stylesheets/main/components/_dialog.scss","src/templates/assets/stylesheets/main/components/_feedback.scss","src/templates/assets/stylesheets/main/components/_footer.scss","src/templates/assets/stylesheets/main/components/_form.scss","src/templates/assets/stylesheets/main/components/_header.scss","node_modules/material-design-color/material-color.scss","src/templates/assets/stylesheets/main/components/_nav.scss","src/templates/assets/stylesheets/main/components/_pagination.scss","src/templates/assets/stylesheets/main/components/_post.scss","src/templates/assets/stylesheets/main/components/_progress.scss","src/templates/assets/stylesheets/main/components/_search.scss","src/templates/assets/stylesheets/main/components/_select.scss","src/templates/assets/stylesheets/main/components/_sidebar.scss","src/templates/assets/stylesheets/main/components/_source.scss","src/templates/assets/stylesheets/main/components/_status.scss","src/templates/assets/stylesheets/main/components/_tabs.scss","src/templates/assets/stylesheets/main/components/_tag.scss","src/templates/assets/stylesheets/main/components/_tooltip.scss","src/templates/assets/stylesheets/main/components/_top.scss","src/templates/assets/stylesheets/main/components/_version.scss","src/templates/assets/stylesheets/main/extensions/markdown/_admonition.scss","src/templates/assets/stylesheets/main/extensions/markdown/_footnotes.scss","src/templates/assets/stylesheets/main/extensions/markdown/_toc.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_arithmatex.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_critic.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_details.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_emoji.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_highlight.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_keys.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_tabbed.scss","src/templates/assets/stylesheets/main/extensions/pymdownx/_tasklist.scss","src/templates/assets/stylesheets/main/integrations/_mermaid.scss","src/templates/assets/stylesheets/main/_modifiers.scss"],"names":[],"mappings":"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oBhCoxGJ,CgCjxGI,sFACE,gChCmxGN,CgC9wGE,oEACE,0BhCixGJ,CgC9wGI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ChCgxGN,CgC5wGI,gFACE,ahC8wGN,CgCnyGE,4DACE,oBhCsyGJ,CgCnyGI,sFACE,gChCqyGN,CgChyGE,oEACE,0BhCmyGJ,CgChyGI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ChCkyGN,CgC9xGI,gFACE,ahCgyGN,CgCrzGE,0DACE,oBhCwzGJ,CgCrzGI,oFACE,gChCuzGN,CgClzGE,kEACE,0BhCqzGJ,CgClzGI,gFACE,wBAlBG,CAmBH,oDAAA,CAAA,4ChCozGN,CgChzGI,8EACE,ahCkzGN,CgCv0GE,oDACE,oBhC00GJ,CgCv0GI,8EACE,gChCy0GN,CgCp0GE,4DACE,0BhCu0GJ,CgCp0GI,0EACE,wBAlBG,CAmBH,iDAAA,CAAA,yChCs0GN,CgCl0GI,wEACE,ahCo0GN,CgCz1GE,4DACE,oBhC41GJ,CgCz1GI,sFACE,gChC21GN,CgCt1GE,oEACE,0BhCy1GJ,CgCt1GI,kFACE,wBAlBG,CAmBH,qDAAA,CAAA,6ChCw1GN,CgCp1GI,gFACE,ahCs1GN,CgC32GE,wDACE,oBhC82GJ,CgC32GI,kFACE,gChC62GN,CgCx2GE,gEACE,0BhC22GJ,CgCx2GI,8EACE,wBAlBG,CAmBH,mDAAA,CAAA,2ChC02GN,CgCt2GI,4EACE,ahCw2GN,CiC5gHA,MACE,wMjC+gHF,CiCtgHE,sBAEE,uCAAA,CADA,gBjC0gHJ,CiCtgHI,mCACE,ajCwgHN,CiCzgHI,mCACE,cjCwgHN,CiCpgHM,4BACE,sBjCsgHR,CiCngHQ,mCACE,gCjCqgHV,CiCjgHQ,2DACE,SAAA,CAEA,uBAAA,CADA,ejCogHV,CiC//GQ,yGACE,SAAA,CACA,uBjCigHV,CiC7/GQ,yCACE,YjC+/GV,CiCx/GE,0BACE,eAAA,CACA,ejC0/GJ,CiCv/GI,+BACE,oBjCy/GN,CiCp/GE,gDACE,YjCs/GJ,CiCl/GE,8BAIE,+BAAA,CAHA,oBAAA,CAEA,WAAA,CAGA,SAAA,CAKA,4BAAA,CAJ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","file":"main.css"} \ No newline at end of file diff --git a/autore/index.html b/autore/index.html index 09ab65b03..8df205010 100644 --- a/autore/index.html +++ b/autore/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/2023/09/10/hfcqgis-e-la-sezione-blog/index.html b/blog/2023/09/10/hfcqgis-e-la-sezione-blog/index.html index 91c11e66a..de3f99f0b 100644 --- a/blog/2023/09/10/hfcqgis-e-la-sezione-blog/index.html +++ b/blog/2023/09/10/hfcqgis-e-la-sezione-blog/index.html @@ -24,7 +24,7 @@ - + @@ -32,7 +32,7 @@ - + diff --git a/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/index.html b/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/index.html index cf7b2ba1a..aa0b621ac 100644 --- a/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/index.html +++ b/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/index.html b/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/index.html index d5e282776..f9cf01baf 100644 --- a/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/index.html +++ b/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/2023/09/14/array-nel-field-calc/index.html b/blog/2023/09/14/array-nel-field-calc/index.html index 23118c52c..22d458e05 100644 --- a/blog/2023/09/14/array-nel-field-calc/index.html +++ b/blog/2023/09/14/array-nel-field-calc/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/index.html b/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/index.html index 8d8b0ea1e..b4d4e4bc2 100644 --- a/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/index.html +++ b/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/2023/09/18/le-variabili-in-qgis/index.html b/blog/2023/09/18/le-variabili-in-qgis/index.html index 6a328f798..ed31c4f84 100644 --- a/blog/2023/09/18/le-variabili-in-qgis/index.html +++ b/blog/2023/09/18/le-variabili-in-qgis/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/2023/09/25/help-in-linea/index.html b/blog/2023/09/25/help-in-linea/index.html index ad9db1ba3..784e166b9 100644 --- a/blog/2023/09/25/help-in-linea/index.html +++ b/blog/2023/09/25/help-in-linea/index.html @@ -24,7 +24,7 @@ - + @@ -32,7 +32,7 @@ - + diff --git a/blog/archive/2023/index.html b/blog/archive/2023/index.html index 1e6976650..b8b68d85c 100644 --- a/blog/archive/2023/index.html +++ b/blog/archive/2023/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/array/index.html b/blog/category/array/index.html index 026054644..31600f150 100644 --- a/blog/category/array/index.html +++ b/blog/category/array/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/custom/index.html b/blog/category/custom/index.html index e49eb8737..a1aca2dab 100644 --- a/blog/category/custom/index.html +++ b/blog/category/custom/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/espressioni/index.html b/blog/category/espressioni/index.html index a905f1b40..42cd965de 100644 --- a/blog/category/espressioni/index.html +++ b/blog/category/espressioni/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/help/index.html b/blog/category/help/index.html index 24c2bc606..7a433b8eb 100644 --- a/blog/category/help/index.html +++ b/blog/category/help/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/misure/index.html b/blog/category/misure/index.html index 6ffb8e6ed..dd5c80996 100644 --- a/blog/category/misure/index.html +++ b/blog/category/misure/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/news/index.html b/blog/category/news/index.html index e6b3bfa07..a7946bb8c 100644 --- a/blog/category/news/index.html +++ b/blog/category/news/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/progetto/index.html b/blog/category/progetto/index.html index dda1e9a2b..d4a2b00da 100644 --- a/blog/category/progetto/index.html +++ b/blog/category/progetto/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/category/variabili/index.html b/blog/category/variabili/index.html index 2d490ebe3..9e751a978 100644 --- a/blog/category/variabili/index.html +++ b/blog/category/variabili/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/blog/index.html b/blog/index.html index 18bc5ac9b..66a0bed8e 100644 --- a/blog/index.html +++ b/blog/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/calcolatore_campi/concetti/index.html b/calcolatore_campi/concetti/index.html index 0c2b31c04..880083b23 100644 --- a/calcolatore_campi/concetti/index.html +++ b/calcolatore_campi/concetti/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/calcolatore_campi/editor_delle_funzioni/index.html b/calcolatore_campi/editor_delle_funzioni/index.html index f94d02c84..9e95185a7 100644 --- a/calcolatore_campi/editor_delle_funzioni/index.html +++ b/calcolatore_campi/editor_delle_funzioni/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/calcolatore_campi/field_calc/index.html b/calcolatore_campi/field_calc/index.html index 4a7ba2db8..65c676528 100644 --- a/calcolatore_campi/field_calc/index.html +++ b/calcolatore_campi/field_calc/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/calcolatore_campi/field_calc_processing/index.html b/calcolatore_campi/field_calc_processing/index.html index d3eb2648e..15d8eaa28 100644 --- a/calcolatore_campi/field_calc_processing/index.html +++ b/calcolatore_campi/field_calc_processing/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/calcolatore_campi/gruppo_espressioni_utente/index.html b/calcolatore_campi/gruppo_espressioni_utente/index.html index ba2900082..a92a7ff38 100644 --- a/calcolatore_campi/gruppo_espressioni_utente/index.html +++ b/calcolatore_campi/gruppo_espressioni_utente/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/calcolatore_campi/interfaccia/index.html b/calcolatore_campi/interfaccia/index.html index 3033b8aef..5c29db243 100644 --- a/calcolatore_campi/interfaccia/index.html +++ b/calcolatore_campi/interfaccia/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/calcolatore_campi/operatori/index.html b/calcolatore_campi/operatori/index.html index 43a7fff22..da48af12a 100644 --- a/calcolatore_campi/operatori/index.html +++ b/calcolatore_campi/operatori/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/changelog/index.html b/changelog/index.html index 2e6c79bf9..715194054 100644 --- a/changelog/index.html +++ b/changelog/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + @@ -4837,6 +4837,10 @@

ChangelogQGIS 3.34 + +30/10/2023 +Aggiornata la funzione array_foreach, introdotta la variabile @counter + diff --git a/classici_problemi_gis/index.html b/classici_problemi_gis/index.html index 07c8bb844..ec8c02032 100644 --- a/classici_problemi_gis/index.html +++ b/classici_problemi_gis/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/contributing/index.html b/contributing/index.html index cb2442d4d..141c28c70 100644 --- a/contributing/index.html +++ b/contributing/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/corso_formazione/corso_di_formazione/index.html b/corso_formazione/corso_di_formazione/index.html index 36b47e85e..5a276900b 100644 --- a/corso_formazione/corso_di_formazione/index.html +++ b/corso_formazione/corso_di_formazione/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/corso_formazione/corso_di_formazione_avanzato/index.html b/corso_formazione/corso_di_formazione_avanzato/index.html index cd517baf8..89a226eae 100644 --- a/corso_formazione/corso_di_formazione_avanzato/index.html +++ b/corso_formazione/corso_di_formazione_avanzato/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/disclaimer/index.html b/disclaimer/index.html index aa59957a0..3e70ca78c 100644 --- a/disclaimer/index.html +++ b/disclaimer/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/ID_univoco_gruppi_consecutivi/index.html b/esempi/ID_univoco_gruppi_consecutivi/index.html index 36948cbc1..d78e30fb5 100644 --- a/esempi/ID_univoco_gruppi_consecutivi/index.html +++ b/esempi/ID_univoco_gruppi_consecutivi/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/add_campo_sum_cumulativo/index.html b/esempi/add_campo_sum_cumulativo/index.html index 6b55c1133..c06096669 100644 --- a/esempi/add_campo_sum_cumulativo/index.html +++ b/esempi/add_campo_sum_cumulativo/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/add_campo_virtuale/index.html b/esempi/add_campo_virtuale/index.html index cbcf386b2..de69194d8 100644 --- a/esempi/add_campo_virtuale/index.html +++ b/esempi/add_campo_virtuale/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/add_col_area/index.html b/esempi/add_col_area/index.html index f45295ad7..f872d9331 100644 --- a/esempi/add_col_area/index.html +++ b/esempi/add_col_area/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/add_col_z/index.html b/esempi/add_col_z/index.html index 7e9674717..4461e5f05 100644 --- a/esempi/add_col_z/index.html +++ b/esempi/add_col_z/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/add_coord_xy/index.html b/esempi/add_coord_xy/index.html index 9a70550e0..960fb8789 100644 --- a/esempi/add_coord_xy/index.html +++ b/esempi/add_coord_xy/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/agg_geom/index.html b/esempi/agg_geom/index.html index ab5096994..0b3e05cba 100644 --- a/esempi/agg_geom/index.html +++ b/esempi/agg_geom/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/aggiungere_punto_a_linea/index.html b/esempi/aggiungere_punto_a_linea/index.html index 5e5928915..ab01853a5 100644 --- a/esempi/aggiungere_punto_a_linea/index.html +++ b/esempi/aggiungere_punto_a_linea/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/aggregare_con_sr_differenti/index.html b/esempi/aggregare_con_sr_differenti/index.html index f8eb8a581..fa21df66f 100644 --- a/esempi/aggregare_con_sr_differenti/index.html +++ b/esempi/aggregare_con_sr_differenti/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/aggregare_elementi_contigui/index.html b/esempi/aggregare_elementi_contigui/index.html index 6aaa6ec54..73271cad0 100644 --- a/esempi/aggregare_elementi_contigui/index.html +++ b/esempi/aggregare_elementi_contigui/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/aggregare_valori_tabella/index.html b/esempi/aggregare_valori_tabella/index.html index 9ce41de9d..780e73f81 100644 --- a/esempi/aggregare_valori_tabella/index.html +++ b/esempi/aggregare_valori_tabella/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/array_natural_sorting/index.html b/esempi/array_natural_sorting/index.html index cf98f9719..954aed996 100644 --- a/esempi/array_natural_sorting/index.html +++ b/esempi/array_natural_sorting/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/assegnare_cat_prevalente/index.html b/esempi/assegnare_cat_prevalente/index.html index 7181561a6..0cd727952 100644 --- a/esempi/assegnare_cat_prevalente/index.html +++ b/esempi/assegnare_cat_prevalente/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/atlas_righe_verticale/index.html b/esempi/atlas_righe_verticale/index.html index bf448ecb4..ac688f427 100644 --- a/esempi/atlas_righe_verticale/index.html +++ b/esempi/atlas_righe_verticale/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/attributi_da_layer_vicini/index.html b/esempi/attributi_da_layer_vicini/index.html index 2df2310d7..ef4b6feb1 100644 --- a/esempi/attributi_da_layer_vicini/index.html +++ b/esempi/attributi_da_layer_vicini/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/esempi/calcolo_area_poligoni_reticolo/index.html b/esempi/calcolo_area_poligoni_reticolo/index.html index 84b371792..64cb32efc 100644 --- a/esempi/calcolo_area_poligoni_reticolo/index.html +++ b/esempi/calcolo_area_poligoni_reticolo/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/calcolo_incrementi_giornalieri/index.html b/esempi/calcolo_incrementi_giornalieri/index.html index 2fb9f944f..5fb3f1f0d 100644 --- a/esempi/calcolo_incrementi_giornalieri/index.html +++ b/esempi/calcolo_incrementi_giornalieri/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/campo_coord_in_lat_lon/index.html b/esempi/campo_coord_in_lat_lon/index.html index 286fdb2bd..19b3c5cca 100644 --- a/esempi/campo_coord_in_lat_lon/index.html +++ b/esempi/campo_coord_in_lat_lon/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/centroid_linee/index.html b/esempi/centroid_linee/index.html index bfd5cfb2a..e0f745e6b 100644 --- a/esempi/centroid_linee/index.html +++ b/esempi/centroid_linee/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/classificazione_specie/index.html b/esempi/classificazione_specie/index.html index 6809bfb1b..9d549cb69 100644 --- a/esempi/classificazione_specie/index.html +++ b/esempi/classificazione_specie/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/colorare_distanza_da_punto/index.html b/esempi/colorare_distanza_da_punto/index.html index 7070df887..99145d457 100644 --- a/esempi/colorare_distanza_da_punto/index.html +++ b/esempi/colorare_distanza_da_punto/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/esempi/confrontare_campi_tabella/index.html b/esempi/confrontare_campi_tabella/index.html index 4240196a3..1facbff7f 100644 --- a/esempi/confrontare_campi_tabella/index.html +++ b/esempi/confrontare_campi_tabella/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/conta_punti_in_poligono/index.html b/esempi/conta_punti_in_poligono/index.html index 608bde957..067c1af4f 100644 --- a/esempi/conta_punti_in_poligono/index.html +++ b/esempi/conta_punti_in_poligono/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/conta_punti_nel_poligono_per_data/index.html b/esempi/conta_punti_nel_poligono_per_data/index.html index e2e338115..c3a9ae6d9 100644 --- a/esempi/conta_punti_nel_poligono_per_data/index.html +++ b/esempi/conta_punti_nel_poligono_per_data/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/conteggio/index.html b/esempi/conteggio/index.html index acba634b2..73591a53f 100644 --- a/esempi/conteggio/index.html +++ b/esempi/conteggio/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/conteggio_caratteri_diversi/index.html b/esempi/conteggio_caratteri_diversi/index.html index 710fd0d3d..dba62f56f 100644 --- a/esempi/conteggio_caratteri_diversi/index.html +++ b/esempi/conteggio_caratteri_diversi/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/conversione/index.html b/esempi/conversione/index.html index 93e9a3bc3..50b7d8c9a 100644 --- a/esempi/conversione/index.html +++ b/esempi/conversione/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/core_area/index.html b/esempi/core_area/index.html index d656d2eab..8b8780afb 100644 --- a/esempi/core_area/index.html +++ b/esempi/core_area/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/cronometro/index.html b/esempi/cronometro/index.html index 34204afe1..e7086c35f 100644 --- a/esempi/cronometro/index.html +++ b/esempi/cronometro/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/decimali_come_apice/index.html b/esempi/decimali_come_apice/index.html index eb9998e02..e2a1b2429 100644 --- a/esempi/decimali_come_apice/index.html +++ b/esempi/decimali_come_apice/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/distanze_progressive_chilometriche/index.html b/esempi/distanze_progressive_chilometriche/index.html index d586441b9..639c75e0d 100644 --- a/esempi/distanze_progressive_chilometriche/index.html +++ b/esempi/distanze_progressive_chilometriche/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/drilldown_form_multiple/index.html b/esempi/drilldown_form_multiple/index.html index 1edf2389e..dd9181cae 100644 --- a/esempi/drilldown_form_multiple/index.html +++ b/esempi/drilldown_form_multiple/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/elenco_comuni_attraversati_fiume/index.html b/esempi/elenco_comuni_attraversati_fiume/index.html index 00e9ed4c9..01fd5b608 100644 --- a/esempi/elenco_comuni_attraversati_fiume/index.html +++ b/esempi/elenco_comuni_attraversati_fiume/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/elenco_ordinato_comuni_attraversati/index.html b/esempi/elenco_ordinato_comuni_attraversati/index.html index d96b9a3de..b6381a230 100644 --- a/esempi/elenco_ordinato_comuni_attraversati/index.html +++ b/esempi/elenco_ordinato_comuni_attraversati/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/eliminare_duplicati_condizione/index.html b/esempi/eliminare_duplicati_condizione/index.html index 20ea4d1c7..359839e45 100644 --- a/esempi/eliminare_duplicati_condizione/index.html +++ b/esempi/eliminare_duplicati_condizione/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/eliminare_testo_tra_parentesi/index.html b/esempi/eliminare_testo_tra_parentesi/index.html index c69c42ea3..01633b035 100644 --- a/esempi/eliminare_testo_tra_parentesi/index.html +++ b/esempi/eliminare_testo_tra_parentesi/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/espressione_regolare/index.html b/esempi/espressione_regolare/index.html index 4bd134ed4..8739c5805 100644 --- a/esempi/espressione_regolare/index.html +++ b/esempi/espressione_regolare/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/estrarre_campo_hstore/index.html b/esempi/estrarre_campo_hstore/index.html index 738c4f92c..10b223dd8 100644 --- a/esempi/estrarre_campo_hstore/index.html +++ b/esempi/estrarre_campo_hstore/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/esempi/estrarre_numeri_iniziali/index.html b/esempi/estrarre_numeri_iniziali/index.html index 2cd25dbb2..42184e7dc 100644 --- a/esempi/estrarre_numeri_iniziali/index.html +++ b/esempi/estrarre_numeri_iniziali/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/etichettare_chiave_valore/index.html b/esempi/etichettare_chiave_valore/index.html index 6c6827c0b..bd9744633 100644 --- a/esempi/etichettare_chiave_valore/index.html +++ b/esempi/etichettare_chiave_valore/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/etichettare_con_apici/index.html b/esempi/etichettare_con_apici/index.html index 3b09a64e9..eb2e8ed0a 100644 --- a/esempi/etichettare_con_apici/index.html +++ b/esempi/etichettare_con_apici/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/etichettare_itinerario_elenco_comuni_attraversati/index.html b/esempi/etichettare_itinerario_elenco_comuni_attraversati/index.html index 18b53b02d..5a620001c 100644 --- a/esempi/etichettare_itinerario_elenco_comuni_attraversati/index.html +++ b/esempi/etichettare_itinerario_elenco_comuni_attraversati/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/etichette/index.html b/esempi/etichette/index.html index ced9a0edc..391b9cc06 100644 --- a/esempi/etichette/index.html +++ b/esempi/etichette/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/etichette_formattate_diversi_stili/index.html b/esempi/etichette_formattate_diversi_stili/index.html index f32bb18ad..1c9f21686 100644 --- a/esempi/etichette_formattate_diversi_stili/index.html +++ b/esempi/etichette_formattate_diversi_stili/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/fill-down/index.html b/esempi/fill-down/index.html index 27e9e37eb..47f9ede16 100644 --- a/esempi/fill-down/index.html +++ b/esempi/fill-down/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/finestra_temporale/index.html b/esempi/finestra_temporale/index.html index 74e0f2af0..e0a11e59e 100644 --- a/esempi/finestra_temporale/index.html +++ b/esempi/finestra_temporale/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/generalizzare_linee/index.html b/esempi/generalizzare_linee/index.html index ae8663ce3..a4d15f0d2 100644 --- a/esempi/generalizzare_linee/index.html +++ b/esempi/generalizzare_linee/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/geometria_vicina_filtro/index.html b/esempi/geometria_vicina_filtro/index.html index b803aa5bb..53b8c5336 100644 --- a/esempi/geometria_vicina_filtro/index.html +++ b/esempi/geometria_vicina_filtro/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/esempi/geometria_vicina_filtro_condizionato/index.html b/esempi/geometria_vicina_filtro_condizionato/index.html index 5d4fb9819..112cf95ba 100644 --- a/esempi/geometria_vicina_filtro_condizionato/index.html +++ b/esempi/geometria_vicina_filtro_condizionato/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/gpkg_blob_immagini/index.html b/esempi/gpkg_blob_immagini/index.html index 388bf0000..0a1cfffa8 100644 --- a/esempi/gpkg_blob_immagini/index.html +++ b/esempi/gpkg_blob_immagini/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/esempi/hub_lines/index.html b/esempi/hub_lines/index.html index 72d9edab9..4b212d968 100644 --- a/esempi/hub_lines/index.html +++ b/esempi/hub_lines/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/lavorare_con_le_ore/index.html b/esempi/lavorare_con_le_ore/index.html index 4b665afba..c7f482264 100644 --- a/esempi/lavorare_con_le_ore/index.html +++ b/esempi/lavorare_con_le_ore/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/layer_vicino/index.html b/esempi/layer_vicino/index.html index aea00d5ad..eb0469d6c 100644 --- a/esempi/layer_vicino/index.html +++ b/esempi/layer_vicino/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/linea_min_distanza/index.html b/esempi/linea_min_distanza/index.html index ae624f267..deadcf4a4 100644 --- a/esempi/linea_min_distanza/index.html +++ b/esempi/linea_min_distanza/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/linea_min_distanza2/index.html b/esempi/linea_min_distanza2/index.html index 703992c66..070bfd7c3 100644 --- a/esempi/linea_min_distanza2/index.html +++ b/esempi/linea_min_distanza2/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/lista_esempi/index.html b/esempi/lista_esempi/index.html index b266e300a..6fc160e98 100644 --- a/esempi/lista_esempi/index.html +++ b/esempi/lista_esempi/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/livello_acqua/index.html b/esempi/livello_acqua/index.html index 15ef99521..3f28d1e59 100644 --- a/esempi/livello_acqua/index.html +++ b/esempi/livello_acqua/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/lunghezze_segmenti_poligono/index.html b/esempi/lunghezze_segmenti_poligono/index.html index 1949d63dd..f358fd64d 100644 --- a/esempi/lunghezze_segmenti_poligono/index.html +++ b/esempi/lunghezze_segmenti_poligono/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/maxValoreCampoNome/index.html b/esempi/maxValoreCampoNome/index.html index 6752a6784..dd8083751 100644 --- a/esempi/maxValoreCampoNome/index.html +++ b/esempi/maxValoreCampoNome/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/media_stdev_tra_campi/index.html b/esempi/media_stdev_tra_campi/index.html index ec8f3bdff..32be1fc0f 100644 --- a/esempi/media_stdev_tra_campi/index.html +++ b/esempi/media_stdev_tra_campi/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/nascondi_etichette/index.html b/esempi/nascondi_etichette/index.html index b31a07a2a..26352d009 100644 --- a/esempi/nascondi_etichette/index.html +++ b/esempi/nascondi_etichette/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/numerazione_poligoni_rel_spaziale/index.html b/esempi/numerazione_poligoni_rel_spaziale/index.html index 1369806ef..306e12aa0 100644 --- a/esempi/numerazione_poligoni_rel_spaziale/index.html +++ b/esempi/numerazione_poligoni_rel_spaziale/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/prendi_attributo_da_elemento_sovrapposto/index.html b/esempi/prendi_attributo_da_elemento_sovrapposto/index.html index bb2822294..839876242 100644 --- a/esempi/prendi_attributo_da_elemento_sovrapposto/index.html +++ b/esempi/prendi_attributo_da_elemento_sovrapposto/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/punti_in_poligoni_categorie/index.html b/esempi/punti_in_poligoni_categorie/index.html index a912f44ce..97874d1c1 100644 --- a/esempi/punti_in_poligoni_categorie/index.html +++ b/esempi/punti_in_poligoni_categorie/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/ricerca_caratteri_speciali/index.html b/esempi/ricerca_caratteri_speciali/index.html index e5aa900db..f81e4ec4c 100644 --- a/esempi/ricerca_caratteri_speciali/index.html +++ b/esempi/ricerca_caratteri_speciali/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/rotazione_pattern/index.html b/esempi/rotazione_pattern/index.html index 37603af52..4c129a623 100644 --- a/esempi/rotazione_pattern/index.html +++ b/esempi/rotazione_pattern/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/rotazione_simbolo_parallelo_linea/index.html b/esempi/rotazione_simbolo_parallelo_linea/index.html index 8d5992897..f0b65daf3 100644 --- a/esempi/rotazione_simbolo_parallelo_linea/index.html +++ b/esempi/rotazione_simbolo_parallelo_linea/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/segmento_minimo_facciata_strada/index.html b/esempi/segmento_minimo_facciata_strada/index.html index fe9eb2b7d..92e8d8b80 100644 --- a/esempi/segmento_minimo_facciata_strada/index.html +++ b/esempi/segmento_minimo_facciata_strada/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/select_duplicate_vertices/index.html b/esempi/select_duplicate_vertices/index.html index ff92eb720..06d33c4e4 100644 --- a/esempi/select_duplicate_vertices/index.html +++ b/esempi/select_duplicate_vertices/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/select_with_aggregate/index.html b/esempi/select_with_aggregate/index.html index 279e7815e..135056583 100644 --- a/esempi/select_with_aggregate/index.html +++ b/esempi/select_with_aggregate/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/selezionare_poligoni_max_area_sovrapposta/index.html b/esempi/selezionare_poligoni_max_area_sovrapposta/index.html index 6bbdb5bac..e3e427189 100644 --- a/esempi/selezionare_poligoni_max_area_sovrapposta/index.html +++ b/esempi/selezionare_poligoni_max_area_sovrapposta/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/selezionare_primi_n_valori/index.html b/esempi/selezionare_primi_n_valori/index.html index 92c3dd563..67a0d85ec 100644 --- a/esempi/selezionare_primi_n_valori/index.html +++ b/esempi/selezionare_primi_n_valori/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/selezionare_primo_record_per_ogni_duplicato/index.html b/esempi/selezionare_primo_record_per_ogni_duplicato/index.html index b58bc4e26..8cab437a5 100644 --- a/esempi/selezionare_primo_record_per_ogni_duplicato/index.html +++ b/esempi/selezionare_primo_record_per_ogni_duplicato/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/selezionare_punti_vicini_punto/index.html b/esempi/selezionare_punti_vicini_punto/index.html index b97b0bb8c..64135ccb9 100644 --- a/esempi/selezionare_punti_vicini_punto/index.html +++ b/esempi/selezionare_punti_vicini_punto/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/selezionare_record_orfani_rel_padrefiglio/index.html b/esempi/selezionare_record_orfani_rel_padrefiglio/index.html index 2832e53ea..053b7a58c 100644 --- a/esempi/selezionare_record_orfani_rel_padrefiglio/index.html +++ b/esempi/selezionare_record_orfani_rel_padrefiglio/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/selezione_ultimo_record_per_data/index.html b/esempi/selezione_ultimo_record_per_data/index.html index 2d4be01f9..0516bb4b5 100644 --- a/esempi/selezione_ultimo_record_per_data/index.html +++ b/esempi/selezione_ultimo_record_per_data/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/somma_lunghezze_nel_poligono/index.html b/esempi/somma_lunghezze_nel_poligono/index.html index 4b4cd3baa..8dac7b23c 100644 --- a/esempi/somma_lunghezze_nel_poligono/index.html +++ b/esempi/somma_lunghezze_nel_poligono/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/spatial_join/index.html b/esempi/spatial_join/index.html index 5ff20626c..57daf69f6 100644 --- a/esempi/spatial_join/index.html +++ b/esempi/spatial_join/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/spatial_join_condizionato/index.html b/esempi/spatial_join_condizionato/index.html index 7b5ae0ec8..2fcb6f1f8 100644 --- a/esempi/spatial_join_condizionato/index.html +++ b/esempi/spatial_join_condizionato/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/spatial_join_condizionato2/index.html b/esempi/spatial_join_condizionato2/index.html index e2ecdf617..10312d6bf 100644 --- a/esempi/spatial_join_condizionato2/index.html +++ b/esempi/spatial_join_condizionato2/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/esempi/sposta_etichetta_linea/index.html b/esempi/sposta_etichetta_linea/index.html index d92cc86e8..0055b6d61 100644 --- a/esempi/sposta_etichetta_linea/index.html +++ b/esempi/sposta_etichetta_linea/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/sposta_punti_dentro_poligoni_per_attributo/index.html b/esempi/sposta_punti_dentro_poligoni_per_attributo/index.html index badf5f7a0..e53493a6b 100644 --- a/esempi/sposta_punti_dentro_poligoni_per_attributo/index.html +++ b/esempi/sposta_punti_dentro_poligoni_per_attributo/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/tema_unico_contorno/index.html b/esempi/tema_unico_contorno/index.html index 796a2ccde..67050fd08 100644 --- a/esempi/tema_unico_contorno/index.html +++ b/esempi/tema_unico_contorno/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/tematizzare/index.html b/esempi/tematizzare/index.html index 189b3e792..bb0c5b7b9 100644 --- a/esempi/tematizzare/index.html +++ b/esempi/tematizzare/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/tracciare_grafico_generatore_geometrie/index.html b/esempi/tracciare_grafico_generatore_geometrie/index.html index 3889f7d15..fe8e8c39e 100644 --- a/esempi/tracciare_grafico_generatore_geometrie/index.html +++ b/esempi/tracciare_grafico_generatore_geometrie/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/tracciare_punti_adistanzaprefissata_lungo_linea/index.html b/esempi/tracciare_punti_adistanzaprefissata_lungo_linea/index.html index 096e66825..0aa84a97a 100644 --- a/esempi/tracciare_punti_adistanzaprefissata_lungo_linea/index.html +++ b/esempi/tracciare_punti_adistanzaprefissata_lungo_linea/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/esempi/trova_nella_tabella_attributi/index.html b/esempi/trova_nella_tabella_attributi/index.html index e15ed349e..29543bde4 100644 --- a/esempi/trova_nella_tabella_attributi/index.html +++ b/esempi/trova_nella_tabella_attributi/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git "a/esempi/unica_etichetta_pi\303\271_poligoni/index.html" "b/esempi/unica_etichetta_pi\303\271_poligoni/index.html" index e277fe13d..d05a5b8cc 100644 --- "a/esempi/unica_etichetta_pi\303\271_poligoni/index.html" +++ "b/esempi/unica_etichetta_pi\303\271_poligoni/index.html" @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/feed_rss_created.xml b/feed_rss_created.xml index d8e1db1cb..f5d6bb796 100644 --- a/feed_rss_created.xml +++ b/feed_rss_created.xml @@ -1 +1 @@ - Help field calculatorHelp funzioni calcolatore di campi di QGIShttps://hfcqgis.opendatasicilia.it/by OpenDataSicilia.ithttps://github.com/opendatasicilia/HfcQGIS-mden-None Sun, 22 Oct 2023 19:38:55 -0000 Sun, 22 Oct 2023 19:38:55 -0000 1440 MkDocs RSS plugin - v1.8.0 https://raw.githubusercontent.com/opendatasicilia/HfcQGIS-md/main/docs/img/hfc_rss.png Help field calculatorhttps://hfcqgis.opendatasicilia.it/ News <h1>News</h1>https://hfcqgis.opendatasicilia.it/blog/category/news/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/news/ misure <h1>misure</h1>https://hfcqgis.opendatasicilia.it/blog/category/misure/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/misure/ progetto <h1>progetto</h1>https://hfcqgis.opendatasicilia.it/blog/category/progetto/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/progetto/ array <h1>array</h1>https://hfcqgis.opendatasicilia.it/blog/category/array/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/array/ custom <h1>custom</h1>https://hfcqgis.opendatasicilia.it/blog/category/custom/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/custom/ variabili <h1>variabili</h1>https://hfcqgis.opendatasicilia.it/blog/category/variabili/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/variabili/ help <h1>help</h1>https://hfcqgis.opendatasicilia.it/blog/category/help/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/help/ espressioni <h1>espressioni</h1>https://hfcqgis.opendatasicilia.it/blog/category/espressioni/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/espressioni/ 2023 <h1>2023</h1>https://hfcqgis.opendatasicilia.it/blog/archive/2023/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/archive/2023/ Help in linea pigreco <h1>Help in linea</h1><h2>Introduzione</h2><p>L'help in linea del motore di espressioni di QGIS รจ utile e va consultato sempre. In questo post vediamo alcuni aspetti importanti.</p><p>!!! Abstract "Help in linea Field Calc" <strong>L'help in linea del Field calc รจ indispensabile per un uso corretto delle espressioni, contiene la definizione della funzione/espressione, la sintassi, spiegazione degli argomenti ed esempi</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Mon, 25 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Le variabili in QGIS pigreco <h1>Le variabili in QGIS</h1><h2>Introduzione</h2><p>Le variabili sono una nuova funzionalitร  introdotta in <strong>QGIS 2.12 Lyon</strong> (2015) che consente di creare valori preimpostati da utilizzare ovunque sia possibile utilizzare un'espressione. </p><p>!!! Abstract "Variabili" <strong>Rappresentano un nuovo concetto che dร  la possibilitร  di impostare variabili personalizzate da utilizzare nel motore delle espressioni di QGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Mon, 18 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Estrarre numero pagine da un PDF pigreco <h1>Estrarre numero pagine da un PDF</h1><h2>Introduzione</h2><p>Un utente di <strong>QGIS</strong> mi contatta e mi chiede come estrarre il numero di pagine di un PDF usando le espressioni di QGIS.</p><p>!!! Abstract "Funzione personalizzata" <strong>QGIS ha centinaia di espressioni, per quelle che mancano o per crearne di nuove รจ possibile aggiungere delle funzioni personalizzate usando PyQGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Fri, 15 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Array nel field calc pigreco <h1>Array nel field calc</h1><h2>Introduzione</h2><p>Il gruppo <strong>Array</strong> รจ stato introdotto in QGIS nella <a href="https://changelog.qgis.org/en/qgis/version/3.0.0/#category-50">prima versione di QGIS 3.0 Girona</a> nel lontano 2018, nella descrizione leggiamo:</p><p>!!! Abstract "GRUPPO ARRAY" <strong>Nuovo gruppo che contiene funzioni di espressione per la creazione e la manipolazione di array (noti anche come strutture di dati di elenco). L'ordine dei valori all'interno dell'array รจ importante, contrariamente alla struttura dei dati "mappa", dove l'ordine delle coppie chiave-valore รจ irrilevante e i valori sono identificati dalle rispettive chiavi.</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/14/array-nel-field-calc/ Thu, 14 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/14/array-nel-field-calc/ Impostazioni di progetto influenzano alcune funzioni pigreco <h1>Impostazioni di progetto influenzano alcune funzioni</h1><h2>Introduzione</h2><p>Alcune funzioni di <strong>QGIS</strong> dipendono dalle impostazioni di progetto, questo significa che le stesse funzioni in progetti diversi possono restituire valori diversi. In questo post vedremo le principali funzioni di <strong>QGIS</strong> da attenzionare.</p><p>!!! Abstract "esempio" <strong>$area <em><span style="color:red;">&lt;&gt;</span></em> area(@geometry)</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/ Wed, 13 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/ Come cercare un valore in funzione di un altro pigreco <h1>Come cercare un valore in funzione di un altro</h1><h2>Introduzione</h2><p>Alcune volte nasce l'esigenza di cercare un valore in una tabella in funzione di un altro valore presente nella stessa tabella, un po' come fa la funzione <code>cerca verticale</code> di Excel, e utilizzarlo in un altro layer.</p><p>!!! Abstract "Funzione" <strong>La funzione che permette di fare questa magia รจ la funzione <a href="../../../gr_funzioni/record_e_attributi/record_e_attributi_unico.md#get_feature">get_feature</a></strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ Tue, 12 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ QGIS 3.34 | 27/10/2023 <h1>Novitร  rilevanti introdotte in QGIS 3.34</h1><p><a href="../img/splashscreen/splash_3_34rc.png"><img alt="" src="../img/splashscreen/splash_3_34rc.png"></a></p><h2>espressioni</h2><ul><li>gruppo geo...</li></ul>https://hfcqgis.opendatasicilia.it/release/novita_334/ Sun, 10 Sep 2023 10:38:21 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/release/novita_334/ HfcQGIS e la sezione Blog pigreco <h1>HfcQGIS e la sezione Blog</h1><h2>Introduzione</h2><p>Benvenuti nel nuovo blog di <strong>HfcQGIS</strong>!</p><p><strong>HfcQGIS</strong> รจ la guida al calcolatore di campi di <strong>QGIS</strong> per la condivisione di conoscenze ed ora ha il suo <strong>Blog</strong>!!!.</p><p><strong>HfcQGIS</strong> รจ un sito web nato nel 2018 da un'idea di <em><strong><a href="https://hfcqgis.opendatasicilia.it/autore/">Totรฒ Fiandaca</a></strong></em> e realizzato con la comunitร  <a href="https://hfcqgis.opendatasicilia.it/ods/">OpenDataSicilia</a>, un particolare grazie va a <a href="https://hfcqgis.opendatasicilia.it/webmaster/gbvitrano/">Giovan Battista Vitrano</a> che mantiene sempre aggiornato il tema del sito alle ultime novitร . L'obiettivo iniziale del sito era quello di fornire una guida completa al calcolatore di campi, un potente strumento che consente di eseguire calcoli sui dati geografici.</p><p>Negli anni, <strong>HfcQGIS</strong> si รจ evoluto in una piattaforma di condivisione di contenuti per la comunitร  QGIS. Il sito offre ora una serie di risorse, tra cui:</p>https://hfcqgis.opendatasicilia.it/blog/2023/09/10/hfcqgis-e-la-sezione-blog/ Sun, 10 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/10/hfcqgis-e-la-sezione-blog/ Spatial join con condizione <h1>Spatial join con condizione</h1><p>Lโ€™unione spaziale di attributi รจ un problema frequente in ambito GIS - si tratta di trasferire attributi da un layer ad un alt...</p>https://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato2/ Sat, 09 Sep 2023 21:58:14 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato2/ Blog <h1>Blog</h1><style> .md-nav__item .md-nav__link--active { display: none;}</style>https://hfcqgis.opendatasicilia.it/blog/ Fri, 08 Sep 2023 13:50:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/ Spatial join con condizione <h1>Spatial join con condizione</h1><p>Lโ€™unione spaziale di attributi รจ un problema frequente in ambito GIS - si tratta di trasferire attributi da un layer ad un alt...</p>https://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato/ Mon, 07 Aug 2023 07:31:03 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato/ \ No newline at end of file + Help field calculatorHelp funzioni calcolatore di campi di QGIShttps://hfcqgis.opendatasicilia.it/by OpenDataSicilia.ithttps://github.com/opendatasicilia/HfcQGIS-mden-None Tue, 31 Oct 2023 07:49:43 -0000 Tue, 31 Oct 2023 07:49:43 -0000 1440 MkDocs RSS plugin - v1.8.0 https://raw.githubusercontent.com/opendatasicilia/HfcQGIS-md/main/docs/img/hfc_rss.png Help field calculatorhttps://hfcqgis.opendatasicilia.it/ News <h1>News</h1>https://hfcqgis.opendatasicilia.it/blog/category/news/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/news/ misure <h1>misure</h1>https://hfcqgis.opendatasicilia.it/blog/category/misure/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/misure/ progetto <h1>progetto</h1>https://hfcqgis.opendatasicilia.it/blog/category/progetto/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/progetto/ array <h1>array</h1>https://hfcqgis.opendatasicilia.it/blog/category/array/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/array/ custom <h1>custom</h1>https://hfcqgis.opendatasicilia.it/blog/category/custom/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/custom/ variabili <h1>variabili</h1>https://hfcqgis.opendatasicilia.it/blog/category/variabili/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/variabili/ help <h1>help</h1>https://hfcqgis.opendatasicilia.it/blog/category/help/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/help/ espressioni <h1>espressioni</h1>https://hfcqgis.opendatasicilia.it/blog/category/espressioni/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/espressioni/ 2023 <h1>2023</h1>https://hfcqgis.opendatasicilia.it/blog/archive/2023/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/archive/2023/ Help in linea pigreco <h1>Help in linea</h1><h2>Introduzione</h2><p>L'help in linea del motore di espressioni di QGIS รจ utile e va consultato sempre. In questo post vediamo alcuni aspetti importanti.</p><p>!!! Abstract "Help in linea Field Calc" <strong>L'help in linea del Field calc รจ indispensabile per un uso corretto delle espressioni, contiene la definizione della funzione/espressione, la sintassi, spiegazione degli argomenti ed esempi</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Mon, 25 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Le variabili in QGIS pigreco <h1>Le variabili in QGIS</h1><h2>Introduzione</h2><p>Le variabili sono una nuova funzionalitร  introdotta in <strong>QGIS 2.12 Lyon</strong> (2015) che consente di creare valori preimpostati da utilizzare ovunque sia possibile utilizzare un'espressione. </p><p>!!! Abstract "Variabili" <strong>Rappresentano un nuovo concetto che dร  la possibilitร  di impostare variabili personalizzate da utilizzare nel motore delle espressioni di QGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Mon, 18 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Estrarre numero pagine da un PDF pigreco <h1>Estrarre numero pagine da un PDF</h1><h2>Introduzione</h2><p>Un utente di <strong>QGIS</strong> mi contatta e mi chiede come estrarre il numero di pagine di un PDF usando le espressioni di QGIS.</p><p>!!! Abstract "Funzione personalizzata" <strong>QGIS ha centinaia di espressioni, per quelle che mancano o per crearne di nuove รจ possibile aggiungere delle funzioni personalizzate usando PyQGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Fri, 15 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Array nel field calc pigreco <h1>Array nel field calc</h1><h2>Introduzione</h2><p>Il gruppo <strong>Array</strong> รจ stato introdotto in QGIS nella <a href="https://changelog.qgis.org/en/qgis/version/3.0.0/#category-50">prima versione di QGIS 3.0 Girona</a> nel lontano 2018, nella descrizione leggiamo:</p><p>!!! Abstract "GRUPPO ARRAY" <strong>Nuovo gruppo che contiene funzioni di espressione per la creazione e la manipolazione di array (noti anche come strutture di dati di elenco). L'ordine dei valori all'interno dell'array รจ importante, contrariamente alla struttura dei dati "mappa", dove l'ordine delle coppie chiave-valore รจ irrilevante e i valori sono identificati dalle rispettive chiavi.</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/14/array-nel-field-calc/ Thu, 14 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/14/array-nel-field-calc/ Impostazioni di progetto influenzano alcune funzioni pigreco <h1>Impostazioni di progetto influenzano alcune funzioni</h1><h2>Introduzione</h2><p>Alcune funzioni di <strong>QGIS</strong> dipendono dalle impostazioni di progetto, questo significa che le stesse funzioni in progetti diversi possono restituire valori diversi. In questo post vedremo le principali funzioni di <strong>QGIS</strong> da attenzionare.</p><p>!!! Abstract "esempio" <strong>$area <em><span style="color:red;">&lt;&gt;</span></em> area(@geometry)</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/ Wed, 13 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/ Come cercare un valore in funzione di un altro pigreco <h1>Come cercare un valore in funzione di un altro</h1><h2>Introduzione</h2><p>Alcune volte nasce l'esigenza di cercare un valore in una tabella in funzione di un altro valore presente nella stessa tabella, un po' come fa la funzione <code>cerca verticale</code> di Excel, e utilizzarlo in un altro layer.</p><p>!!! Abstract "Funzione" <strong>La funzione che permette di fare questa magia รจ la funzione <a href="../../../gr_funzioni/record_e_attributi/record_e_attributi_unico.md#get_feature">get_feature</a></strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ Tue, 12 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ QGIS 3.34 | 27/10/2023 <h1>Novitร  rilevanti introdotte in QGIS 3.34</h1><p><a href="../img/splashscreen/splash_3_34rc.png"><img alt="" src="../img/splashscreen/splash_3_34rc.png"></a></p><h2>espressioni</h2><ul><li>gruppo geo...</li></ul>https://hfcqgis.opendatasicilia.it/release/novita_334/ Sun, 10 Sep 2023 10:38:21 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/release/novita_334/ HfcQGIS e la sezione Blog pigreco <h1>HfcQGIS e la sezione Blog</h1><h2>Introduzione</h2><p>Benvenuti nel nuovo blog di <strong>HfcQGIS</strong>!</p><p><strong>HfcQGIS</strong> รจ la guida al calcolatore di campi di <strong>QGIS</strong> per la condivisione di conoscenze ed ora ha il suo <strong>Blog</strong>!!!.</p><p><strong>HfcQGIS</strong> รจ un sito web nato nel 2018 da un'idea di <em><strong><a href="https://hfcqgis.opendatasicilia.it/autore/">Totรฒ Fiandaca</a></strong></em> e realizzato con la comunitร  <a href="https://hfcqgis.opendatasicilia.it/ods/">OpenDataSicilia</a>, un particolare grazie va a <a href="https://hfcqgis.opendatasicilia.it/webmaster/gbvitrano/">Giovan Battista Vitrano</a> che mantiene sempre aggiornato il tema del sito alle ultime novitร . L'obiettivo iniziale del sito era quello di fornire una guida completa al calcolatore di campi, un potente strumento che consente di eseguire calcoli sui dati geografici.</p><p>Negli anni, <strong>HfcQGIS</strong> si รจ evoluto in una piattaforma di condivisione di contenuti per la comunitร  QGIS. Il sito offre ora una serie di risorse, tra cui:</p>https://hfcqgis.opendatasicilia.it/blog/2023/09/10/hfcqgis-e-la-sezione-blog/ Sun, 10 Sep 2023 00:00:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/10/hfcqgis-e-la-sezione-blog/ Spatial join con condizione <h1>Spatial join con condizione</h1><p>Lโ€™unione spaziale di attributi รจ un problema frequente in ambito GIS - si tratta di trasferire attributi da un layer ad un alt...</p>https://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato2/ Sat, 09 Sep 2023 21:58:14 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato2/ Blog <h1>Blog</h1><style> .md-nav__item .md-nav__link--active { display: none;}</style>https://hfcqgis.opendatasicilia.it/blog/ Fri, 08 Sep 2023 13:50:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/ Spatial join con condizione <h1>Spatial join con condizione</h1><p>Lโ€™unione spaziale di attributi รจ un problema frequente in ambito GIS - si tratta di trasferire attributi da un layer ad un alt...</p>https://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato/ Mon, 07 Aug 2023 07:31:03 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/esempi/spatial_join_condizionato/ \ No newline at end of file diff --git a/feed_rss_updated.xml b/feed_rss_updated.xml index 0738f7ece..b85718108 100644 --- a/feed_rss_updated.xml +++ b/feed_rss_updated.xml @@ -1 +1 @@ - Help field calculatorHelp funzioni calcolatore di campi di QGIShttps://hfcqgis.opendatasicilia.it/by OpenDataSicilia.ithttps://github.com/opendatasicilia/HfcQGIS-mden-None Sun, 22 Oct 2023 19:38:55 -0000 Sun, 22 Oct 2023 19:38:55 -0000 1440 MkDocs RSS plugin - v1.8.0 https://raw.githubusercontent.com/opendatasicilia/HfcQGIS-md/main/docs/img/hfc_rss.png Help field calculatorhttps://hfcqgis.opendatasicilia.it/ News <h1>News</h1>https://hfcqgis.opendatasicilia.it/blog/category/news/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/news/ misure <h1>misure</h1>https://hfcqgis.opendatasicilia.it/blog/category/misure/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/misure/ progetto <h1>progetto</h1>https://hfcqgis.opendatasicilia.it/blog/category/progetto/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/progetto/ array <h1>array</h1>https://hfcqgis.opendatasicilia.it/blog/category/array/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/array/ custom <h1>custom</h1>https://hfcqgis.opendatasicilia.it/blog/category/custom/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/custom/ variabili <h1>variabili</h1>https://hfcqgis.opendatasicilia.it/blog/category/variabili/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/variabili/ help <h1>help</h1>https://hfcqgis.opendatasicilia.it/blog/category/help/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/help/ espressioni <h1>espressioni</h1>https://hfcqgis.opendatasicilia.it/blog/category/espressioni/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/espressioni/ 2023 <h1>2023</h1>https://hfcqgis.opendatasicilia.it/blog/archive/2023/ Sun, 22 Oct 2023 19:39:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/archive/2023/ QGIS 3.34 | 27/10/2023 <h1>Novitร  rilevanti introdotte in QGIS 3.34</h1><p><a href="../img/splashscreen/splash_3_34rc.png"><img alt="" src="../img/splashscreen/splash_3_34rc.png"></a></p><h2>espressioni</h2><ul><li>gruppo geo...</li></ul>https://hfcqgis.opendatasicilia.it/release/novita_334/ Sun, 22 Oct 2023 19:37:09 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/release/novita_334/ Changelog <h1>Changelog</h1><p>In questa sezione verranno inserite ogni modifica o aggiunta di esempi, funzioni e altro.</p><p>data | descrizione-----------|-----------06/0...</p>https://hfcqgis.opendatasicilia.it/changelog/ Sat, 30 Sep 2023 18:19:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/changelog/ Elenco gruppi <h1>Gruppi funzioni</h1><p>Nell'Interfaccia del <strong>Field Calc</strong> (e nel costruttore di espressione) รจ presente, nella parte centrale, una sezione che raccoglie i Grupp...</p>https://hfcqgis.opendatasicilia.it/gr_funzioni/gruppo_funzioni/ Sat, 30 Sep 2023 18:19:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/gr_funzioni/gruppo_funzioni/ Geometria <h1>Gruppo Geometria</h1><p>!!! Abstract <strong>Questo gruppo contiene funzioni che operano sugli oggetti geometrici es: <em>lunghezza</em>, <em>area</em>.</strong></p><hr><h2>affine_transfo...</h2>https://hfcqgis.opendatasicilia.it/gr_funzioni/geometria/geometria_unico/ Sat, 30 Sep 2023 18:19:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/gr_funzioni/geometria/geometria_unico/ Licenza <p>La licenza di questo sito (dati e immagini) fa riferimento alla <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA-4.0</a> eccezion fatta per:</p><ol><li>la se...</li></ol>https://hfcqgis.opendatasicilia.it/LICENSE_my/ Tue, 26 Sep 2023 22:55:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/LICENSE_my/ Help in linea pigreco <h1>Help in linea</h1><h2>Introduzione</h2><p>L'help in linea del motore di espressioni di QGIS รจ utile e va consultato sempre. In questo post vediamo alcuni aspetti importanti.</p><p>!!! Abstract "Help in linea Field Calc" <strong>L'help in linea del Field calc รจ indispensabile per un uso corretto delle espressioni, contiene la definizione della funzione/espressione, la sintassi, spiegazione degli argomenti ed esempi</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Mon, 25 Sep 2023 13:54:21 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Come cercare un valore in funzione di un altro pigreco <h1>Come cercare un valore in funzione di un altro</h1><h2>Introduzione</h2><p>Alcune volte nasce l'esigenza di cercare un valore in una tabella in funzione di un altro valore presente nella stessa tabella, un po' come fa la funzione <code>cerca verticale</code> di Excel, e utilizzarlo in un altro layer.</p><p>!!! Abstract "Funzione" <strong>La funzione che permette di fare questa magia รจ la funzione <a href="../../../gr_funzioni/record_e_attributi/record_e_attributi_unico.md#get_feature">get_feature</a></strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ Mon, 18 Sep 2023 17:27:54 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ Le variabili in QGIS pigreco <h1>Le variabili in QGIS</h1><h2>Introduzione</h2><p>Le variabili sono una nuova funzionalitร  introdotta in <strong>QGIS 2.12 Lyon</strong> (2015) che consente di creare valori preimpostati da utilizzare ovunque sia possibile utilizzare un'espressione. </p><p>!!! Abstract "Variabili" <strong>Rappresentano un nuovo concetto che dร  la possibilitร  di impostare variabili personalizzate da utilizzare nel motore delle espressioni di QGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Mon, 18 Sep 2023 09:46:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Estrarre numero pagine da un PDF pigreco <h1>Estrarre numero pagine da un PDF</h1><h2>Introduzione</h2><p>Un utente di <strong>QGIS</strong> mi contatta e mi chiede come estrarre il numero di pagine di un PDF usando le espressioni di QGIS.</p><p>!!! Abstract "Funzione personalizzata" <strong>QGIS ha centinaia di espressioni, per quelle che mancano o per crearne di nuove รจ possibile aggiungere delle funzioni personalizzate usando PyQGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Sun, 17 Sep 2023 17:02:37 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Variabili <h1>Variabili</h1><p><a href="http://nyalldawson.net/2015/12/exploring-variables-in-qgis-2-12-part-1/">Funzionalitร </a> introdotta da [Nyall Dawson](https://twitter.com/nyallda...</p>https://hfcqgis.opendatasicilia.it/gr_funzioni/variabili/variabili/ Sun, 17 Sep 2023 17:02:37 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/gr_funzioni/variabili/variabili/ Array nel field calc pigreco <h1>Array nel field calc</h1><h2>Introduzione</h2><p>Il gruppo <strong>Array</strong> รจ stato introdotto in QGIS nella <a href="https://changelog.qgis.org/en/qgis/version/3.0.0/#category-50">prima versione di QGIS 3.0 Girona</a> nel lontano 2018, nella descrizione leggiamo:</p><p>!!! Abstract "GRUPPO ARRAY" <strong>Nuovo gruppo che contiene funzioni di espressione per la creazione e la manipolazione di array (noti anche come strutture di dati di elenco). L'ordine dei valori all'interno dell'array รจ importante, contrariamente alla struttura dei dati "mappa", dove l'ordine delle coppie chiave-valore รจ irrilevante e i valori sono identificati dalle rispettive chiavi.</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/14/array-nel-field-calc/ Thu, 14 Sep 2023 17:36:05 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/14/array-nel-field-calc/ \ No newline at end of file + Help field calculatorHelp funzioni calcolatore di campi di QGIShttps://hfcqgis.opendatasicilia.it/by OpenDataSicilia.ithttps://github.com/opendatasicilia/HfcQGIS-mden-None Tue, 31 Oct 2023 07:49:43 -0000 Tue, 31 Oct 2023 07:49:43 -0000 1440 MkDocs RSS plugin - v1.8.0 https://raw.githubusercontent.com/opendatasicilia/HfcQGIS-md/main/docs/img/hfc_rss.png Help field calculatorhttps://hfcqgis.opendatasicilia.it/ News <h1>News</h1>https://hfcqgis.opendatasicilia.it/blog/category/news/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/news/ misure <h1>misure</h1>https://hfcqgis.opendatasicilia.it/blog/category/misure/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/misure/ progetto <h1>progetto</h1>https://hfcqgis.opendatasicilia.it/blog/category/progetto/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/progetto/ array <h1>array</h1>https://hfcqgis.opendatasicilia.it/blog/category/array/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/array/ custom <h1>custom</h1>https://hfcqgis.opendatasicilia.it/blog/category/custom/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/custom/ variabili <h1>variabili</h1>https://hfcqgis.opendatasicilia.it/blog/category/variabili/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/variabili/ help <h1>help</h1>https://hfcqgis.opendatasicilia.it/blog/category/help/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/help/ espressioni <h1>espressioni</h1>https://hfcqgis.opendatasicilia.it/blog/category/espressioni/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/category/espressioni/ 2023 <h1>2023</h1>https://hfcqgis.opendatasicilia.it/blog/archive/2023/ Tue, 31 Oct 2023 07:49:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/archive/2023/ Changelog <h1>Changelog</h1><p>In questa sezione verranno inserite ogni modifica o aggiunta di esempi, funzioni e altro.</p><p>data | descrizione-----------|-----------06/0...</p>https://hfcqgis.opendatasicilia.it/changelog/ Tue, 31 Oct 2023 07:48:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/changelog/ Array <h1>Gruppo Array</h1><p>!!! Abstract **Questo gruppo contiene funzioni espressione per la creazione e la manipolazione di array (noti anche come strutture dati a...</p>https://hfcqgis.opendatasicilia.it/gr_funzioni/array/array_unico/ Tue, 31 Oct 2023 07:48:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/gr_funzioni/array/array_unico/ QGIS 3.34 | 27/10/2023 <h1>Novitร  rilevanti introdotte in QGIS 3.34</h1><p><a href="../img/splashscreen/splash_3_34rc.png"><img alt="" src="../img/splashscreen/splash_3_34rc.png"></a></p><h2>espressioni</h2><ul><li>gruppo geo...</li></ul>https://hfcqgis.opendatasicilia.it/release/novita_334/ Tue, 31 Oct 2023 07:48:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/release/novita_334/ Elenco gruppi <h1>Gruppi funzioni</h1><p>Nell'Interfaccia del <strong>Field Calc</strong> (e nel costruttore di espressione) รจ presente, nella parte centrale, una sezione che raccoglie i Grupp...</p>https://hfcqgis.opendatasicilia.it/gr_funzioni/gruppo_funzioni/ Sat, 30 Sep 2023 18:19:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/gr_funzioni/gruppo_funzioni/ Geometria <h1>Gruppo Geometria</h1><p>!!! Abstract <strong>Questo gruppo contiene funzioni che operano sugli oggetti geometrici es: <em>lunghezza</em>, <em>area</em>.</strong></p><hr><h2>affine_transfo...</h2>https://hfcqgis.opendatasicilia.it/gr_funzioni/geometria/geometria_unico/ Sat, 30 Sep 2023 18:19:01 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/gr_funzioni/geometria/geometria_unico/ Licenza <p>La licenza di questo sito (dati e immagini) fa riferimento alla <a href="https://creativecommons.org/licenses/by-sa/4.0/">CC-BY-SA-4.0</a> eccezion fatta per:</p><ol><li>la se...</li></ol>https://hfcqgis.opendatasicilia.it/LICENSE_my/ Tue, 26 Sep 2023 22:55:58 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/LICENSE_my/ Help in linea pigreco <h1>Help in linea</h1><h2>Introduzione</h2><p>L'help in linea del motore di espressioni di QGIS รจ utile e va consultato sempre. In questo post vediamo alcuni aspetti importanti.</p><p>!!! Abstract "Help in linea Field Calc" <strong>L'help in linea del Field calc รจ indispensabile per un uso corretto delle espressioni, contiene la definizione della funzione/espressione, la sintassi, spiegazione degli argomenti ed esempi</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Mon, 25 Sep 2023 13:54:21 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/25/help-in-linea/ Come cercare un valore in funzione di un altro pigreco <h1>Come cercare un valore in funzione di un altro</h1><h2>Introduzione</h2><p>Alcune volte nasce l'esigenza di cercare un valore in una tabella in funzione di un altro valore presente nella stessa tabella, un po' come fa la funzione <code>cerca verticale</code> di Excel, e utilizzarlo in un altro layer.</p><p>!!! Abstract "Funzione" <strong>La funzione che permette di fare questa magia รจ la funzione <a href="../../../gr_funzioni/record_e_attributi/record_e_attributi_unico.md#get_feature">get_feature</a></strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ Mon, 18 Sep 2023 17:27:54 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/ Le variabili in QGIS pigreco <h1>Le variabili in QGIS</h1><h2>Introduzione</h2><p>Le variabili sono una nuova funzionalitร  introdotta in <strong>QGIS 2.12 Lyon</strong> (2015) che consente di creare valori preimpostati da utilizzare ovunque sia possibile utilizzare un'espressione. </p><p>!!! Abstract "Variabili" <strong>Rappresentano un nuovo concetto che dร  la possibilitร  di impostare variabili personalizzate da utilizzare nel motore delle espressioni di QGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Mon, 18 Sep 2023 09:46:00 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/18/le-variabili-in-qgis/ Estrarre numero pagine da un PDF pigreco <h1>Estrarre numero pagine da un PDF</h1><h2>Introduzione</h2><p>Un utente di <strong>QGIS</strong> mi contatta e mi chiede come estrarre il numero di pagine di un PDF usando le espressioni di QGIS.</p><p>!!! Abstract "Funzione personalizzata" <strong>QGIS ha centinaia di espressioni, per quelle che mancano o per crearne di nuove รจ possibile aggiungere delle funzioni personalizzate usando PyQGIS</strong></p>https://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Sun, 17 Sep 2023 17:02:37 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/ Variabili <h1>Variabili</h1><p><a href="http://nyalldawson.net/2015/12/exploring-variables-in-qgis-2-12-part-1/">Funzionalitร </a> introdotta da [Nyall Dawson](https://twitter.com/nyallda...</p>https://hfcqgis.opendatasicilia.it/gr_funzioni/variabili/variabili/ Sun, 17 Sep 2023 17:02:37 +0000Help field calculatorhttps://hfcqgis.opendatasicilia.it/gr_funzioni/variabili/variabili/ \ No newline at end of file diff --git a/gis-stackexchange/index.html b/gis-stackexchange/index.html index 1aa1a8a29..2614b5011 100644 --- a/gis-stackexchange/index.html +++ b/gis-stackexchange/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/aggrega/aggrega_unico/index.html b/gr_funzioni/aggrega/aggrega_unico/index.html index 8ad11c39e..15874796f 100644 --- a/gr_funzioni/aggrega/aggrega_unico/index.html +++ b/gr_funzioni/aggrega/aggrega_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/array/array_unico/index.html b/gr_funzioni/array/array_unico/index.html index e590c3941..88ed7c62c 100644 --- a/gr_funzioni/array/array_unico/index.html +++ b/gr_funzioni/array/array_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + @@ -5264,6 +5264,7 @@

array_first


array_foreachโ†ต

+

Aggiornata a QGIS 3.34 Prizren

Restituisce una matrice con l'espressione data valutata su ciascun elemento.

Sintassi:

+ diff --git a/release/novita_34/index.html b/release/novita_34/index.html index a0de3b296..e0101958c 100644 --- a/release/novita_34/index.html +++ b/release/novita_34/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_36/index.html b/release/novita_36/index.html index 5bfe8ab53..2561b7bda 100644 --- a/release/novita_36/index.html +++ b/release/novita_36/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_38/index.html b/release/novita_38/index.html index e4d117c7e..a0d4ba0a8 100644 --- a/release/novita_38/index.html +++ b/release/novita_38/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/risorse/index.html b/risorse/index.html index 796aeeaa3..a5cddea0c 100644 --- a/risorse/index.html +++ b/risorse/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/search/search_index.json b/search/search_index.json index 2b4c7a912..8d3efb6ad 100644 --- a/search/search_index.json +++ b/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["it"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"HfcQGIS - Help field calculator","text":"HFCQGIS: HELP FUNZIONI CALCOLATORE DI CAMPI DI QGIS Questa guida nasce per rispondere alle numerose richieste di aiuto sull\u2019uso del calcolatore di campi, a integrazione - con esempi e molti screenshot - della guida ufficiale di QGIS 80 Esempi Svolti! Field Calculator

Il calcolatore di campi\u00a0consente di eseguire calcoli sulla base di valori di attributo esistenti o funzioni definite, ad esempio, per calcolare la lunghezza o l'area delle caratteristiche geometriche. I risultati possono essere scritti in un nuovo campo di attributo, un campo virtuale, oppure possono essere utilizzati per aggiornare i valori in un campo esistente.

Funzioni

Questa guida nasce per rispondere alle numerose richieste di aiuto sull\u2019uso del calcolatore di campi e per colmare un vuoto sulla guida online di QGIS con esempi e molti screenshot. Nella sezione\u00a0ESERCIZI\u00a0si trovano esempi pratici e svolti step by step per rendere facile la comprensione di alcune funzioni di base come Area, lunghezza, Buffer ecc...

Corso di formazione

Il corso \u00e8 rivolto agli utenti che conoscono l'uso generale di QGIS e desiderano approfondire l'uso della tabella attributi e del calcolatore di campi. Il corso \u00e8 strutturato per durare almeno 16 ore - preferibilmente fulltime (due giorni da otto ore) Programma...

Supporter

Per realizzare questa guida ho impiegato del tempo e messo a disposizione tutta la mia conoscenza sullo strumento. Puoi contribuire a\u00a0HfcQGIS con una donazione, divulgando questo manuale, segnalando bug, suggerendo miglioramenti, suggerendo esempi/esercizi, Pull Requests o documentare una funzione con donazione.

La guida

Questa guida NON sostituisce il\u00a0manuale\u00a0online di QGIS, cerca solo di rendere pi\u00f9 facile la comprensione dello strumento. La versione in formato\u00a0MkDocs\u00a0del\u00a0lavoro\u00a0di Salvatore FIANDACA, \u00e8 stata realizzata dalla comunit\u00e0\u00a0OpenDataSicilia, in particolare da: Andrea Borruso,\u00a0Tot\u00f2 Fiandaca\u00a0e\u00a0Giovan Battista Vitrano utilizzando il tema Material for MkDocs

"},{"location":"LICENSE_my/","title":"Licenza","text":"

La licenza di questo sito (dati e immagini) fa riferimento alla CC-BY-SA-4.0 eccezion fatta per:

  1. la sezione Esempi svolti e tutti gli esercizi svolti, dove la licenza \u00e8 CC-BY-NC-SA 4.0;
  2. Provaci tu, dove la licenza \u00e8 CC-BY-NC-SA 4.0.
"},{"location":"autore/","title":"Bio","text":"

Salvatore FIANDACA (aka pigreco, per gli amici Tot\u00f2)

Usa spesso, nei vari social, il nickname pigreco ma \u00e8 nel titolo del suo blog - Pigrecoinfinito - che si cela il suo nome in siciliano. Per capire quale sia occorre osservare con attenzione il logo che lo rappresenta:

sono sovrapposti i simboli di pi greco, dell'infinito e della derivata prima: tre simboli matematici che hanno rivoluzionato la scienza; se osservate bene vedrete scritto il suo nome.

Prima di iniziare l'attivit\u00e0 di divulgatore del Open Source (OS), Salvatore ha utilizzato - per anni - software proprietari, solo dopo la scoperta del OS abbandon\u00f2 definitivamente il mondo Close Source e decise di divulgare la filosofia OS tramite blog post e video su youtube. Attualmente il blog \u00e8 seguito in tutto il mondo ed il canale youtube ha oltre 2800 iscritti (giu-2021).

Cura il Blog 'Pigrecoinfinito' e il canale YouTube dove scrive e parla di QGIS,Qfield, SpatiaLite, PostegreSQL/PostGIS, GDAL/OGR, GRASS GIS, SAGA GIS, GitHub, OSGeo4W, ed altri FOSS; ama usare, nella professione e non solo, software OS come LibreOffice, InkSCAPE, GIMP ecc...

Libero Professionista, attualmente \u00e8 socio GFOSS.it dal 2017, membro di QGIS Italia dal 2015 e di QGIS.org dal 2020, moderatore di vari forum con argomenti GFOSS. Partecipa, nel 2014, alla fondazione di Open Data Sicilia realizzando uno dei primi progetti del gruppo (Balneazione Palermo 2014, Piano regolatore del Comune di Palermo 2015), nel 2016 \u00e8 tra i relatori del #ODS16 OpenDataSicilia Summer Edition Messina, in cui parla di QGIS.

Salvatore \u00e8 disponibile per nuovi progetti di divulgazione, oltre a consulenze private.

Puoi raggiungere Salvatore all'indirizzo @pigrecoinfinito

Molto attivo nella comunit\u00e0 di QGIS: ha partecipato alla realizzazione di un plugin (Select by Relationship); utilizza la OSGeo4W Network installer per fare testing sulle versione dev di QGIS; ha aperto numerosi ticket nel QGIS Issue Tracking; scrive nelle mailing list di: QGIS-it-user, GFOSS, Spatialite, gvSIG; \u00e8 co-admin della pagina ufficiale di QGIS Italia; ha collaborato per i testing di nuove feature di QGIS; si diverte a compilare la versione QGIS dev su GNU/Linux MINT; ha realizzato Pull request (PR) nel progetto princiaple di QGIS; \u00e8 iscritto a gis.stackexchange. Ha organizzato e partecipato alle prime due Hack Fest QGIS Italia realizzate a Bologna e Padova (2017) e parteciper\u00e0 alla prossima a Viterbo (2018).

Foto: Hack Fest QGIS ITA Bologna 2017, da sinistra: Luca Mandolesi, Giuseppe Guarino, Salvatore Fiandaca, Pierluigi de Rosa e Enrico Ferreguti (uno dei pi\u00f9 attivi sviluppatori di plugin italiani

Foto: Hack Fest QGIS ITA Padova 2017, da sinistra: Salvatore Fiandaca, Amedeo Fadini, Federico Gianoli, Matteo Ghetta,prof. Massimo De Marchi, Stefano Campus, Alessandro Sarretta, Enrico Ferreguti

Foto: Hack Fest QGIS ITA Viterbo 2018

Foto: Hack Fest QGIS ITA Padova 2019

"},{"location":"autore/#qgis-summer-camp","title":"QGIS Summer Camp","text":"

Padova luglio 2019

Foto: QGIS Summer Camp Padova 2019 5/7 luglio

Certificate of Appreciation

Foto da sinistra: Rocco Pispico, Enrico Ferreguti, Federico Gianoli, Matteo Ghetta, Stefano Campus, Tot\u00f2 (io) e Paolo Cavallini.

"},{"location":"autore/#foss4g-it-2021","title":"FOSS4G-IT 2021","text":"

On-line 20/09/2021

"},{"location":"autore/#24h-qgis-contributors-meeting-in-firenze-2022","title":"24h QGIS Contributors Meeting in Firenze 2022","text":""},{"location":"autore/#workshop-e-seminari","title":"Workshop e Seminari","text":"Anno descrizione link 2016 OpenDataSicilia - ODS16 Messina https://github.com/pigreco/ODS16_QGIS 2020 GIScience - COVID: Analisi geografica con strumenti GIS Open Source https://github.com/pigreco/workshop-estate-gis-2020 2021 Workshop estate GIS 2021 UNIPD https://github.com/pigreco/workshop-estate-gis-2021 2021 GIScience - Dagli Open Data all'Open Source: lavorare in QGIS con le mappe catastali https://github.com/pigreco/geobreack_28_by_Gter 2021 Gter - Alla scoperta delle espressioni di QGIS: come e dove usarle (primo incontro) https://github.com/pigreco/geobreack_28_by_Gter) 2021 FOSS4G-IT 2021 - Alla scoperta delle espressioni di QGIS: come e dove usarle https://github.com/pigreco/Workshop_FOSS4G-IT-2021 2021 Gter - Alla scoperta delle espressioni di QGIS: come e dove usarle (secondo incontro) https://github.com/pigreco/geobreack_32_by_Gter 2022 Gter - QGIS, l'installazione https://github.com/pigreco/geobreack_41_by_Gter 2022 VISIDATA - OpenDataSicilia - Come semplificare la vita di un/a progfessionista GIS https://github.com/pigreco/visidata-gis 2022 FIELD CALC DI QGIS - Che cosa \u00e8 e come usarlo: applicato all'idraulica e/o all'idrologia https://github.com/pigreco/field_calc_idraulica 2022 DAL CAD AL GIS: MAPPE CATASTALI, DISEGNO CAD E TAVOLE DI PROGETTO https://github.com/pigreco/workshop-estate-gis-2022 2022 QGIS nel mondo e in Italia - Planetek Italia - Bari Slide 2023 QGIS AVANZATO_3 TIPS PER LE ANALISI GEOGRAFICHE E LA CARTOGRAFIA https://github.com/pigreco/workshop-estate-gis-2023"},{"location":"autore/#sponsoring","title":"Sponsoring","text":""},{"location":"autore/#qgis-e-osgeo","title":"QGIS e OSGeo","text":"

da febbraio 2022

Ama ascoltare E. Morricone

"},{"location":"autore/#contatti","title":"Contatti","text":"

"},{"location":"changelog/","title":"Changelog","text":"

In questa sezione verranno inserite ogni modifica o aggiunta di esempi, funzioni e altro.

data descrizione 06/09/2021 lancio #HfcQGIS v2 07/09/2021 aggiunto 54esimo esempio 07/09/2021 attivate le Discussions nel repository 07/09/2021 aggiornata la sezione Parlano di Noi - Post di GTer 16/09/2021 aggiunto le novit\u00e0 rilevanti della QGIS 3.22 Bia\u0142owie\u017ca 17/09/2021 aggiunto 55esimo esempio 18/09/2021 aggiunta nuova funzione Custom, MinMaxValueFieldName qui 26/09/2021 aggiunta funzioni utilizzate nella lista esempi svolti 26/09/2021 aggiornato programma corso di formazione, aggiunte le Maps 26/09/2021 aggiunto 56esimo esempio 27/09/2021 aggiunto screenshot di esempio alla funzione affine_transform 27/09/2021 aggiornata sezione autore con workshop al FOSS4G-IT 2021 01/10/2021 aggiunto 57esimo esempio 04/10/2021 aggiunta colonna Versione nella sezione contributors 12/10/2021 aggiornata pagina sitografia 13/10/2021 aggiunto 58esimo esempio 14/10/2021 aggiornata pagina Parlano di Noi 18/10/2021 aggiunto corso di formazione avanzato 02/11/2021 aggiunto 59esimo esempio 03/11/2021 aggiornato pagina sitografia 05/11/2021 aggiunto 60esimo esempio 06/11/2021 aggiunto 61esimo esempio 11/11/2021 aggiunto 62esimo esempio 22/11/2021 aggiunto 63esimo esempio 24/11/2021 aggiunto 64esimo esempio 29/11/2021 aggiunto 65esimo esempio 02/12/2021 aggiunto 66esimo esempio 12/12/2021 aggiunto 67esimo esempio 15/12/2021 aggiornata sezione Pull Request 18/12/2021 aggiunto 68esimo esempio 24/12/2021 aggiunto 69esimo esempio 28/12/2021 aggiunto 70esimo esempio 16/01/2022 Pull request per il Natural sorting in array_sort 18/01/2022 aggiunto 71esimo esempio 18/01/2022 aggiunti due nuove funzioni personalizzate sul Natural sorting funzioni esempio 27/01/2022 aggiunte le nuove funzioni della versione QGIS 3.24 28/01/2022 aggiunta colonna numero nelle novit\u00e0. 28/01/2022 aggiunta cartella mini per creare le miniature degli splashscreen 28/01/2022 aggiunto 72esimo esempio 01/02/2022 aggiunto il gruppo Form nella sezione Funzioni 03/02/2022 aggiunto sezione Gruppo Espressioni Utente nella sezione calcolatore di campi 03/02/2022 aggiunto sezione Tabella degli Attributi 05/02/2022 Sponsor QGIS.org - sezione 10/02/2022 Aggiunti i tag delle espressioni, nuova caratteristica introdotta nella 3.24 13/02/2022 Aggiunta sezione gis-stackexchange 17/02/2022 Attivati i tag!!! 03/03/2022 aggiunto 73esimo esempio 11/03/2022 aggiunti link a due seminari e aggiornato Parlano di noi 12/03/2022 aggiunto 74esimo esempio 14/03/2022 aggiunta funzione Custom Ordina punti lungo una linea orientata 15/03/2022 aggiunto 75esimo esempio 16/03/2022 aggiunta sezione Editor delle funzioni 31/03/2022 aggiornata sezione autore con workshop su Canale Modellazione Idraulica e GIS 08/04/2022 aggiunto 76esimo esempio 14/05/2022 Aggiunta sezione Calcolatore Campi in Processing 21/05/2022 Parlano di noi 4 anni di HfcQGIS 31/05/2022 aggiunto 77esimo esempio 02/06/2022 aggiunta nuova funzione personalizzata per estrarre testo legenda funzioni esempio 11/06/2022 aggiunto le novit\u00e0 rilevanti della QGIS 3.26 Buonos Aires 25/06/2022 aggiunto 78esimo esempio 10/07/2022 aggiunto 79esimo esempio 06/08/2022 aggiunto 80esimo esempio 21/10/2022 aggiunte le nuove funzioni della versione QGIS 3.28 Firenze 28/10/2022 aggiunto 81esimo esempio 10/11/2022 PR Corregge refusi by Andrea Giudiceandrea PR 17/02/2023 aggiunto 82esimo esempio 12/03/2023 aggiunto le novit\u00e0 rilevanti della QGIS 3.30 's-Hertogenbosch 24/06/2023 aggiunto le novit\u00e0 rilevanti della QGIS 3.32 Lima 07/08/2023 aggiunto 83esimo esempio 08/09/2023 aggiunta sezione Blog 10/09/2023 primo post del blog HfcQGIS e la sezione Blog 11/09/2023 secondo post del blog Come cercare un valore in funzione di un altro 13/09/2023 terzo post del blog Impostazioni di progetto influenzano alcune funzioni 14/09/2023 terzo post del blog Array 18/09/2023 quarto post del blog Variabili 25/09/2023 quinto post del blog Help in linea 30/09/2023 aggiunto le novit\u00e0 rilevanti della QGIS 3.34","tags":["changelog","novit\u00e0"]},{"location":"classici_problemi_gis/","title":"Risoluzione di classici problemi GIS","text":"

In questa sezione sono presenti soluzioni relativi ai classici problemi GIS utilizzando le espressioni di QGIS. Un classico problema GIS \u00e8 il conteggio di punti ricadenti all'interno di poligoni, oppure quali punti sono pi\u00f9 vicini ad una rete stradale, oppure qaunti punti ricadono entro 500 metri dall'asta di un fiume.

in lavorazione

"},{"location":"contributing/","title":"Contribuire a HfcQGIS","text":"

Prima di tutto, grazie per aver dedicato del tempo a questo progetto! \ud83d\udc4d

Quella che segue \u00e8 una serie di linee guida per contribuire a HfcQGIS. Queste sono principalmente linee guida, non regole. Usa il buon senso e sentiti libero di proporre modifiche a questo documento in una pull request.

"},{"location":"contributing/#come-puoi-contribuire","title":"Come puoi contribuire","text":""},{"location":"contributing/#donando","title":"Donando","text":"

Per realizzare questa guida ho impiegato del tempo e messo a disposizione tutta la mia conoscenza sullo strumento.

"},{"location":"contributing/#divulgando","title":"Divulgando","text":"

Per favore usa i tasti di condivisione social inserendo alcuni hastag: #hfcqgis #qgis @opendatasicilia (se hai attivo un ad blocker, i tasti di condivisione non verranno visualizzati).

"},{"location":"contributing/#segnalando","title":"Segnalando","text":"

Se trovi qualche malfunzionamento segnalalo, cos\u00ec da migliorare la guida, usa le issue del repository.

"},{"location":"contributing/#suggerendo","title":"Suggerendo","text":"

Se hai suggerimenti o migliorie segnalali usando le Discussions.

"},{"location":"contributing/#esercizi","title":"Esercizi","text":"

Se vuoi che la sezione esempi cresca, suggerisci degli esempi/esercizi che vorresti vedere magari aprendo una discussione qui.

"},{"location":"contributing/#pull-requests","title":"Pull Requests","text":"

Includere screenshot e GIF animate nella richiesta di pull, quando possibile. Documenta bene Terminare tutti i file con una nuova riga Evita il codice dipendente dalla piattaforma

"},{"location":"contributing/#da-documentare","title":"da documentare","text":"

Elenco funzione/variabili da documentare tramite donazione

Apri elenco

"},{"location":"disclaimer/","title":"Disclaimer","text":"

Questa guida NON sostituisce il manuale online di QGIS, cerca solo di rendere pi\u00f9 facile la comprensione dello strumento.

Il marchio QGIS \u00e8 stato realizzato da Anita Graser, l\u2019immagine HfcQGIS \u00e8 stata realizzata da Tot\u00f2 Fiandaca (autore del manuale) usando InkSCAPE e il carattere Trueno Bold. I colori utilizzati in questo sito sono fedeli alla Visual Style Guide di QGIS

"},{"location":"gis-stackexchange/","title":"gis-stackexchange","text":"

IN COSTRUZIONE

Abstract

In questa sezione una raccolte di alcune risposte dove si utilizzano le espressioni.

data link espressioni 15/02/2022 https://gis.stackexchange.com/a/423947/73605 with_variable, maximum, minimum 15/02/2022 https://gis.stackexchange.com/a/423834/73605 array_foreach, generate_series, num_geometries, round, area, geometry_n, $geometry 13/02/2022 https://gis.stackexchange.com/a/423748/73605 geom_from_wkt, geom_to_wkt, $geometry 13/02/2022 https://gis.stackexchange.com/a/423717/73605 regexp_replace 28/01/2022 https://gis.stackexchange.com/a/422357/73605 array_to_string, with_variable, aggregate, intersects, array_foreach, array_distinct, @parent 23/01/2022 https://gis.stackexchange.com/a/421841/73605 CASE 18/02/2022 https://gis.stackexchange.com/a/421398/73605 funzione personalizzata 11/03/2022 https://gis.stackexchange.com/a/425887/73605 Calculate length of common boundary ...

link:

  1. https://gis.stackexchange.com/users/73605/pigreco?tab=answers&sort=newest&page=1
  2. https://stackexchange.com/users/8482031/pigreco?tab=activity
  3. https://api.stackexchange.com/2.2/users/73605/answers?site=gis.stackexchange.com&pagesize=100
","tags":["gis-stackexchange","domande","risposte"]},{"location":"mettiti_alla_prova/","title":"Mettiti alla prova con le espressioni di QGIS","text":"","tags":["prova","test","esercizi","csv"]},{"location":"mettiti_alla_prova/#provaci-tu","title":"Provaci Tu","text":"

Risolvi questi quesiti e scopri il tuo livello di conoscenza delle funzioni/espressioni del Field Calc di QGIS.

","tags":["prova","test","esercizi","csv"]},{"location":"mettiti_alla_prova/#dati-utilizzati","title":"Dati utilizzati","text":"

Gli shapefile ISTAT 2021 generalizzati scaricabili da qui

Esercizi e quesiti da svolgere con QGIS 3.16 Hannover o superiore:

","tags":["prova","test","esercizi","csv"]},{"location":"mettiti_alla_prova/#quesiti","title":"Quesiti","text":"

1.Usando il layer Reg01012020_g_WGS84, tracciare il Bounding Box (poligono) delle regioni, usando il Generatore di geometrie:

2.segue esempio 1), visualizzare etichetta solo nel Bounding Box della Puglia, nell'angolo in alto a destra:

3.Usando i layer Reg01012021_g_WGS84 e RipGeo01012021_WGS84 creare un vettore lineare usando il geo-algoritmo Geometria tramite espressione che colleghi i centroidi delle ripartizioni geografiche con i centroidi delle relative regioni, vedi sotto:

4.Usando il layer ProvCM01012021_WGS84, calcolare la lunghezza della linea che collega tutti i point_on_surface delle province ordinate per regione; poi etichettare lo stesso strato in modo da visualizzare in basso a sinistra la lunghezza totale formattata, vedi sotto:

5.Come selezionare la provincia italiana che ha il maggior numero di province confinanti?;

6.Come selezionare la terza provincia pi\u00f9 estesa della ripartizione geografica Nord-Est;

7.Creare un campo numerico e popolarlo con la classifica (1,2,3,4\u2026.) delle province pi\u00f9 estese raggruppate per ripartizione geografica (ovvero, 5 classifiche, una per ogni ripartizione, in modo che possa leggere quale sia l'ordine delle province pi\u00f9 estese per ogni ripartizione);

8.Perch\u00e9 in generale $area <> area($geometry) ?

9.Con quale espressione \u00e8 possibile tracciare il centroide lungo una linea (non rettilinea)?

10.Perch\u00e9 sono utili i campi virtuali?

11.In che condizioni \u00e8 vera questa uguaglianza $x = x($geometry))?

12.Usando i layer Reg01012021_g_WGS84 e ProvCM01012021_WGS84 (filtro per cod_reg=9) creare l'effetto visualizzabile nello screenshot di sotto (spostando il mouse, \u00e8 visibile il layer sottostante e la relativa etichetta):

13.I Raster possono essere utilizzati nel Field Calc? motivare la risposta.

14.Posso richiamare i valori di un altro layer usando le espressioni di QGIS? Se s\u00ec, con quali funzioni?

15.Per fare la concatenazione di stringhe \u00e8 possibile utilizzare sia || che +, ma che differenza c'\u00e8 tra i due ?

16.Utilizzando lo shapefile Reg01012021_g_WGS84 quale espressione permette di selezionare le feature pari?

17.All'interno della Finestra di dialogo del Field Calc (dove scriviamo le espressioni) \u00e8 possibile scrivere dei commenti, in quale modo?

18.Utilizzando lo shapefile Reg01012021_g_WGS84, quale elemento restituisce questa espressione array_agg(\"COD_REG\")[-1] (il primo, l'ultimo, nessuno, \u2026)?

19.Utilizzando lo shapefile ProvCM01012021_WGS84, quale valore devo sostituire al posto della X affinch\u00e9 l'uguaglianza sia soddisfatta: array_first(array_agg(\"COD_PROV\")) = array_agg(\"COD_PROV\")[X] ?

20.Nella Selezione per Espressione, quale tipo di output (numero, testo, booleano) deve dare l'espressione utilizzata nella finestra di dialogo sottostante (stesso concetto vale per i filtri) ?

21.Usando i layer Reg01012021_g_WGS84 e RipGeo01012021_WGS84 etichettare il layer RipGeo01012021_WGS84 con il numero delle regioni corrispondenti, come sotto (utilizzare solo espressioni):

22.Dove posso utilizzare la variabile @parent ? (ovunque o solo in?)

23.Le variabili dipendono dal contesto in cui lavoriamo (field calc, seleziona per espressione, compositore di stampe, ecc\u2026) ? motivare la risposta;

24.Posso utilizzare le espressioni nel compositore di stampe ? fai qualche esempio

25.La variabile @atlas_geometry \u00e8 sempre disponibile? motivare la risposta.

26.Nel Field Calc \u00e8 possibile aggiornare un attributo, cosa significa aggiornare l'attributo geometria tramite espressione, fai un esempio ?

27.Cosa sono e a che servono i parametri denominati nelle espressioni ?

28.Mettiti alla prova, rispondi prima di verificare in QGIS: '1' + '20' = 21 \u00e8 corretta questa uguaglianza ? motiva la risposta.

29.Il Field Calc popola un attributo alla volta, \u00e8 vera questa affermazione ? motiva risposta.

30.A partire dalla colonna \"cod_rip\", come ottenere la colonna \"INVERTI\" ? che espressione useresti ? vedi sotto:

31.Usando il layer ProvCM01012021_WGS84 selezionare le province che hanno il nome (\"den_uts\") con meno di 5 lettere:

32.Supponiamo di avere, in una tabella degli attributi, due colonne: la prima (field_1) \u00e8 una descrizione caratterizzata da un lungo testo; un secondo campo (field_2) in cui c'\u00e8 una parola; come verificare che la parola sia presente nel attributo descrizione ?

33.Usando il layer ProvCM01012021_WGS84 come scoprire il suo EPSG usando le espressioni ?

34.Usando i layer RipGeo01012021_WGS84 e in particolare la sua tabella degli attributi, aggiungere un campo (cum) e popolarlo con la somma cumulativa del campo \"cod_rip\", in modo da ottenere:

35.Alla variabile @parent \u00e8 assegnata una feature o un valore ? motivare la risposta.

36.La seguente uguaglianza $id = @rownumber relativamente alla prima feature, \u00e8 vera quando?

37.Usando uno shapefile, $id inizia da 1 o 0 ?

38.Usando un GeoPackage, @row_number inizia da 0 o 1 ?

39.\u00c8 possibile realizzare una JOIN tabellare (al volo) usando solo espressioni ? motivare la risposta. (esempio: fare una join tabellare tra il vettore RipGeo01012021_WGS84 e il file CSV sottostante)

id valore 1 ciao 2 viva 3 QGIS 4 3.16.6 5 Hannover

40.\u00c8 uno dei geo-algoritmi pi\u00f9 famosi in ambito GIS Conta punti nel Poligono, \u00e8 possibile fare la stessa cosa usando solo le espressioni del Field Calc di QGIS ? motivare la risposta

41.Con quale espressione \u00e8 possibile aggiungere il numero di pagine in un atlante (nel formato nro pagina/totale pagine) ?

42.Quale valore memorizza la variabile @project_folder ?

43.\u00c8 possibile associare a una variabile una immagine SVG ? se s\u00ec, in quali casi ?

44.Se definissi una variabile Globale con nome my_var = 5 e poi definissi la stessa variabile a livello di Progetto my_var = 50; quale valore verrebbe associato alla variabile ? motivare la risposta

45.Le espressioni di QGIS sono utilizzabili ovunque in QGIS, per esempio: tabella attributi, tematizzazione, etichettatura, strumenti di processing, compositore di stampe, atlanti, report, moduli inserimento dati, widget, legenda, azioni, plugin, modellatore grafico, diagrammi, filtri, selezione, decorazioni, copyright, ecc.. lo sapevi ? motivare la risposta!\ud83d\ude01

46.Quattro vettori da 4 provider differenti (PostGIS, Spatialite, GeoPackage e shapefile), dove funzionano meglio le espressioni di QGIS ? motivare la risposta

47.La funzione array_agg() permette di trasformare un campo in un array, quale funzione trasforma una feature in un array ?

48.Nella finestra del Calcolatore di Campi, nella sezioni Gruppi (dove ci sono tutti le funzioni suddivise per gruppi), alcuni gruppi sono presenti solo in certe condizioni, per esempio il gruppo Relazioni quando \u00e8 visibile ?

49.Supponiamo di avere il seguente CSV con tre attributi, l'ultimo GPS contiene la coppia di coordinate separate da , come da tabella sotto:

DATA NOME GPS 01/02/20 cucu 44.852747416606434,10.028176383697463 02/02/20 ciao 44.044566892850995,12.055562011167229 03/02/20 arrivederci 41.83774391119999,13.131616192302847 04/02/20 pluto 41.08389804418973,16.013252812971114 05/02/20 paperino 38.336008270894254,16.06188803019758

domanda 1 : come ottenere quest'altra tabella, dividendo i campi latitudine e longitudine ?

DATA NOME GPS latitude longitude 01/02/20 cucu 44.852747416606434,10.028176383697463 44.852747416606434 10.028176383697463 02/02/20 ciao 44.044566892850995,12.055562011167229 44.044566892850995 12.055562011167229 03/02/20 arrivederci 41.83774391119999,13.131616192302847 41.8377439119999 13.131616192302847 04/02/20 pluto 41.08389804418973,16.013252812971114 41.08389804418973 16.013252812971114 05/02/20 paperino 38.336008270894254,16.06188803019758 38.336008270894254 16.06188803019758

domanda 2 : come ottenere solo sei cifre decimali per gli ultimi due campi ?

DATA NOME GPS latitude longitude 01/02/20 cucu 44.852747416606434,10.028176383697463 44.852747 10.028176 02/02/20 ciao 44.044566892850995,12.055562011167229 44.044566 12.055562 03/02/20 arrivederci 41.83774391119999,13.131616192302847 41.837743 13.131616 04/02/20 pluto 41.08389804418973,16.013252812971114 41.083898 16.013252 05/02/20 paperino 38.336008270894254,16.06188803019758 38.336008 16.061888

50.A cosa serve l'operatore '\\n' ?

","tags":["prova","test","esercizi","csv"]},{"location":"mettiti_alla_prova/#esito-esercizi","title":"Esito esercizi","text":"

Per chi volesse sapere l'esito degli esercizi svolti, inviare le risposte alla mail: pigrecoinfinito@gmail.com con OGGETTO: Test #HfcQGIS

","tags":["prova","test","esercizi","csv"]},{"location":"mettiti_alla_prova/#risultati","title":"Risultati","text":"

Sono 50 quesiti di difficolt\u00e0 variabile (media-alta), sotto i consigli di Pigreco

nro range (risposte esatte) significato 1 tra 0 e 10 occorre urgentemente seguire il Corso HfcQGIS \ud83d\ude01 2 tra 11 e 25 seguire il Corso ti permetterebbe di rispondere bene quasi a tutte \ud83d\ude0a 3 tra 26 e 40 hai qualche lacuna che potresti colmare seguendo il Corso HfcQGIS \ud83d\ude0e 4 tra 41 e 50 conosci bene il Field Calc ! \ud83d\ude0d

Contatto : \u2709 pigrecoinfinito@gmail.com

","tags":["prova","test","esercizi","csv"]},{"location":"mettiti_alla_prova/#licenza","title":"Licenza","text":"

In questa sezione Provaci tu e tutti gli esercizi svolti, la licenza \u00e8 CC-BY-NC-SA 4.0

","tags":["prova","test","esercizi","csv"]},{"location":"ods/","title":"OpenDataSicilia","text":"

OpenDataSicilia \u00e8 una iniziativa civica che si propone di far conoscere e diffondere le prassi dell'open data e la cultura dell'open government e nel territorio e aprire una discussione pubblica partecipata. \u00c8 un gruppo di cittadini con diverse storie, competenze, professioni, accomunate dalla volont\u00e0 di contribuire a migliorare la qualit\u00e0 della vita delle persone, con spirito di collaborazione e concretezza.

"},{"location":"ods/#la-genesi-di-questo-sito","title":"La genesi di questo sito","text":"

La forza delle comunit\u00e0 sono le persone, le loro idee, le intuizioni, l'energia che hanno dentro e la capacit\u00e0 di fare insieme tesoro di tutto questo.

Questa guida nasce da questa frase \"buttata\" in una chat:

guardando il video che Tot\u00f2 ha fatto sul suo mega lavoro HfcQGIS mi \u00e8 sembrato un p\u00f2 scoraggiato, vorrei provare a trasformarlo per lui e dargli molta pi\u00f9 visibilit\u00e0.

Capita spesso, con tutte le buone intenzioni, di scrivere frasi come questa, ma nel 99% dei casi si perdono, senza che ci sia alcuna evoluzione.OpenDataSicilia \u00e8 un'\"infrastrattura di persone\" dove una bella intenzione - come quella di sopra di Giovan Battista Vitrano - si pu\u00f2 trasformare in un passaparola e poi in un progetto; specie quando alle spalle c'\u00e8 una \"mega lavoro\" da valorizzare come quello di Salvatore Fiandaca.

I criceti che hanno fatto girare la ruota. Andrea Borruso

Coordinatore

Salvatore Fiandaca

Autore e curatore di HfcQGIS

Giovan Battista Vitrano

Webmaster

"},{"location":"ods/#anagrafica","title":"Anagrafica","text":"

OpenDataSicilia fa scruscio (\"rumore\" in siciliano) qui:

\u00a0\u00a0 Twitter \u00a0\u00a0 Gruppo Telegram \u00a0\u00a0 Gruppo Facebook \u00a0\u00a0 Mailing List \u00a0\u00a0 opendatasicilia.it

"},{"location":"parlano_di_noi/","title":"Parlano di noi","text":"

https://docs.google.com/presentation/d/1ebb8P1t0V8xoNBva3mWLB9XBRSDS42vekSYv5uUDa3I/edit#slide=id.g22dbcfdf67a_0_2

","tags":["news","parlano"]},{"location":"privacy/","title":"Informativa privacy estesa","text":"

In linea con la legislazione Europea, \u00e8 fondamentale che ogni utente del sito web comprenda cosa sono i cookie e per quale motivo vengono utilizzati, in modo che gli utenti stessi possano decidere consapevolmente se accettarne l\u2019utilizzo o no sui loro dispositivi.

Un cookie \u00e8 un piccolo file di testo contenente un numero di identificazione univoco che viene trasferito dal sito web sul disco rigido del vostro computer attraverso un codice anonimo in grado di identificare il computer ma non l\u2019utente e di monitorare passivamente le vostre attivit\u00e0 sul sito.

I cookie possono essere classificati in due categorie, in base alle loro funzionalit\u00e0:

Il sito utilizza solo il primo tipo di cookie, di tipo tecnico, per i quali non \u00e8 richiesto alcun consenso.

Nel dettaglio vengono utlizzati le seguenti tipologie di cookie:

Cookie strettamente necessari Questi cookie sono essenziali al fine di permettere la navigazione del sito web e l\u2019utilizzo delle sue funzionalit\u00e0, come ad esempio l\u2019accesso ad alcune aree protette. Senza questi cookie, alcune funzionalit\u00e0 richieste come ad esempio il login al sito o l\u2019inserimento degli articoli da parte dei collaboratori non potrebbero essere fornite.

Cookie sulle prestazioni Questi cookie raccolgono informazioni su come gli utenti utilizzano il sito web, ad esempio quali pagine vengono visitate pi\u00f9 spesso e se gli utenti ricevono messaggi di errore da queste pagine. Questi cookie non raccolgono informazioni che identificano un visitatore specifico. Tutte le informazioni raccolte da questi cookie sono aggregate e quindi anonime. Vengono utilizzate unicamente per migliorare il funzionamento del sito web.

Cookie di analisi di traffico anonimizzati Questo sito web utilizza inoltre i cookie di Google Analytics, un servizio di analisi web fornito da Google. Le informazioni generate dal cookie sull\u2019utilizzo del sito web da parte vostra (compreso il vostro indirizzo IP) verranno trasmesse e depositate presso i server di Google che utilizzer\u00e0 queste informazioni allo scopo di tracciare ed esaminare il vostro utilizzo del sito web, compilare report sulle attivit\u00e0 svolte sul sito web e fornire altri servizi relativi alle attivit\u00e0 e all\u2019utilizzo di Internet. I dati generati da Google Analytics sono conservati da Google cos\u00ec come indicato nella Informativa reperibile al seguente link.

L\u2019utente pu\u00f2 disabilitare in modo selettivo l\u2019azione di Google Analytics installando sul proprio browser la componente di opt-out fornito da Google. Per disabilitare l\u2019azione di Google Analytics, si rinvia al link di seguito indicato: https://tools.google.com/dlpage/gaoptout

Cookie funzionali Questi cookie consentono al sito web di ricordare le scelte che avete effettuato (come il vostro username, la vostra lingua o l\u2019area geografica in cui vivete) al fine di ottimizzare e fornire funzionalit\u00e0 pi\u00f9 avanzate. Questi cookie possono inoltre essere utilizzati per fornire funzionalit\u00e0 da voi richieste come ad esempio la visualizzazione di un video o la possibilit\u00e0 di commentare sul sito. Queste informazioni raccolte dai cookie possono essere anonime e non devono tracciare la navigazione e le attivit\u00e0 dell\u2019utente su altri siti web. Vi preghiamo di considerare che alcune funzionalit\u00e0 del sito web potrebbero essere ridotte o non disponibili disabilitando i cookie. Nel dettaglio, gli utenti possono controllare, eliminare o impedire il caricamento di cookie agendo sui loro browser cos\u00ec come sotto indicato.

"},{"location":"privacy/#cookie-di-terze-parti","title":"Cookie di terze parti","text":"

Google Analytics Il Sito impiega Google Analytics. Si tratta di un servizio di analisi web fornito da Google Inc. (\u201cGoogle\u201d) che utilizza cookie depositati sul computer dell\u2019utente per consentire analisi statistiche in forma aggregata in ordine all\u2019utilizzo del sito web visitato.

I dati generati da Google Analytics sono conservati da Google cos\u00ec come indicato nella Informativa reperibile al seguente link \u2013 https://developers.google.com/analytics/devguides/collection/analyticsjs/cookie-usage Per consultare l\u2019informativa privacy della societ\u00e0 Google Inc., titolare autonomo del trattamento dei dati relativi al servizio Google Analytics, si rinvia al sito Internet.

Google Fonts (What does using the Google Fonts API mean for the privacy of my users?) Questo sito web utilizza API di Google Fonts, l\u2019uso di Google Fonts non \u00e8 autenticato. Nessun cookie viene inviato dai visitatori del sito web all\u2019API di Google Fonts. Le richieste all\u2019API di Google Fonts vengono eseguite su domini specifici delle risorse, come fonts.googleapis.com o fonts.gstatic.com, in modo che le richieste per i caratteri siano separate e non contengano credenziali inviate a google.com mentre utilizzando altri servizi Google autenticati, come Gmail. Le richieste per le risorse CSS vengono memorizzate nella cache per 1 giorno. Per ulteriori informazioni sulle informazioni raccolte da Google e su come vengono utilizzate e protette, consulta le Norme sulla privacy di Google

"},{"location":"privacy/#widget-social-network","title":"Widget Social Network","text":"

I widget dei social network sono quei particolari \u201cpulsanti\u201d o \u201cblocchi\u201d presenti sul sito che raffigurano le icone di social network (esempio, Facebook e Twitter) e consentono agli utenti che stanno navigando di interagire con un \u201cclick\u201d direttamente con le piattaforme social. Si riportano i link ove l\u2019utente pu\u00f2 prendere visione dell\u2019informativa privacy relativa alla gestione dei dati da parte dei social cui i pulsanti e le widget rinviano. Nessuna informazione viene condivisa dal sito in cui il widget \u00e8 incorporato.

Per maggiori informazioni, anche sulla disattivazione di tali cookie, si consiglia di consultare i seguenti link:

"},{"location":"privacy/#pubblicita","title":"Pubblicit\u00e0","text":"

Sono presenti annunci di pubblicit\u00e0 etica di Read the Docs che rispetta la privacy degli utenti. La pubblicit\u00e0 etica \u00e8 la fonte princiaple del progetto Read the Docs.

"},{"location":"privacy/#come-disabilitare-i-cookie-mediante-configurazione-del-browser","title":"Come disabilitare i cookie mediante configurazione del browser","text":"

Fermo restando quanto sopra indicato in ordine ai cookie strettamente necessari alla navigazione, l\u2019utente pu\u00f2 eliminare gli altri cookie attraverso la funzionalit\u00e0 a tal fine messa a disposizione dal Titolare tramite la presente informativa oppure direttamente tramite il proprio browser. Ciascun browser presenta procedure diverse per la gestione delle impostazioni. L\u2019utente pu\u00f2 ottenere istruzioni specifiche attraverso i link sottostanti.

Google Chrome

Mozilla Firefox - Eseguire il Browser Mozilla Firefox - Fare click sul men\u00f9 presente nella barra degli strumenti del browser a fianco della finestra di inserimento url per la navigazione - Selezionare Opzioni - Seleziona il pannello Privacy - Fare clic su Mostra Impostazioni Avanzate - Nella sezione \u201cPrivacy\u201d fare clic su bottone \u201cImpostazioni contenuti\u201c - Nella sezione \u201cTracciamento\u201d \u00e8 possibile modificare le seguenti impostazioni relative ai cookie: - Richiedi ai siti di non effettuare alcun tracciamento - Comunica ai siti la disponibilit\u00e0 ad essere tracciato - Non comunicare alcuna preferenza relativa al tracciamento dei dati personali - Dalla sezione \u201cCronologia\u201d \u00e8 possibile: - Abilitando \u201cUtilizza impostazioni personalizzate\u201d selezionare di accettare i cookie di terze parti (sempre, dai siti pi\u00f9 visitato o mai) e di conservarli per un periodo determinato (fino alla loro scadenza, alla chiusura di Firefox o di chiedere ogni volta) - Rimuovere i singoli cookie immagazzinati

Internet Explorer

Eseguire il Browser Internet Explorer

Safari

Safari IOs (Dispositivi Mobile)

Opera

Come indicato, l\u2019Utente potr\u00e0 negare il consenso all\u2019installazione dei cookie per il mezzo del browser di navigazione in uso seguendo le istruzioni ivi fornite o accedendo al sito http://www.youronlinechoices.com/it/le-tue-scelte/.

Per ulteriori informazioni su come cancellare e controllare i cookie archiviati sul computer, si prega di consultare http://www.allaboutcookies.org/manage-cookies/index. Non possiamo tuttavia garantire la correttezza e l\u2019aggiornamento delle informazioni ivi contenute.

"},{"location":"pull-request/","title":"Pull Request","text":"

In questa pagina l'elenco delle richieste di funzionalit\u00e0 legate al field calculator di QGIS, inoltrate da Salvatore Fiandaca nel repository ufficiale di QGIS.

","tags":["pull-request","novit\u00e0"]},{"location":"pull-request/#realizzata","title":"Realizzata","text":"

>=QGIS 3.12

Permette di salvare le espressioni utente personalizzate nel profilo utente. Introdotta a partire da QGIS 3.12 Bucaresti

https://github.com/qgis/QGIS/pull/33437

","tags":["pull-request","novit\u00e0"]},{"location":"pull-request/#realizzata_1","title":"Realizzata","text":"

>=QGIS 3.24

Permette di visualizzare gli attributi di un layer diverso da quello corrente. \u00c8 molto utile quando di creano espressioni che richiamano altri layer, per esempio usando get_feature, get_feature_by_id, aggregate e le funzioni di overlay_*.

https://github.com/qgis/QGIS/issues/37544

","tags":["pull-request","novit\u00e0"]},{"location":"pull-request/#da-realizzata","title":"Da realizzata","text":"

Implementa il Natural sorting come parametro opzionale della funzione array_sort

https://github.com/qgis/QGIS/issues/46850

","tags":["pull-request","novit\u00e0"]},{"location":"release/","title":"Release","text":"

In questa sezione le varie versioni nel tempo.

data release descrizione logo settembre 2021 #HfcQGIS v2 Realizzato con MkDocs e tema Material for MkDocs luglio 2018 #HfcQGIS v1 Realizzato con RTD e tema Sphinx Theme","tags":["versione","release"]},{"location":"risorse/","title":"Principali risorse usate per realizzare il sito","text":"","tags":["risorse","software","plugin"]},{"location":"risorse/#software","title":"Software","text":"","tags":["risorse","software","plugin"]},{"location":"risorse/#static-site-generator","title":"Static site generator","text":"","tags":["risorse","software","plugin"]},{"location":"risorse/#plugin","title":"Plugin","text":"","tags":["risorse","software","plugin"]},{"location":"sitografia_field_calc/","title":"Sitografia sul Field Calc","text":"

Questa sezione raccoglie alcuni post a tema sul Field Calc e le espressioni in generale.

nro descrizione link 1 l'importanza del join tabellare fatto al volo https://pigrecoinfinito.com/2020/09/21/qgis-join-tabellare-al-volo/ 2 calcolo distanza tra punti e linee https://pigrecoinfinito.com/2016/10/28/qgis-calcolare-distanza-tra-punti-e-linea-usando-solo-il-calcolatore-di-campi/ 3 esempio su come aggiornare una geometria https://pigrecoinfinito.com/2016/04/05/qgis-calcolatore-di-campi/ 4 un esempio di uso delle regex https://pigrecoinfinito.com/2021/02/01/qgis-e-le-regex-un-caso-semplice/ 5 Tweet https://twitter.com/totofiandaca/status/1393927693855510533 6 QGISe la selezione con aggregazione https://medium.com/@salvatorefiandaca/qgis-e-la-selezione-con-aggregazione-dcb1c709d676 7 QGIS e le funzioni di aggregazione https://medium.com/@salvatorefiandaca/qgis-3-0-funzioni-di-aggregazione-9c8c389985c5 8 Tweet SpatialAnalysis Challenge https://twitter.com/totofiandaca/status/1430108211068219416 9 QGIS: generare un atlante basato su campi https://medium.com/tantotanto/qgis-generare-un-atlante-basato-su-campi-4eeff34b3900 10 Espressioni usate per il catasto https://github.com/pigreco/workshop-estate-gis-2021 11 Espressioni utilizzate per analisi COVID19 https://github.com/pigreco/workshop-estate-gis-2020 12 Espressioni per creare sezioni trasversali https://pigrecoinfinito.com/2020/01/10/qgis-creare-sezioni-trasversali-di-un-fiume-espressioni/ 13 Espressioni utente https://pigrecoinfinito.com/2019/12/31/qgis-espressioni-utente/ 14 Espressioni per pulizia dati https://pigrecoinfinito.com/2019/02/18/qgis-le-espressioni-regolari-per-la-pulizia-dei-dati/ 15 Espressioni per interpolare dati https://pigrecoinfinito.com/2021/06/15/interpolare-i-valori-m-dei-vertici-di-una-linea/ 16 Espressioni nel compositore di stampe https://pigrecoinfinito.com/2021/03/03/qgis-intestazione-e-pie-di-pagina-negli-atlas/ 17 Espressioni e Array https://pigrecoinfinito.com/2020/05/20/elenco-ordinato-di-comuni-attraversati-da-un-itinerario-domodossola-aosta/ 18 Espressioni e Varaibili https://pigrecoinfinito.com/2020/04/14/qgis-grafici-geoplot-usando-solo-il-geometry-generator/ 19 Espressioni e Array su Tabella Attributi https://pigrecoinfinito.com/2020/01/23/qgis-tabella-attributi-ordinare-usando-gli-array/ 20 Espressioni e condizioni https://pigrecoinfinito.com/2020/03/02/qgis-etichettatura-bustrofedica/ 21 QGIS e il formato HStore https://pigrecoinfinito.com/2021/10/12/qgis-e-il-formato-hstore/ 22 QGIS E LO SPATIAL JOIN CONDIZIONATO https://pigrecoinfinito.com/2021/11/01/qgis-e-lo-spatial-join-condizionato/","tags":["blog","post","pigrecoinfinito"]},{"location":"supporter/","title":"Supporter","text":"

Questa pagina raccoglie i nominativi delle persone che hanno contribuito alla guida in termini finanziari o di conoscenza:

","tags":["supporter"]},{"location":"supporter/#contributi-finanziari","title":"Contributi finanziari","text":"nro contributo luogo messaggio Versione 1 Enrico Bertonati Italia Come sempre ottimo lavoro Doc!!! Saluti; HfcQGIS Old 2 Carlo Tinalli Italia Un piccolo contributo, in quanto ritengo che la rete non sia una fonte da cui attingere tutto gratis.; HfcQGIS Old 3 Andrea Bortoluzzi Italia W Qgis e w Tot\u00f2!; HfcQGIS Old 4 Federico Gianoli Italia Grazie per quello che fai per la comunit\u00e0 di QGIS. Il mio \u00e8, purtroppo, solo un gesto simbolico per dimostrarti che apprezzo moltissimo il tuo lavoro ed i tuoi sforzi per la comunit\u00e0.; HfcQGIS Old 5 Giacomo Amerio Italia -- HfcQGIS Old 6 Luca Bellami Messico un contributo davvero piccolo per l'enorme lavoro che fai per la comunit\u00e1! un abbraccio Luca HfcQGIS Old 7 Roberto Montagnetti Inghilterra Un piccolo modesto supporto alle attivit\u00e0 di Pigrecoinfinito HfcQGIS Old 8 Giovanni Gullo Italia \"Complimenti Tot\u00f2. Un saluto, Giovanni Gullo\" HfcQGIS Old 9 Federico Gianoli Italia Per il tuo progetto HFC, fonte di ispirazione (e un po' di invidia). Grazie HfcQGIS v2","tags":["supporter"]},{"location":"supporter/#contributi-in-conoscenza","title":"Contributi in conoscenza","text":"

tramite esercizi, pull request e funzioni personalizzate

nro contributo Luogo sito sezione Versione 1 Stefano Campus Italia PR update funzione concat() HfcQGIS Old 2 Ludovico Frate Italia lezionigis.it es: 11 - Calcolo della core area (area interna al poligono al netto di un'area di buffer interna ) HfcQGIS Old 3 Martina Savarese Italia es: 17 - Contare i punti nel poligono per categorie HfcQGIS Old 4 Giulio Fattori Italia Gruppo Custom HfcQGIS Old 5 Matteo Ghetta Italia Faunalia add_col_z HfcQGIS Old 6 Valerio Pinna Italia es: 35, es: 41, es: 42 HfcQGIS Old 7 Andrea Giudiceandrea Italia PR Corregge dei refusi HfcQGIS New","tags":["supporter"]},{"location":"tags/","title":"\ud83c\udff7\ufe0f Tags","text":"

Abstract

Elenco di tag utilizzati per la ricerca

"},{"location":"tags/#adiacenza","title":"adiacenza","text":""},{"location":"tags/#aggiornare","title":"aggiornare","text":""},{"location":"tags/#aggregare","title":"aggregare","text":""},{"location":"tags/#area","title":"area","text":""},{"location":"tags/#argomenti","title":"argomenti","text":""},{"location":"tags/#array","title":"array","text":""},{"location":"tags/#atlante","title":"atlante","text":""},{"location":"tags/#attributi","title":"attributi","text":""},{"location":"tags/#blob","title":"blob","text":""},{"location":"tags/#blog","title":"blog","text":""},{"location":"tags/#calamita","title":"calamita","text":""},{"location":"tags/#campi","title":"campi","text":""},{"location":"tags/#caratteri","title":"caratteri","text":""},{"location":"tags/#categoria","title":"categoria","text":""},{"location":"tags/#centroidi","title":"centroidi","text":""},{"location":"tags/#cerca_valori","title":"cerca_valori","text":""},{"location":"tags/#challenge","title":"challenge","text":""},{"location":"tags/#changelog","title":"changelog","text":""},{"location":"tags/#chiave-valore","title":"chiave-valore","text":""},{"location":"tags/#classificare","title":"classificare","text":""},{"location":"tags/#concetti","title":"concetti","text":""},{"location":"tags/#condizioni","title":"condizioni","text":""},{"location":"tags/#confrontare","title":"confrontare","text":""},{"location":"tags/#contare","title":"contare","text":""},{"location":"tags/#contorni","title":"contorni","text":""},{"location":"tags/#coordinate","title":"coordinate","text":""},{"location":"tags/#corso","title":"corso","text":""},{"location":"tags/#cronometro","title":"cronometro","text":""},{"location":"tags/#csv","title":"csv","text":""},{"location":"tags/#cumulativa","title":"cumulativa","text":""},{"location":"tags/#custom","title":"custom","text":""},{"location":"tags/#data","title":"data","text":""},{"location":"tags/#decimali","title":"decimali","text":""},{"location":"tags/#decorazioni","title":"decorazioni","text":""},{"location":"tags/#dinamico","title":"dinamico","text":""},{"location":"tags/#domande","title":"domande","text":""},{"location":"tags/#duplicati","title":"duplicati","text":""},{"location":"tags/#ellissoide","title":"ellissoide","text":""},{"location":"tags/#epsg","title":"epsg","text":""},{"location":"tags/#esercizi","title":"esercizi","text":""},{"location":"tags/#espressioni","title":"espressioni","text":""},{"location":"tags/#estrarre","title":"estrarre","text":""},{"location":"tags/#etichette","title":"etichette","text":""},{"location":"tags/#fieldcalc","title":"fieldCalc","text":""},{"location":"tags/#fill-down","title":"fill-down","text":""},{"location":"tags/#filtro","title":"filtro","text":""},{"location":"tags/#form","title":"form","text":""},{"location":"tags/#formattare","title":"formattare","text":""},{"location":"tags/#formattazione","title":"formattazione","text":""},{"location":"tags/#formazione","title":"formazione","text":""},{"location":"tags/#geopackage","title":"geopackage","text":""},{"location":"tags/#get_feature","title":"get_feature","text":""},{"location":"tags/#gis-stackexchange","title":"gis-stackexchange","text":""},{"location":"tags/#gms","title":"gms","text":""},{"location":"tags/#grafico","title":"grafico","text":""},{"location":"tags/#gruppo","title":"gruppo","text":""},{"location":"tags/#gui","title":"gui","text":""},{"location":"tags/#help","title":"help","text":""},{"location":"tags/#hub-line","title":"hub-line","text":""},{"location":"tags/#id","title":"id","text":""},{"location":"tags/#immagini","title":"immagini","text":""},{"location":"tags/#impostazioni","title":"impostazioni","text":""},{"location":"tags/#incidenza","title":"incidenza","text":""},{"location":"tags/#incrementi","title":"incrementi","text":""},{"location":"tags/#interfaccia","title":"interfaccia","text":""},{"location":"tags/#itinerari","title":"itinerari","text":""},{"location":"tags/#layer","title":"layer","text":""},{"location":"tags/#linee","title":"linee","text":""},{"location":"tags/#misure","title":"misure","text":""},{"location":"tags/#moduli","title":"moduli","text":""},{"location":"tags/#natural-sorting","title":"natural-sorting","text":""},{"location":"tags/#news","title":"news","text":""},{"location":"tags/#novita","title":"novit\u00e0","text":""},{"location":"tags/#operatori","title":"operatori","text":""},{"location":"tags/#ora","title":"ora","text":""},{"location":"tags/#ordinare","title":"ordinare","text":""},{"location":"tags/#overlay","title":"overlay","text":""},{"location":"tags/#parametri","title":"parametri","text":""},{"location":"tags/#parlano","title":"parlano","text":""},{"location":"tags/#pdf","title":"pdf","text":""},{"location":"tags/#pigrecoinfinito","title":"pigrecoinfinito","text":""},{"location":"tags/#plugin","title":"plugin","text":""},{"location":"tags/#poligoni","title":"poligoni","text":""},{"location":"tags/#post","title":"post","text":""},{"location":"tags/#prevalenza","title":"prevalenza","text":""},{"location":"tags/#processing","title":"processing","text":""},{"location":"tags/#progetto","title":"progetto","text":""},{"location":"tags/#progressive","title":"progressive","text":""},{"location":"tags/#propedeutico","title":"propedeutico","text":""},{"location":"tags/#prossimita","title":"prossimit\u00e0","text":""},{"location":"tags/#prova","title":"prova","text":""},{"location":"tags/#pull-request","title":"pull-request","text":""},{"location":"tags/#punti","title":"punti","text":""},{"location":"tags/#quota","title":"quota","text":""},{"location":"tags/#record","title":"record","text":""},{"location":"tags/#regex","title":"regex","text":""},{"location":"tags/#relazioni","title":"relazioni","text":""},{"location":"tags/#release","title":"release","text":""},{"location":"tags/#reticolo","title":"reticolo","text":""},{"location":"tags/#ricerca","title":"ricerca","text":""},{"location":"tags/#rinomina","title":"rinomina","text":""},{"location":"tags/#risorse","title":"risorse","text":""},{"location":"tags/#risposte","title":"risposte","text":""},{"location":"tags/#selezionare","title":"selezionare","text":""},{"location":"tags/#sessadecimale","title":"sessadecimale","text":""},{"location":"tags/#sessagesimale","title":"sessagesimale","text":""},{"location":"tags/#shortest-line","title":"shortest-line","text":""},{"location":"tags/#software","title":"software","text":""},{"location":"tags/#sovrapposizione","title":"sovrapposizione","text":""},{"location":"tags/#spatial-join","title":"spatial-join","text":""},{"location":"tags/#sr","title":"sr","text":""},{"location":"tags/#stile","title":"stile","text":""},{"location":"tags/#supporter","title":"supporter","text":""},{"location":"tags/#tabella","title":"tabella","text":""},{"location":"tags/#tempo","title":"tempo","text":""},{"location":"tags/#test","title":"test","text":""},{"location":"tags/#testo","title":"testo","text":""},{"location":"tags/#traduzione","title":"traduzione","text":""},{"location":"tags/#transform","title":"transform","text":""},{"location":"tags/#univoco","title":"univoco","text":""},{"location":"tags/#valori","title":"valori","text":""},{"location":"tags/#value","title":"value","text":""},{"location":"tags/#variabile","title":"variabile","text":""},{"location":"tags/#versione","title":"versione","text":""},{"location":"tags/#vertici","title":"vertici","text":""},{"location":"tags/#vestizione","title":"vestizione","text":""},{"location":"tags/#virtuale","title":"virtuale","text":""},{"location":"tags/#wkt","title":"wkt","text":""},{"location":"tags/#x","title":"x","text":""},{"location":"tags/#y","title":"y","text":""},{"location":"tags/#z","title":"z","text":""},{"location":"traduzione/","title":"Traduzione","text":"

La descrizione delle funzioni in italiano \u00e8 stata realizzata dal gruppo di traduttori diretti da Stefano Campus

Marco Braida, Stefano Campus, Roberta Castelli, Francesco D'Amore, Eleonora D'Elia, Simone Falceri, Giulio Fattori, Matteo Ghetta, Federico Gianoli, Marco Grisolia, Italang, Luca76, Pipep, Valerio Pinna, Alberto Vallortigara, Salvatore Fiandaca (reporter)*, Giuseppe Mattiozzi (documentation)

","tags":["traduzione","gui","interfaccia","versione"]},{"location":"traduzione/#qgis-ltr","title":"QGIS LTR","text":"","tags":["traduzione","gui","interfaccia","versione"]},{"location":"traduzione/#qgis-corrente","title":"QGIS corrente","text":"","tags":["traduzione","gui","interfaccia","versione"]},{"location":"traduzione/#qgis-dev","title":"QGIS dev","text":"

* PR

","tags":["traduzione","gui","interfaccia","versione"]},{"location":"traduzione/#gruppo-telegram-traduttori","title":"Gruppo Telegram Traduttori","text":"","tags":["traduzione","gui","interfaccia","versione"]},{"location":"blog/","title":"Blog","text":""},{"location":"blog/2023/09/10/hfcqgis-e-la-sezione-blog/","title":"HfcQGIS e la sezione Blog","text":"","tags":["blog"]},{"location":"blog/2023/09/10/hfcqgis-e-la-sezione-blog/#introduzione","title":"Introduzione","text":"

Benvenuti nel nuovo blog di HfcQGIS!

HfcQGIS \u00e8 la guida al calcolatore di campi di QGIS per la condivisione di conoscenze ed ora ha il suo Blog!!!.

HfcQGIS \u00e8 un sito web nato nel 2018 da un'idea di Tot\u00f2 Fiandaca e realizzato con la comunit\u00e0 OpenDataSicilia, un particolare grazie va a Giovan Battista Vitrano che mantiene sempre aggiornato il tema del sito alle ultime novit\u00e0. L'obiettivo iniziale del sito era quello di fornire una guida completa al calcolatore di campi, un potente strumento che consente di eseguire calcoli sui dati geografici.

Negli anni, HfcQGIS si \u00e8 evoluto in una piattaforma di condivisione di contenuti per la comunit\u00e0 QGIS. Il sito offre ora una serie di risorse, tra cui:

L'ultima novit\u00e0 di HfcQGIS \u00e8 la possibilit\u00e0 di scrivere dei blog rimanendo nello stesso spazio. Grazie a un plugin sviluppato nel tema Material for MkDocs da Martin Donath, gli utenti possono creare e gestire i propri blog direttamente sul sito.

Questa nuova funzionalit\u00e0 rende HfcQGIS una piattaforma ancora pi\u00f9 ricca e versatile. Il sito \u00e8 ora un punto di riferimento per chi usa QGIS, sia per l'apprendimento che per la condivisione di conoscenze.

","tags":["blog"]},{"location":"blog/2023/09/10/hfcqgis-e-la-sezione-blog/#i-vantaggi-di-hfcqgis","title":"I vantaggi di HfcQGIS","text":"

HfcQGIS offre una serie di vantaggi per gli utenti QGIS, tra cui:

Grazie per essere qui e benvenuti nel nuovo blog di HfcQGIS!

","tags":["blog"]},{"location":"blog/2023/09/10/hfcqgis-e-la-sezione-blog/#ringraziamenti","title":"Ringraziamenti","text":"","tags":["blog"]},{"location":"blog/2023/09/14/array-nel-field-calc/","title":"Array nel field calc","text":"","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#introduzione","title":"Introduzione","text":"

Il gruppo Array \u00e8 stato introdotto in QGIS nella prima versione di QGIS 3.0 Girona nel lontano 2018, nella descrizione leggiamo:

GRUPPO ARRAY

Nuovo gruppo che contiene funzioni di espressione per la creazione e la manipolazione di array (noti anche come strutture di dati di elenco). L'ordine dei valori all'interno dell'array \u00e8 importante, contrariamente alla struttura dei dati \"mappa\", dove l'ordine delle coppie chiave-valore \u00e8 irrilevante e i valori sono identificati dalle rispettive chiavi.

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#cosa-sono-gli-array","title":"Cosa sono gli Array","text":"

Un array (detto anche vettore o matrice) in informatica, indica una struttura dati complessa, statica/dinamica e omogenea. Gli array, presenti praticamente in tutti i linguaggi di programmazione o di scripting, sono ispirati alla nozione matematica di vettore (quando monodimensionali) o di matrice (nel caso di array bidimensionali). L' array \u00e8 in genere classificato come un costruttore di tipo: in altre parole, esso consente di definire nuovi tipi di dati a partire da tipi preesistenti, attraverso l'aggregazione di diversi oggetti tutti di uno stesso tipo. Ciascun oggetto componente \u00e8 individuato attraverso un indice intero, nel caso monodimensionale, o attraverso D indici interi nel caso D-dimensionale. Noi vedremo solo il caso monodimensionale.

Si pu\u00f2 immaginare un array come una sorta di contenitore, le cui caselle sono dette celle (o elementi) dell'array stesso. Ciascuna delle celle si comporta come una variabile tradizionale; tutte le celle sono variabili di uno stesso tipo preesistente, detto tipo base dell'array. Si parler\u00e0 perci\u00f2 di tipi come \"array di interi\", \"array di stringhe\", \"array di caratteri\" e cos\u00ec via.

Ciascuna delle celle dell'array \u00e8 identificata da un valore di indice. L'indice \u00e8 generalmente numerico e i valori che gli indici possono assumere sono numeri interi contigui che partono da 0 o da 1 o, pi\u00f9 raramente, da un valore arbitrario. La possibilit\u00e0 di accedere agli elementi attraverso un indice \u00e8 la principale caratteristica di un array. \u00c8 possibile accedere singolarmente ad una sua generica posizione (\"accesso casuale\", come per la memoria), oltre a scorrerlo sequenzialmente in entrambe le direzioni tramite un ciclo iterativo in tutti i suoi elementi o a partire da alcuni di essi.

WikiPedia

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#caratteristiche-degli-array-in-qgis","title":"Caratteristiche degli Array in QGIS","text":"","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#tabella-degli-attributi","title":"Tabella degli attributi","text":"

Ogni tabella degli attributi pu\u00f2 essere vista come un insieme di array, uno per ogni colonna; quindi array data, array sigla_provincia, array totale_casi

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#gruppo-array-nel-field-calc","title":"Gruppo Array nel Field Calc","text":"

L'indice parte sempre da 0, il primo elemento ha indice 0, l'ultimo -1 (Stile Python). Nella 3.6 Noosa, Nyall abilita l'uso delle parentesi quadre [], quindi:

questo \u00e8 utile per due motivi: 1. semplifica; 2. dentro le parentesi quadre possiamo mettere altre espressioni e/o variabili (array(1,2,3,4,5,6)[array_length(array(1,2,3,4,5,6))/2])

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#esempi","title":"Esempi","text":"","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#crea-un-array","title":"crea un array","text":"

array con i valori numerici 1,2 e 3

array (1,2,3)\n

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#creare-array-con-tre-valori-di-testo","title":"creare array con tre valori di testo","text":"

Andrea, Gianni e Toto

array ('Andrea', 'Gianni', 'Tot\u00f2')\n

Come estrarre un valore?

ricorda che l'indice degli array parte da 0, con -1 estrae l'ultimo, con -2 il penultimo

- array (1,2,3)[1] ---> 2\n- array ('Andrea', 'Gianni', 'Tot\u00f2')[-2] ---> 'Gianni'\n- array (1,2,3)[-1] ---> 3\n- array (1,2,3)[2] ---> 3\n- array ('Andrea', 'Gianni', 'Tot\u00f2')[0] ---> 'Andrea'\n- array ('Andrea', 'Gianni', 'Tot\u00f2')[1] ---> 'Gianni'\n- array ('Andrea', 'Gianni', 'Tot\u00f2')[2] ---> 'Tot\u00f2'\n- array ('Andrea', 'Gianni', 'Tot\u00f2')[-1] ---> 'Tot\u00f2'\n
","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#calcolare-il-valore-max","title":"Calcolare il valore max","text":"

massimo, minimo e medio di questa serie di numeri: 12,4,23,56,31

- array_max (array(12,4,23,56,31)) ---> 56\n- array_min (array(12,4,23,56,31)) ---> 4\n- array_mean (array(12,4,23,56,31)) ---> 25.2\n

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#ordinare-larray-dellesempio-precendete","title":"Ordinare l'array dell'esempio precendete","text":"

- array_sort(array(12,4,23,56,31), ascending:=true) ---> [ 4, 12, 23, 31, 56 ]\n- array_sort(array(12,4,23,56,31), ascending:=false) ---> [ 56, 31, 23, 12, 4 ]\n

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#supponiamo-di-avere-un-vettore","title":"Supponiamo di avere un vettore","text":"

o una tabella attributi qualsiasi, sotto un esempio:

id valori descrizione 1 1234 QGIS 2 25 GDAL 3 234 Mapshaper 4 123 GRASS 5 1000 SAGA 6 0 VisiData 7 -50 Miller

qui file csv

Creare gli array usando le colonne valore e descrizione:

array valori

array_agg (\"valori\") \n

array descrizione

array_agg (\"descrizione\") \n

","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#creare-un-array-contenente-una-sequenza-di-numeri","title":"Creare un array contenente una sequenza di numeri","text":"
generate_series(1,10,2)\n
","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#lunghezza-di-un-array","title":"Lunghezza di un array","text":"

\u00e8 possibile calcolare la lunghezza di un array, ovvero, quanti vaolori contiene:

- array_length(generate_series(1,100,3)) ---> 34\n- array_length(array_agg (\"descrizione\")) ---> 7\n
","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/14/array-nel-field-calc/#aggiungero-altri-esempi-tornate-spesso-per-leggerli","title":"aggiunger\u00f2 altri esempi, tornate spesso per leggerli!!!","text":"","tags":["blog","espressioni","array"]},{"location":"blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/","title":"Come cercare un valore in funzione di un altro","text":"","tags":["blog","cerca_valori","get_feature"]},{"location":"blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/#introduzione","title":"Introduzione","text":"

Alcune volte nasce l'esigenza di cercare un valore in una tabella in funzione di un altro valore presente nella stessa tabella, un po' come fa la funzione cerca verticale di Excel, e utilizzarlo in un altro layer.

Funzione

La funzione che permette di fare questa magia \u00e8 la funzione get_feature

Per capire meglio come usare la funzione, facciamo un esempio pratico derivante da un caso concreto che mi \u00e8 stato chiesto di risolvere qualche settimana fa, per ovvi motivi, generalizzer\u00f2 il problema.

Supponiamo di avere una griglia regolare:

nella tabella degli attributi il campo quadrante indica il nome del quadrato.

Un file matrice.csv rappresenta una matrice di valori che legano l'attributo specie con un valore per ogni quadrante.

Tracciando un punto all'interno del reticolo e selezionando la specie, popolare automaticamente l'attributo cella presente nello shapefile puntuale e l'attributo quadrante:

attribute(get_feature('matrice', 'specie', \"specie\" ), \"quadrante\")\n

overlay_within('Reticolo',\"quadrante\")[0]\n

","tags":["blog","cerca_valori","get_feature"]},{"location":"blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/#demo","title":"Demo","text":"","tags":["blog","cerca_valori","get_feature"]},{"location":"blog/2023/09/12/come-cercare-un-valore-in-funzione-di-un-altro/#riferimenti","title":"RIFERIMENTI","text":"","tags":["blog","cerca_valori","get_feature"]},{"location":"blog/2023/09/25/help-in-linea/","title":"Help in linea","text":"","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/25/help-in-linea/#introduzione","title":"Introduzione","text":"

L'help in linea del motore di espressioni di QGIS \u00e8 utile e va consultato sempre. In questo post vediamo alcuni aspetti importanti.

Help in linea Field Calc

L'help in linea del Field calc \u00e8 indispensabile per un uso corretto delle espressioni, contiene la definizione della funzione/espressione, la sintassi, spiegazione degli argomenti ed esempi

","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/25/help-in-linea/#struttura","title":"Struttura","text":"

Come \u00e8 ben visibile dallo screenshot, l' help in linea \u00e8 caratterizzato da quattro parti fondamentali:

  1. definizione della funzione:

    1. la definizione \u00e8 indispensabile perch\u00e9 fa capire cosa si pu\u00f2 fare e cosa non si pu\u00f2 fare con la funzione in oggetto;
    2. alcune volte ha, nel testo, dei rimandi che spiegano ulteriormente l'uso della funzione;
  2. sintassi:

    1. spiega come usare la funzione stessa tramite gli argomenti il cui ordine \u00e8 fondamentale;
    2. i parametri denominati permettono di alterare l'ordine degli argomenti e rendere pi\u00f9 leggibile le espressioni;
    3. indica gli argomenti obbligatorio e quelli opzionali;
  3. argomenti:

    1. alcune funzioni non hanno argomenti, come per esempio quelle funzioni geometriche che iniziono per $;
    2. altre funzioni hanno molti argomenti, ma non tutti sono obbligatorio;
  4. esempi:

    1. ci sono esempi che spiegano l'uso della funzione;
    2. spesso ci sono pi\u00f9 di un esempio in cui vengono usate i vari argomenti.

Alcune funzioni (per esempio length) possono avere pi\u00f9 definizioni, pi\u00f9 sintassi, pi\u00f9 argomenti ed esempi, ovvero possono avere delle varianti.

","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/25/help-in-linea/#definizione","title":"Definizione","text":"

Consultare la definizione \u00e8 di vitale importanza perch\u00e9 fa capire la differenza tra la funzione $area e area, tra $length e length e tra $perimeter e perimeter: la differenza \u00e8 sostanziale e non conoscerla porterebbe a grossi e grossolani errori.

","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/25/help-in-linea/#sintassi","title":"Sintassi","text":"

In generale la sintassi \u00e8 qualcosa che occorre conoscere per poter usare la funzione stessa, in pratica \u00e8 la successione di argomenti da utilizzare e definisce quali sono obbligatorio e quali no.

La sintassi deve essere seguita alla lettera altrimenti la funzione restituir\u00e0 sempre errore.

esempio:

ha sei argomenti, i primi tre obbligatori, gli altri sono tra parentesi quadre, quindi sono opzionali.

i primi tre argomenti vanno scritti per come li leggiamo: prima va scritto il layer, poi l'aggregate ed infini l'expression, sotto un esempio:

\u00c8 anche possibile utilizzare i parametri denominati, questi hanno due vantaggi: rendono pi\u00f9 leggibile l'espressione e permettono di non seguire rigorosamente l'ordine degli argomenti, sotto un esempio:

oppure, funzionerebbe modificando l'ordine degli argomenti:

oppure \u00e8 possibile andare a capo:

aggregate (\n  aggregate:='count',\n  layer:='nomeLayer',\n  expression:=\"nomeAttributo\")\n
la nota importante \u00e8 che occorre scrive il parametro denominato seguito da :=.

","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/25/help-in-linea/#argomenti","title":"Argomenti","text":"

Gli argomenti possono essere testo, numeri, nomi di layer, funzioni statistiche (count, min, max, ecc...), espressioni, variabili; gli argomenti possono fare da filtro, da raggruppamento o per ordinare.

Nell'help ogni argomento \u00e8 ben descritto ed \u00e8 suggerito di consultarlo.

","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/25/help-in-linea/#esempi","title":"Esempi","text":"

In fondo, alla guida in linea, di ogni funzione \u00e8 presente almeno un esempio, spesso pi\u00f9 esempi che rendono ancora pi\u00f9 chiaro l'utilizzo della funzione stessa.

","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/25/help-in-linea/#hfcqgis","title":"HfcQGIS","text":"

In questo stesso sito trovate ulteriore materiale utile legato al Field Calc: https://hfcqgis.opendatasicilia.it/calcolatore_campi/field_calc/

","tags":["blog","help","parametri","argomenti"]},{"location":"blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/","title":"Impostazioni di progetto influenzano alcune funzioni","text":"","tags":["blog","progetto","impostazioni","ellissoide","misure"]},{"location":"blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/#introduzione","title":"Introduzione","text":"

Alcune funzioni di QGIS dipendono dalle impostazioni di progetto, questo significa che le stesse funzioni in progetti diversi possono restituire valori diversi. In questo post vedremo le principali funzioni di QGIS da attenzionare.

esempio

$area <> area(@geometry)

","tags":["blog","progetto","impostazioni","ellissoide","misure"]},{"location":"blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/#impostazioni-dellellissoide-di-progetto","title":"Impostazioni dell'ellissoide di progetto","text":"

In realt\u00e0 la schermata di sotto \u00e8 raggiungibile dal menu Progetto | Propriet\u00e0... (Ctrl + Shift + P) sezione Generale | Misure

qui \u00e8 possibile settare l'Ellissoide, le unit\u00e0 di misura per le distanze e per le aree.

Se l'Ellissoide \u00e8 attivo, i calcoli saranno fatti secondo la selezione, se invece \u00e8 spento o c'\u00e8 scritto None / Planimetric, tutte le funzioni che dipendevano da questa impostazione restituiranno un risultato compatibile alla scelta e quindi misure planimetriche: in questo caso $area = area(@geometry).

","tags":["blog","progetto","impostazioni","ellissoide","misure"]},{"location":"blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/#lista-funzioni","title":"Lista funzioni","text":"

sotto una breve lista di funzioni che dipendono dalle impostazioni dell'ellissoide di progetto:

","tags":["blog","progetto","impostazioni","ellissoide","misure"]},{"location":"blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/#esempi","title":"Esempi","text":"

Impostazioni dell'Ellissoide di Progetto attivo:

Impostazioni dell'Ellissoide di Progetto spento:

NOTA BENE: Anche le Unit\u00e0 di misura influenzano il risultato, quindi occhio a come sono impostate: perch\u00e9 se fossero impostare in chilomentri e chilometri quadrati, le relative funzioni restituirebbero valori con queste unit\u00e0!.

","tags":["blog","progetto","impostazioni","ellissoide","misure"]},{"location":"blog/2023/09/13/impostazioni-di-progetto-influenzano-alcune-funzioni/#riferimenti","title":"RIFERIMENTI","text":"","tags":["blog","progetto","impostazioni","ellissoide","misure"]},{"location":"blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/","title":"Estrarre numero pagine da un PDF","text":"","tags":["blog","espressioni","pdf"]},{"location":"blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/#introduzione","title":"Introduzione","text":"

Un utente di QGIS mi contatta e mi chiede come estrarre il numero di pagine di un PDF usando le espressioni di QGIS.

Funzione personalizzata

QGIS ha centinaia di espressioni, per quelle che mancano o per crearne di nuove \u00e8 possibile aggiungere delle funzioni personalizzate usando PyQGIS

","tags":["blog","espressioni","pdf"]},{"location":"blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/#installazione-libreria","title":"Installazione libreria","text":"

Con le librerie/moduli python \u00e8 possibile fare quasi tutto, per il nostro scopo esiste una libreria dedicata che va installata perch\u00e9 non \u00e8 tra le librerie standard usate in QGIS.

Per chi usasse l'installatore OSGeo4W Network installer, basta cercare pdf (1) comparir\u00e0 la libreria e selezionarla (2):

","tags":["blog","espressioni","pdf"]},{"location":"blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/#funzione-personalizzata","title":"Funzione personalizzata","text":"

La funzione personalizzata \u00e8 stata creata dall' amico (G. Fattori) che nel tempo libero soddisfa ogni mia richiesta (grazie mille).

# Korto19 2023\nfrom qgis.core import *\nfrom qgis.gui import *\nfrom PyPDF2 import PdfReader\n\n@qgsfunction(group='HfcQGIS',referenced_columns=[])\ndef Get_Pdf_N_Pages(pdfpath, *args, **kwargs):\n    \"\"\"\n    Restituisce il numero di pagine di un pdf dando il percorso\n    <h2>Example usage:</h2>\n    <ul>\n      <li>Get_Pdf_N_Pages(pdfpath)-> 3</li>\n    </ul>\n    \"\"\"\n\n    reader = PdfReader(str(pdfpath))\n    number_of_pages = len(reader.pages)\n\n    return number_of_pages\n

per usare lo script:

  1. salvarlo in *.py (oppure scaricalo da qui);
  2. spostare il file in C:\\Users\\nomeUtente\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\python\\expressions
  3. riavviare QGIS;
  4. troverete la funzione nel field calc nel gruppo HfcQGIS, che verr\u00e0 creato automaticamente dopo lo spostamente del file.

l'attributo \"link\" contiene i percorsi assoluti a dei PDF, sotto un esempio di tabella degli attributi:

NB: Quando popolate l'attributo link, sotto windows, occorre usare \\\\ e non \\ altrimenti vi restituir\u00e0 errore!!!

esempio:

","tags":["blog","espressioni","pdf"]},{"location":"blog/2023/09/15/estrarre-numero-pagine-da-un-pdf/#riferimenti","title":"RIFERIMENTI","text":"

In questo stesso sito #HfcQGIS trovate decine di funzioni personalizzate nella sezione Custom

Un GROSSO grazie a Giulio Fattori, un utente QGIS e autore di molti plugin per QGIS

","tags":["blog","espressioni","pdf"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/","title":"Le variabili in QGIS","text":"","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#introduzione","title":"Introduzione","text":"

Le variabili sono una nuova funzionalit\u00e0 introdotta in QGIS 2.12 Lyon (2015) che consente di creare valori preimpostati da utilizzare ovunque sia possibile utilizzare un'espressione.

Variabili

Rappresentano un nuovo concetto che d\u00e0 la possibilit\u00e0 di impostare variabili personalizzate da utilizzare nel motore delle espressioni di QGIS

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#cassetti","title":"Cassetti","text":"

Possiamo immaginare le variabili come dei cassetti all'interno dei quali possiamo immagazzinare qualcosa da utilizzare quando necessario. Il contenuto dei cassetti pu\u00f2 essere un testo, un numero, una espressione. Le variabili possono essere statiche, ovvero, il loro contenuto \u00e8 sempre lo stesso, oppure dinamico, ovvero, cambia in funzione del contesto.

flowchart LR;\n   style id0 fill:#dd8c73,stroke:#343,color:#000000,stroke-width:2px\n   style id1 fill:#ee7a13,stroke:#343,color:#000000,stroke-width:2px\n   style id2 fill:#ed7b88,stroke:#343,color:#000000,stroke-width:2px\n   id0[TESTO]\n   id1[1234]\n   id2[$area/10000]
","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#esempio-chiarificatore","title":"Esempio chiarificatore","text":"

Ecco un primo esempio che far capire le potenzialit\u00e0 delle variabili: supponiamo che nel nostro progetto QGIS ci siano 5 layer vettoriali e per ognuno avessimo attivato e configurato le etichette. Supponiamo di voler cambiare la dimensione dell'etichette a tutte e 5 i layer, occorrerebbe aprire le propriet\u00e0 del layer ben 5 volte, una per ogni layer. Ma se impostassimo, a livello di progetto, una variabile altezza_etichetta e mettessimo dentro il valore 15, basterebbe modificare una sola volta questa variabile per vedere le modifiche su tutti i layer in cui l'avessimo utilizzata.

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#contesto","title":"Contesto","text":"

Come detto prima, le variabili sono sensibili al contesto, quindi alcune variabili sono utilizzabili ovunque, altre no; per esempio la variabile @grid_axis \u00e8 utilizzabile solo nel compositore di stampe. Nel gruppo delle funzioni, presente sia nel Field Calc che in ogni altro Costruttore stringhe espressioni, l'elenco delle variabile \u00e8 molto variabile! perch\u00e9, ripeto, dipende dal contesto.

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#ambito","title":"Ambito","text":"

Oltre al contesto, le variabili, dipendono anche dall'ambito, ovvero, esisitono 4 ambiti principali: Globale, Progetto, Layer, Print Layout, Oggetto del print layout, questi ambiti sono tutti impilati uno sopra l'altro in ordine dal meno specifico al pi\u00f9 specifico. Gli ambiti pi\u00f9 specifici sovrascrivono eventuali variabili in conflitto esistenti da ambiti meno specifici: supponiamo di aver creato una variabile Globale mio_nome e successivamente altra variabile a livello di Progetto con stesso nome, la variabile globale verrebbe sovrascritta da quella di progetto.

flowchart LR;\n   style id0 fill:#ed7b13,stroke:#343,color:#000000,stroke-width:2px\n   style id1 fill:#ed7b13,stroke:#343,color:#000000,stroke-width:2px\n   style id2 fill:#ed7b13,stroke:#343,color:#000000,stroke-width:2px\n   style id3 fill:#ed7b13,stroke:#343,color:#000000,stroke-width:2px\n   style id4 fill:#ed7b13,stroke:#343,color:#000000,stroke-width:2px\n   id0(((\"GLOBALE\")))--> \n   id1(((Progetto)))-->\n   id2(((Layer)))-->\n   id3(((Print Layout)))-->\n   id4(((Oggetto \\n Print Layout)))

La variabile Blog definita a livello Globale \u00e8 utile in quanto la ritrovo sempre se lavoro nel mio PC e per qualsiasi sessione di lavoro. La variabile Blog definita a livello di Progetto \u00e8 usabile SOLO in questo progetto.

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#atlante","title":"Atlante","text":"

Alcune variabili dipendono anche dalla creazione dell'atlante, ovvero, fin quanto non \u00e8 stato creato un altlante, le relative variabili (@atlas_feature, @atla_geometry ecc...) non saranno n\u00e9 visibili n\u00e9 utilizzabili da nessuna parte, come \u00e8 ovvio.

flowchart TD\n    A[Progetto QGIS] --> B{Atlas?}\n    B -->|Impostato| C[OK per le variabili] -->D[\"@atlas_feature\\n@atlas_geometry\\n@atlas_pagename\\n...\"] \n    B -->|Non impostato| E[Variabili NON usabili]

Qui sfruttando sempre l'icona in basso a destra, \u00e8 possibile aggiungere variabili in funzione all'oggetto selezionato, nel caso specifico sarebbe l'atlante.

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#dinamiche-contestuali","title":"Dinamiche contestuali","text":"

Alcune variabili dinamiche, come per esempio @map_scale, restituiscono valori diversi a seconda di dove viene utilizzata: map canvas, mappe nuove, mappa print layout; questo perch\u00e9 la variabile riconosce dove \u00e8 stata richiamata.

Ho etichettato lo stesso layer con la variabile @map_scale ma in tre contesti diversi visualizzo tre valori diversi!!!

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#creare-variabile-al-volo","title":"Creare variabile al volo","text":"

Infine, esiste una funzione with_variable che permette di creare, al volo, una variabile all'interno di una espressione complessa. Questo \u00e8 molto utile quando, in espressioni lunghe e complesse, ci sono parti di espressioni che si ripetono pi\u00f9 volte, per esempio $area/10000, potrei crearla come variabile e chiamrla @areaEttari, questo ha un duplice vantaggio: 1. rende l'espresione pi\u00f9 leggibile; 2. rende l'espressione pi\u00f9 veloce, perch\u00e9 quel valore verrebbe calcolato solo una volta e non enne volte.

Osservazione: tutte le variabili iniziano con @, quindi se volessi usare la variabile row_number dovrei necessariamente scrivere @row_number

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#variabili-predefinite","title":"Variabili predefinite","text":"

Quando utiliziamo il Filed Calc o un qualsiasi costruttore Stringhe Espressione, nel gruppo funzioni ci sono, in cima all'elenco e in neretto, una serie di variabili predefinete pronte all'uso e contestualizzate, ovvero cambiano a seconda del contesto:

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#simbologia","title":"simbologia","text":"

in questo caso il contesto \u00e8 simbologia:

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#etichette","title":"etichette","text":"

in questo caso \u00e8 etichettatura:

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#print-layout","title":"print layout","text":"

in questo caso Print Layout, reticolo

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#variabile-speciale-value","title":"Variabile speciale value","text":"

\u00c8 stata introdotta, sempre da Nyall, una variabile speciale che viene utilizzata soprattutto nella sovrascrittura definita dai dati , ovvero, in tutti quei casi in cui \u00e8 possibile pilotare le caratterisitiche delle etichette o della simbologia tramite dati o espressioni. La variabile si chiama @value.

Questa variabile rientra tra le variabili dinamiche e contestuali perch\u00e9 pu\u00f2 assumere vari valori a seconda della caratteristica utilizzata. In sostanza la variabile @value assume il valore corrente presente nel widget di riferimento. (l'esempio che segue chiarir\u00e0 il concetto).

La variabile @value nel caso di Dimensione assume il valore presente nel relativo widget, nel caso in esame @value=14; nel caso di colore sar\u00e0 nero, nel caso di Stile sar\u00e0 Regular.

La prima cosa interessante \u00e8 che appena modifico il valore nel widget, cambia anche il valore associato alla variabile; la seconda cosa interessante \u00e8 che posso usare la variabile in una espressione, per esempio:

IF (@value <= 14, 0, @value)\n
ovvero, per qualsiasi valore inserito nel widget minore o uguale a 14, la dimensione del testo sar\u00e0 0, ovvero non visibile, altrimenti lascia il valore corrente!!!

Non fate caso all'anteprima, segner\u00e0 sempre NULL e nell'Help ci sar\u00e0 sempre scritto non impostato.

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#formattazione-condizionale","title":"Formattazione condizionale","text":"

nella stessa versione di QGIS 2.12 Lyon, Nathan Woodrow introduce la possibilit\u00e0 di realizzare la formattazione condizionale nelle tabelle degli attributi, un po' come in Excel.

In questo contesto esiste una variabile @value che rappresente sempre il valore corrente dell'attributo usato.

Da punto di vista del codice, sembrerebbero due variabile che non hanno nulla a che fare l'una con l'altra, infatti l'una \u00e8 stata implementata da Nyall, l'altra da Nathan; unica cosa in comune \u00e8 che sono state rilascite nella stessa versione di QGIS.

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#esempi-di-uso","title":"Esempi di uso","text":"","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#discussioni","title":"Discussioni","text":"

Per chi volesse discuterne, approfondire o semplicemente lasciare un commento, qui \u00e8 il posto migliore.

","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#riferimenti","title":"RIFERIMENTI","text":"","tags":["blog","variabile","formattazione","value"]},{"location":"blog/2023/09/18/le-variabili-in-qgis/#ringraziamenti","title":"RINGRAZIAMENTI","text":"","tags":["blog","variabile","formattazione","value"]},{"location":"calcolatore_campi/concetti/","title":"Concetti fondamentali sul calcolatore di campi di QGIS","text":"

Intro

In questa sezioni sono raccolti i concetti fondamentali sul Field Calc espressi tramite un elenco puntato. La conoscenza di questi concetti permette di velocizzare il lavoro e capire il comportamento del Field Calc.

  1. il calcolatore di campi \u00e8 attivabile solo per layer vettoriale1 e tabelle editabili2;
  2. la creazione di un nuovo campo \u00e8 relativo al layer selezionato nella TOC (Pannello Layer);
  3. il calcolatore popola un campo per volta (la modifica multipla \u00e8 un caso particolare);
  4. l'output del calcolatore popola, in generale, tutte le celle (della colonna) della tabella attributi o solo quelle selezionate (caso particolare);
  5. nella tabella attributi tutte le operazioni agiscono riga per riga (questo \u00e8 uno dei motivi della lentezza di alcuni processi);
  6. \u00e8 possibile richiamare altri layer tramite le funzione get_feature, get_feature_by_id e aggregate e overlay*_;
  7. il risultato delle funzioni di aggregazione verr\u00e0 ripetuto in tutte le righe (questo \u00e8 uno dei motivi della lentezza di alcuni processi);
  8. \u00e8 possibile aggiornare la geometry >= QGIS 2.14;
  9. $area, $perimeter ecc.. il $ davanti ad una funzione significa che riguarda la geometry corrente;
  10. i nomi dei layer vanno scritti tra apici semplici ('nome_layer') mentre i nomi dei campi con doppi apici (\"nome_campo\") ma funziona anche senza apici, ma per evitare problemi \u00e8 consigliato i doppi apici;
  11. i valori numerici vanno scritti senza apici es: 10, mentre i valori alfanumerici vanno scritti tra apici semplici es: 'Sicilia';
  12. l'anteprima del calcolatore (pto 17 - vedi screenshot) \u00e8 utile ma non sempre corretta o completa; provate la funzione to_datetime o usare funzioni che restituiscono un output lungo;
  13. con il doppio clic \u00e8 possibile aggiungere funzioni o valori nelle espressioni nell'area di editing;
  14. \u00e8 possibile aggiungere funzioni personalizzate tramite codice Python nel gruppo Custom;
  15. \u00e8 possibile aggiungere altri gruppi di funzioni tramite plugin es:refFunction \u2192 gruppo Reference;
  16. \u00e8 possibile editare/salvare/importare/esportare e condividere espressioni utente; >= QGIS 3.12;
  17. \u00e8 possibile cambiare l'attributo visualizzabile in Elemento dalle propriet\u00e0 Suggerimenti del layer;
  18. \u00e8 possibile aumentare la dimenzione del testo all'interno dell'editor tramite la rotellina del mouse (Ctrl+rotellina)
  19. \u00e8 possibile personalizzare i colori e i font utilizzati nell'area di scrittura espressioni da Impostazioni|Opzioni|IDE;
  20. Campi e valori sono visibili sia per il layer corrente che per tutti i layer vettoriali (nel Gruppo Layer Mappa)
Video 1 Video 2 Video 3
  1. in contrapposizione ai layer raster\u00a0\u21a9

  2. non tutti i layer in QGIS sono editabili, come per esempio layer CSV\u00a0\u21a9

","tags":["concetti","propedeutico","fieldCalc"]},{"location":"calcolatore_campi/editor_delle_funzioni/","title":"Editor delle funzioni","text":"

Con la scheda Editor delle funzioni , puoi scrivere le tue funzioni in linguaggio Python. Ci\u00f2 fornisce un modo pratico e comodo per soddisfare esigenze particolari che non sarebbero coperte dalle funzioni predefinite.

La scheda \u00e8 raggiungibile dall'interfaccia del Calcolatore di Campi o da qualsiasi interfaccia che permetta l'accesso al Costruttore stringhe espressione:

","tags":["concetti","propedeutico","fieldCalc","custom"]},{"location":"calcolatore_campi/editor_delle_funzioni/#creare-una-nuova-funzione","title":"Creare una nuova funzione","text":"
  1. premere il pulsante per aggiungere nuovo file;
  2. immettere un nome da utilizzare nel modulo che si apre e premere OK;
  3. un nuovo elemento con il nome fornito viene aggiunto nel pannello di sinistra della scheda Editor funzioni; questo \u00e8 un file Python sul file modello QGIS e memorizzato nella /python/expressions cartella sotto la directory del profilo utente attivo;
  4. il pannello di destra mostra il contenuto del file: un modello di script Python.
  5. aggiorna il codice e il suo aiuto in base alle tue esigenze;
  6. premere il pulsante Salva e carica funzioni. La funzione che hai scritto viene aggiunta all'albero delle funzioni nella scheda Espressione, per impostazione predefinita nel gruppo Custom

NB: Le funzioni Python personalizzate sono memorizzate nella directory del profilo utente, il che significa che ad ogni avvio di QGIS, caricher\u00e0 automaticamente tutte le funzioni definite con il profilo utente corrente. Tieni presente che le nuove funzioni vengono salvate solo nella cartella C:\\Users\\nomeUtente\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\python\\expressions e non nel file di progetto. Se condividi un progetto che utilizza una delle tue funzioni personalizzate dovrai condividere anche il file *.py.

","tags":["concetti","propedeutico","fieldCalc","custom"]},{"location":"calcolatore_campi/editor_delle_funzioni/#eliminare-una-funzione-personalizzata","title":"Eliminare una funzione personalizzata","text":"
  1. abilita la scheda Editor delle funzioni;
  2. selezionare la funzione nell'elenco;
  3. premere l'icona , la funzione verr\u00e0 rimossa dall'elenco e il file corrispondente viene eliminato dalla cartella del profilo utente.

per maggiori info, vai alla guida QGIS

","tags":["concetti","propedeutico","fieldCalc","custom"]},{"location":"calcolatore_campi/editor_delle_funzioni/#esempi","title":"Esempi","text":"

Nella sezione Funzioni Custom ci sono oltre 15 esempi di funzioni personalizzate, grazie a Giulio Fattori

","tags":["concetti","propedeutico","fieldCalc","custom"]},{"location":"calcolatore_campi/field_calc/","title":"Calcolatore di campi","text":"

Intro

Il pulsante nella tabella degli attributi consente di eseguire calcoli sulla base di valori di attributo esistenti o funzioni definite, ad esempio, per calcolare la lunghezza o l'area delle caratteristiche geometriche. I risultati possono essere scritti in un nuovo campo di attributo, un campo virtuale, oppure possono essere utilizzati per aggiornare i valori in un campo esistente.

","tags":["fieldCalc","propedeutico"]},{"location":"calcolatore_campi/field_calc/#perche-usarlo","title":"Perch\u00e9 usarlo","text":"

Il Field Calc di QGIS ha oltre 400 funzioni (in evoluzione) e di queste oltre 1401 sono funzioni geometriche. Tutta questa potenza di calcolo permette di risolvere molti problemi GIS come la vicinanza, sovrapposizione, aggregazioni, selezioni ecc... inoltre permette di scrivere/aggiornare i risultati di espressioni direttamente nella tabella degli attributi senza creare altri layer.

","tags":["fieldCalc","propedeutico"]},{"location":"calcolatore_campi/field_calc/#dove-usarlo","title":"Dove usarlo","text":"

Il calcolatore di campi \u00e8 ora disponibile su qualsiasi livello che supporti la modifica2. Il Calcolatore in realt\u00e0 \u00e8 solo una interfaccia che ci permette di accedere alle funzioni e di creare semplici o complesse espressioni. Le espressioni di QGIS vengono utilizzate in molti contesti, per esempio:

  1. tabella degli attributi;
  2. tematizzazione;
  3. etichettatura;
  4. sovrascrittura definita dai dati;
  5. selezione;
  6. compositore di stampe, atlas e report;
  7. legenda;
  8. strumenti di processing: (Calcolatore campi; Seleziona tramite espressione; Estrai tramite espressione; Geometria da espressione; Ordina tramite espressione);
  9. moduli inserimento dati e widget;
  10. azioni;
  11. modellatore grafico;
  12. diagrammi;
  13. filtri;
  14. decorazioni;
  15. propriet\u00e0 layer: variabili;
  16. statistiche;
  17. suggerimenti mappa;
  18. plugin;
  19. ecc..
","tags":["fieldCalc","propedeutico"]},{"location":"calcolatore_campi/field_calc/#campo-virtuale","title":"Campo virtuale","text":"

Un campo virtuale \u00e8 un campo basato su un'espressione calcolata al volo, il che significa che il suo valore viene automaticamente aggiornato non appena il parametro sottostante cambia. L'espressione \u00e8 impostata una volta; non \u00e8 pi\u00f9 necessario calcolare nuovamente il campo se i valori sottostanti cambiano. Ad esempio, \u00e8 possibile utilizzare un campo virtuale se \u00e8 necessario calcolare i valori dell'area durante un processo di digitalizzazione (creazione, unione, divisione di feature) o calcolare una durata che deve essere aggiornata di volta in volta.

","tags":["fieldCalc","propedeutico"]},{"location":"calcolatore_campi/field_calc/#aggiorna-geometria","title":"Aggiorna geometria","text":"

Attraverso il calcolatore di campi \u00e8 possibile aggiornare tutti gli attributi di un layer editabile, ma \u00e8 possibile anche aggiornare la geometria, per esempio diminuire il numero di vertici di una linea o di un poligono; spostare/traslare i punti ecc...

","tags":["fieldCalc","propedeutico"]},{"location":"calcolatore_campi/field_calc/#field-calc-rapido","title":"Field Calc rapido","text":"

La barra del calcolatore di campo rapido, nella parte superiore della tabella degli attributi, \u00e8 visibile solo se il livello \u00e8 modificabile:

  1. nella versione QGIS 3.24\u00a0\u21a9

  2. sono layer vettoriali e semplici tabelle editabili\u00a0\u21a9

","tags":["fieldCalc","propedeutico"]},{"location":"calcolatore_campi/field_calc_processing/","title":"Calcolatore Campi in Processing","text":"","tags":["fieldCalc","propedeutico","processing"]},{"location":"calcolatore_campi/field_calc_processing/#introduzione","title":"Introduzione","text":"

Questo algoritmo calcola un nuovo layer vettoriale con gli stessi elementi del layer in ingresso, ma sovrascrive un attributo esistente o aggiunge un attributo aggiuntivo. I valori di questo campo vengono calcolati da ciascun elemento utilizzando un espressione, in base alle propriet\u00e0 e agli attributi dell'elemento. Se Nome campo \u00e8 un campo esistente nel layer, tutte le altre impostazioni del campo vengono ignorate (OVVERO sovrascrive tutto, contenuto e tipo di dato).

","tags":["fieldCalc","propedeutico","processing"]},{"location":"calcolatore_campi/field_calc_processing/#perche","title":"Perch\u00e9","text":"

L'algoritmo \u00e8 molto utile in quanto:

  1. permette di utilizzare il calcolatore anche nel modellatore grafico;
  2. permette di eseguire processi in serie;
","tags":["fieldCalc","propedeutico","processing"]},{"location":"calcolatore_campi/field_calc_processing/#utilizzo","title":"Utilizzo","text":"

Immaginate di avere centinaia di layer e di dover aggiornare (sovrascrive!!!) i valori di un campo (o vari campi); questo algoritmo, tramite il processo in serie, fa al caso nostro.

","tags":["fieldCalc","propedeutico","processing"]},{"location":"calcolatore_campi/gruppo_espressioni_utente/","title":"Espressioni utente","text":"","tags":["gruppo","propedeutico"]},{"location":"calcolatore_campi/gruppo_espressioni_utente/#cosa-sono","title":"Cosa sono","text":"

\u00c8 un gruppo che contiene espressioni, realizzate dall'utente, memorizzate nel profilo utente.

per definire/aprire un profilo : Impostazioni | Profilo Utente.

Per salvare o modificare le espressioni utente, utilizzare le seguenti icone:

Tutto ci\u00f2 che scriviamo nell'area dell'editor, che risultasse corretto sintatticamente, possiamo salvarlo per un futuro riutilizzo.

Per richiamare una Espressione utente salvata, espandere il gruppo Espressioni utente, selezionare l'espressione e aggiungerla tramite doppio clic.

Questa feature \u00e8 stata aggiunta al core di QGIS grazie a una mia raccolta fondi documentata qui

","tags":["gruppo","propedeutico"]},{"location":"calcolatore_campi/gruppo_espressioni_utente/#dove-vengono-salvate","title":"Dove vengono salvate","text":"

Come detto sopra, le espressioni sono salvate nel profilo utente, in particolare:

C:\\Users\\nomeUtente\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\QGIS\n

Con un editor di testo potete aprire il file QGIS3.ini e cercare expressions

qui tutte le espressioni utente memorizzate. (NB: attenzione a non modificare il file!!!)

","tags":["gruppo","propedeutico"]},{"location":"calcolatore_campi/interfaccia/","title":"Interfaccia calcolatore di campi","text":"

Intro

In questa sezioni descriveremo tutte le parti dell'interfaccia del Field Calc.

  1. se attivato aggiorna solo le geometrie selezionate (indica anche il numero delle feature selezionate);
  2. se attivato crea un nuovo campo;
  3. se attivato crea un campo virtuale;
  4. permette di digitare nome del campo (per shapefile NON pi\u00f9 di 10 caratteri);
  5. permette di selezionare il Tipo di campo in uscita;
  6. permette di digitare la Lunghezzacampo in uscita e relativa precisione in caso di numeri Reali;
  7. permette di accedere al tab Editor delle Funzioni personalizzate (occorre conoscere il linguaggio Python);
  8. icone che permettono di:
  9. cancellare l'editor delle espressioni;
  10. salvare le espressioni utente;
  11. modificare le espressioni utente salvate;
  12. cancellare le espressioni utente salvate;
  13. importa espressioni utente;
  14. esporta funzioni utente.
  15. operatori pi\u00f9 usati:
  16. = uguale;
  17. + somma;
  18. - differenza;
  19. / divisione;
  20. * moltiplicazione;
  21. ^ potenza;
  22. || unione stringhe (doppio pipe);
  23. () parentesi;
  24. '\\n'nuova riga;
  25. editore delle espressioni;
  26. se attivato aggiorna campo esistente (anche la geometria);
  27. elenco di tutti i campi aggiornabili relativi al layer selezionato;
  28. permette di cercare le funzioni, il bottone Mostra Guida permette di abilitare l'area dell'Help;
  29. area dei gruppi funzione;
  30. gruppo Campi e valori relativi al layer selezionato;
  31. permette di visualizzare i valori dei campi presenti nel gruppo Campi e valori;
  32. permette di selezionare l'Elemento per cui visualizzare l'Anteprima;
  33. tasto OK per applicare l'espressione;
  34. Help sulla funzione selezionata.
","tags":["gui","interfaccia","propedeutico"]},{"location":"calcolatore_campi/interfaccia/#commenti-espressione","title":"Commenti espressione","text":"

\u00c8 possibile aggiungere commenti alle espressioni nell'area dell'editor espressioni: 1. per riga intera /*commento*/ 2. per commentare una riga --commento

","tags":["gui","interfaccia","propedeutico"]},{"location":"calcolatore_campi/interfaccia/#campi-e-valori-nel-gruppo-layer-mappa","title":"Campi e valori nel Gruppo Layer Mappa","text":"

A partire da >= QGIS 3.24

","tags":["gui","interfaccia","propedeutico"]},{"location":"calcolatore_campi/interfaccia/#interfaccia-e-finestre-nascoste","title":"Interfaccia e finestre nascoste","text":"

Nel caso risulti nascosta la sezione Gruppi funzioni (vale fino alla QGIS 3.4):

Nel caso risulti nascosta la sezione help in linea:

Per aumentare dimensione caratteri:

","tags":["gui","interfaccia","propedeutico"]},{"location":"calcolatore_campi/operatori/","title":"Operatori interfaccia","text":"

Intro

In questa sezione documenteremo gli operatori presenti nell'interfaccia del Field Calc.

L'interfaccia del calcolatore rende immediatamente disponibili alcuni operatori:

","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#uguale","title":"uguale","text":"
- uguaglianza tra numeri 10 = 10;\n- uguaglianza tra lettere 'A' = 'A' ;\n- uguaglianza tra parole 'Ciao' = 'Ciao';\n- ugualgianza tra stringhe 'Viva QGIS' = 'Viva QGIS';\n- uguaglianza tra campi \"field1\" = \"field2\";\n- uguaglianza tra espressioni $area = area($geometry);\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#somma","title":"somma","text":"
- somma di numeri 10 + 15.4 ;\n- somma di stringhe (unione) 'QGIS' + '3.0' ;\n- somma di campi \"fied1\" + \"field2\"\n- somma di espressioni $perimeter + 500;\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#differenza","title":"differenza","text":"
- differenza tra numeri 250 -200;\n- differenza tra campi \"field1\"-\"field2\"\n- differenza tra espressioni length(\"field1\") - length(\"field2\");\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#divisione","title":"divisione","text":"
- divisione tra numeri 125/5;\n- divisione tra campi \"field1\"/\"field2\";\n- divisione tra espressioni $area/$perimeter;\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#moltiplicazione","title":"moltiplicazione","text":"
- moltiplicazione tra numeri 12*22;\n- moltiplicazione tra campi \"field1\"*\"field2\";\n- moltiplicazione tra espressioni $perimeter*length($area);\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#potenza","title":"potenza","text":"
- potenza tra numeri 10^2;\n- potenza tra campi \"field1\"^\"field2\";\n- potenza tra espressioni $area^length($area);\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#unione-di-stringhe","title":"unione di stringhe","text":"
- unione di numeri (che trasforma in stringhe) 12 || 24 \u2192 '1224';\n- unione tra lettere 'A'||'b' \u2192 'Ab';\n- unione tra parole 'Ciao' || 'Mondo' \u2192 'CiamoMondo' ;\n- unione tra stringhe 'Viva QGIS' || 'Viva Pigreco' \u2192 'Viva QGISViva Pigreco';\n- unione tra campi \"field1\" = \"field2\";\n- unione tra espressioni \\$area || area($geometry);\n- unione tra simboli 'A'||'=>'||'B' \u2192 'A=>B';\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#parentesi-aperta","title":"parentesi aperta","text":"
- il calcolatore indica se una parentesi \u00e8 rimasta aperta;\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#parentesi-chiusa","title":"parentesi chiusa","text":"
- il calcolatore indica se una parentesi \u00e8 rimasta chiusa;\n
","tags":["operatori","propedeutico"]},{"location":"calcolatore_campi/operatori/#nuova-riga","title":"nuova riga","text":"
- aggiunge una nuova riga:  \n(12 || 24 ) ||'\\n' ||( '12' || '24' ) \u2192 stamper\u00e0 '1224' su 1224' in due righe;\n- molto utile per le etichette su due o pi\u00f9 righe;\n

Un altro operatore nascosto \u00e8 '\\t' tabulazione:

utile per esempio nelle legende, leggi qui

","tags":["operatori","propedeutico"]},{"location":"corso_formazione/corso_di_formazione/","title":"Corso di formazione","text":""},{"location":"corso_formazione/corso_di_formazione/#a-chi-e-rivolto","title":"A chi \u00e8 rivolto","text":"

Il corso \u00e8 rivolto agli utenti che conoscono l'uso generale di QGIS e desiderano approfondire l'uso della tabella attributi e del calcolatore di campi.

"},{"location":"corso_formazione/corso_di_formazione/#corso","title":"Corso","text":""},{"location":"corso_formazione/corso_di_formazione/#in-presenza","title":"In presenza","text":"

Il corso \u00e8 strutturato per durare almeno 16 ore - preferibilmente fulltime (due giorni da otto ore)

Programma Corso

  1. Tabella attributi ;
  2. Concetti fondamentali sulla Tabella attributi
  3. che cosa \u00e8 la tabella attributi;
  4. campi e record, come definirli;
  5. Icone e funzioni tabella attributi;
  6. calcolatore di campi rapido;
  7. tabella attributi e tipo formato GIS cosa cambia:
    1. shapefile;
    2. geojson;
    3. geopackage;
    4. spatialite.
  8. Vista tabella e vista modulo, le relazioni;
  9. riorganizzazione campi tabella - processing;
  10. selezione per espressione;
  11. esercitazioni.
  12. Calcolatore di campi ;
  13. Concetti fondamentali sul Calcolatore di campi;
  14. Interfaccia;
  15. gruppo funzioni;
  16. guida in linea e #HfcQGIS;
  17. le funzioni geometriche;
  18. come creare delle espressioni complesse;
  19. come richiamare altri layer;
  20. come aggiungere attributi geometrici alla tabella;
  21. le funzioni di aggregazione;
  22. gli Array;
  23. le Maps;
  24. le variabili;
  25. aggiornare un campo esistente;
  26. campi virtuali, utilit\u00e0;
  27. filtro;
  28. cenni sull'editor delle funzioni python;
  29. esercitazione.
  30. Novit\u00e0 introdotte in QGIS 3.x
  31. Esercitazioni.
"},{"location":"corso_formazione/corso_di_formazione/#video-corso","title":"Video-Corso","text":"

Sul Field Calc QGIS 3.x - 30 video lezioni (23 ore)

Per maggiori Info contattatemi.

"},{"location":"corso_formazione/corso_di_formazione/#docente","title":"Docente","text":"

Ing. Salvatore Fiandaca

"},{"location":"corso_formazione/corso_di_formazione/#contatti","title":"Contatti","text":""},{"location":"corso_formazione/corso_di_formazione/#sitografia","title":"Sitografia","text":""},{"location":"corso_formazione/corso_di_formazione/#certificato-di-partecipazione","title":"Certificato di partecipazione","text":"

Alla fine del corso (solo se in presenza) verr\u00e0 rilasciato un certificato di partecipazione.

"},{"location":"corso_formazione/corso_di_formazione_avanzato/","title":"Corso di formazione avanzato - IN LAVORAZIONE","text":"","tags":["corso","formazione","fieldCalc"]},{"location":"corso_formazione/corso_di_formazione_avanzato/#a-chi-e-rivolto","title":"A chi \u00e8 rivolto","text":"

Il corso \u00e8 rivolto agli utenti che conoscono l'uso generale di QGIS e/o hanno gi\u00e0 seguito il Corso FULL sul Field Calc e desiderano approfondire l'uso del calcolatore di campi e in particolare di alcuni gruppi funzione come meglio evidenziato nel programma.

","tags":["corso","formazione","fieldCalc"]},{"location":"corso_formazione/corso_di_formazione_avanzato/#corso","title":"Corso","text":"","tags":["corso","formazione","fieldCalc"]},{"location":"corso_formazione/corso_di_formazione_avanzato/#in-presenza","title":"in presenza","text":"

Il corso \u00e8 strutturato per durare almeno XX - preferibilmente fulltime (YY giorni da otto ore)

Programma Corso avanzato

  1. gruppo geometria;
  2. gruppo aggrega;
  3. gruppo array;
  4. gruppo maps;
  5. gruppo variabili;
  6. gruppo espressioni utente;
  7. richiamare altri layer;
  8. esercitazioni.
","tags":["corso","formazione","fieldCalc"]},{"location":"corso_formazione/corso_di_formazione_avanzato/#video-corso","title":"Video-Corso","text":"

Il corso \u00e8 REGISTRATO e prevede ...

Per maggiori Info contattatemi.

","tags":["corso","formazione","fieldCalc"]},{"location":"corso_formazione/corso_di_formazione_avanzato/#docente","title":"Docente","text":"

Ing. Salvatore Fiandaca

","tags":["corso","formazione","fieldCalc"]},{"location":"corso_formazione/corso_di_formazione_avanzato/#contatti","title":"Contatti","text":"","tags":["corso","formazione","fieldCalc"]},{"location":"corso_formazione/corso_di_formazione_avanzato/#sitografia","title":"Sitografia","text":"","tags":["corso","formazione","fieldCalc"]},{"location":"esempi/ID_univoco_gruppi_consecutivi/","title":"ID univoco per gruppi consecutivi","text":"

L'esempio \u00e8 preso da qui:

stackexchange: https://gis.stackexchange.com/questions/418137/adding-unique-id-for-consecutive-groups-using-field-calculator-in-qgis

ovvero, come creare un campo group1 che contenga ID univoco per gruppi consecutivi (vedi immagine e numeri in bianco)

with_variable('cucu',\n   aggregate( \n        layer:=@layer_name,\n        aggregate:='array_agg',\n        expression:= (array_find(array_agg(\"ID\", \"PortCluster_ID\"),\"ID\"))-\"ID\"),\nwith_variable('cucu2',\n   (array_find(array_agg(\"ID\", \"PortCluster_ID\"),\"ID\"))-\"ID\",\n   array_find(array_distinct(@cucu),@cucu2)+1))\n

risultato:

In linguaggio umano:

","tags":["aggregare","univoco","array","id"]},{"location":"esempi/ID_univoco_gruppi_consecutivi/#prova-tu","title":"prova tu","text":"

dati di esempio

Funzioni e variabili utilizzate:

","tags":["aggregare","univoco","array","id"]},{"location":"esempi/add_campo_sum_cumulativo/","title":"Creare campo somma cumulativa","text":"","tags":["cumulativa","attributi","condizioni","array"]},{"location":"esempi/add_campo_sum_cumulativo/#aggiungere-campo-somma-cumulativa","title":"Aggiungere campo somma cumulativa","text":"

Siamo nella seguente ipotesi, una tabella ordinata per fid e un campo l che rappresenta delle lunghezze, come realizzare - usando il calcolatore di campi e le espressioni - un campo cum popolato con la somma cumulativa??

Ecco un esempio:

+-----+----+-----+\n| fid | l  | cum |\n+-----+----+-----+\n| 1   | 0  | 0   |\n| 2   | 10 | 10  |\n| 3   | 20 | 30  |\n| 4   | 30 | 60  |\n| 5   | 40 | 100 |\n| 6   | 50 | 150 |\n+-----+----+-----+\n

Le soluzioni trovate sono pi\u00f9 di una e dipende anche dalla versione di QGIS installata in quanto utilizza funzioni certamente presenti dalla 3.x in avanti.

","tags":["cumulativa","attributi","condizioni","array"]},{"location":"esempi/add_campo_sum_cumulativo/#prima-soluzione","title":"Prima soluzione","text":"

Questa soluzione fa uso di funzioni presenti nel core di QGIS:

Nella maggior parte dei casi il primo record di un layer ha $id =1; in alcuni casi, per esempio gli shapefile, il primo record ha $id = 0, quindi la condizione di test di ifdovrebbe essere modificata di conseguenza affinch\u00e9 l'espressione funzioni come previsto:

if(\n$id = 1, attribute($currentfeature, 'l'),\nattribute($currentfeature, 'l') +\nattribute(get_feature_by_id(@layer_name, $id-1), 'cum'))\n

Alternativamente si potrebbe usare, invece che la funzione $id, la variabile @row_number, in quanto quest'ultima dovrebbe iniziare sempre da 1 e quindi la seguente espressione dovrebbe funzionare in ogni caso :

if(\n$id = 1, attribute($currentfeature, 'l'),\nattribute($currentfeature, 'l') +\nattribute(get_feature_by_id(@layer_name, @row_number-1), 'cum'))\n

NB: La somma cumulativa avviene in ordine per feature id, quindi i record del layer devono essere gi\u00e0 intrinsecamente ordinati secondo l'ordine con cui si vuole che i valori vengano sommati.

","tags":["cumulativa","attributi","condizioni","array"]},{"location":"esempi/add_campo_sum_cumulativo/#seconda-soluzione","title":"Seconda soluzione","text":"

In questa soluzione valgono sempre gli Alert della prima, ma utilizzeremo altre funzioni come gli Array:

if(\n$id = 1, array_agg( \"l\")[0],\neval(\nreplace(\narray_to_string(\narray_slice( array_agg( \"l\"),0,$id-1)), ',','+'))\n)\n
","tags":["cumulativa","attributi","condizioni","array"]},{"location":"esempi/add_campo_sum_cumulativo/#terza-soluzione","title":"Terza soluzione","text":"

In questa soluzione valgono sempre gli Alert della prima, ma utilizzeremo le funzioni del gruppo Array, in particolare la funzione array_sum presente in QGIS a partire dalla 3.18

if(\n$id = 1, array_agg( \"l\")[0],\narray_sum( array_slice( array_agg( \"l\"),0,$id-1))\n)\n

Nello screenshot di sotto, i campi:

","tags":["cumulativa","attributi","condizioni","array"]},{"location":"esempi/add_campo_sum_cumulativo/#note-finali","title":"Note finali","text":"

Il tutto \u00e8 nato da qui

","tags":["cumulativa","attributi","condizioni","array"]},{"location":"esempi/add_campo_virtuale/","title":"Come aggiungere un campo virtuale","text":"

Facciamo un esempio, geopackage con vettore lineare:

selezionare il layer (presente nel Layer Panel), tasto destro mouse 'Apri tabella attributi' oppure cliccare sull'icona oppure tasto funzione F6

  1. attivare editing;
  2. aprire calcolatore di campi
  3. crea nuovo campo, crea campo virtuale;
  4. digittare nome campo lunghezza_dinamica;
  5. tipo campo uscita Real e lunghezza uscita 10 e 2;
  6. nella casella ricerca digitiamo il nome della funzione: \\$length
  7. doppio clic sulla funzione \\$lenght per aggiungerla;
  8. OK per eseguire;

verr\u00e0 aggiunta la colonna lunghezza_dimanica popolata con la funzione \\$lenght

","tags":["campi","virtuale","fieldCalc","dinamico"]},{"location":"esempi/add_campo_virtuale/#osservazioni","title":"Osservazioni","text":"

Un campo virtuale \u00e8 un campo che si aggiorna dimanicamente e non modifica la tabella attributi in quanto viene memorizzata nel progetto e non nel layer.

video youtube

il geopackage \u00e8 scaricabile qui

","tags":["campi","virtuale","fieldCalc","dinamico"]},{"location":"esempi/add_col_area/","title":"Come aggiungere colonna con area [m\u00b2]","text":"

Facciamo un esempio, geopackage con vettore poligonale:

selezionare il layer (presente nel Layer Panel), tasto destro mouse 'Apri tabella attributi' oppure cliccare sull'icona oppure tasto funzione F6

  1. attivare editing;
  2. aprire calcolatore di campi
  3. crea nuovo campo;
  4. digittare nome campo area;
  5. tipo campo uscita Real;
  6. lunghezza uscita 10 e 2;

  1. nella casella ricerca digitiamo il nome della funzione: area
  2. doppio clic sulla funzione \\$area per aggiungerla;
  3. OK per eseguire;

verr\u00e0 aggiunta la colonna area e popolata con la funzione \\$area

il geopackage \u00e8 scaricabile qui

","tags":["attributi","area"]},{"location":"esempi/add_col_z/","title":"Come aggiungere la quota z alla tabella attributi","text":"

Facciamo un esempio, geopackage con vettore MultiLinestringZ:

selezionare il layer (presente nel Layer Panel), tasto destro mouse 'Apri tabella attributi' oppure cliccare sull'icona oppure tasto funzione F6

  1. attivare editing;
  2. aprire calcolatore di campi
  3. crea nuovo campo e digitare nome campo quota;
  4. tipo campo uscita Real e lunghezza uscita 13 e 2;
  5. cercare la funzione z;
  6. doppio clic sul risultato della ricerca per inserire la funzione;
  7. aggiungere la funzione start_point e poi $geometry come argomento delle z(start_point());
  8. OK per eseguire; verr\u00e0 aggiunta la colonna quotaz e popolata;

evidenziata la colonna con le quote z

","tags":["attributi","z","quota","tabella","coordinate"]},{"location":"esempi/add_col_z/#riassunto","title":"riassunto","text":"

il geopackage \u00e8 scaricabile qui

","tags":["attributi","z","quota","tabella","coordinate"]},{"location":"esempi/add_coord_xy/","title":"Come aggiungere le coordinate x e y alla tabella attributi","text":"

Facciamo un esempio, geopackage con vettore puntuale:

selezionare il layer (presente nel Layer Panel), tasto destro mouse 'Apri tabella attributi' oppure cliccare sull'icona oppure tasto funzione F6

  1. attivare editing;
  2. aprire calcolatore di campi
  3. crea nuovo campo e digittare nome campo coord_x;
  4. tipo campo uscita Real e lunghezza uscita 13 e 2;
  5. cercare la funzione $x;
  6. doppio clic sul risultato della ricerca per inserire la funzione;
  7. OK per eseguire; verr\u00e0 aggiunta la colonna coord_x e popolata;

ripere gli stessi passi per la coord_y e usare la funzione \\$y:

ecco evidenziate le due colonne con le coordinate:

il geopackage \u00e8 scaricabile qui

","tags":["attributi","x","y","tabella","coordinate"]},{"location":"esempi/agg_geom/","title":"Aggiornare l'attributo geometry","text":"

Il campo geometry \u00e8 un attributo come gli altri per\u00f2 non \u00e8 visibile nella tabella attributi, questo non \u00e8 un limite e quindi \u00e8 possibile aggiornarlo tramite il calcolatore di campi.

l'aggiornamento non significa che da punto diventa linea o poligono, ma \u00e8 possibile aggiornale le coordinate dei punti, semplificare una geometria (in termini di numero di vertici).

NB: se una geometria \u00e8 2D non possiamo aggiornarla a 3D.

Geopackage \u00e8 qui

","tags":["attributi","aggiornare"]},{"location":"esempi/aggiungere_punto_a_linea/","title":"Aggiungere punto a linea","text":"","tags":["linee","punti"]},{"location":"esempi/aggiungere_punto_a_linea/#come-aggiungere-un-punto-ad-una-linea","title":"Come aggiungere un punto ad una linea","text":"

Alcune volte pu\u00f2 essere utile aggiungere un nodo di disegno ad una linea, per esempio quando occorre spezzarla proprio in quel punto o in altri casi di sovrapposizione con altre linee.

L'aggiornamento delle geometria \u00e8 possibile farla usando il calcolatore di campi.

Supponiamo di avere due linee sovrapposte parzialmente (linea A e linea B) e di volere aggingere alla linea B un nodo di disegno in corrispondenza del punto A che \u00e8 il vertice finale della linea A:

l'espressione da usare \u00e8:

 make_line(  \n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',1))),\n end_point($geometry))\n

","tags":["linee","punti"]},{"location":"esempi/aggregare_con_sr_differenti/","title":"Aggrega con SR differenti","text":"","tags":["aggregare","transform","sr"]},{"location":"esempi/aggregare_con_sr_differenti/#aggregare-con-sr-differenti","title":"Aggregare con SR differenti","text":"

La funzione aggregate del gruppo aggrega lavora solo con vettori che hanno stesso SR (Sistema di Riferimento) altrimenti restituisce NULL, in questo esempio useremo la funzione transform per ovviare a questo apparente problema.

Esempio:

supponiamo di avere due layer: i centroid-comuni (EPSG 4326) e province ISTAT (EPSG 32632) della sola Sicilia; aggiungere un campo nro_com nel layer province e popolarlo con il numero dei comuni.

avviare il calcolatore di campi e creare un nuovo campo 'nro_com' Integer (9) e popolarlo con la seguente espressione:

aggregate(\nlayer:='centroid_comuni_4326', \naggregate:= 'count', \nexpression:=\"fid\", \nfilter:= intersects ($geometry, transform(geometry (@parent), 'EPSG:32632', 'EPSG:4326'))) \n

oppure con questa espressione, il risultato \u00e8 lo stesso:

aggregate(\nlayer:='centroid_comuni_4326', \naggregate:= 'count', \nexpression:=\"fid\", \nfilter:= intersects (transform($geometry, 'EPSG:4326', 'EPSG:32632'), geometry (@parent)))\n

Nota bene

La funzione $geometry, all'interno della funzione di aggregazione, \u00e8 la geometria corrente del layer:='centroid_comuni_4326' e quindi la geometry (@parent) rappresenta la geometria del layer poligonale.

","tags":["aggregare","transform","sr"]},{"location":"esempi/aggregare_con_sr_differenti/#osservazioni","title":"Osservazioni","text":"

Nella funzione aggregate tutto ci\u00f2 che si trova entro le sue parentesi riguarda il relativo layer:=, quindi se utilizzassimo la funzione $geometry questa sarebbe relativa al layer:=, mentre per richiamare una geometria esterna (relativa al layer genitore, cio\u00e8 quello in cui abbiamo avviato il costruttore di espressioni) occorre utulizzare l'espressione geometry(@parent). In questo esempio $geometry \u00e8 la geometria del layer:=centroid_comuni_4326 mentre l'altra geometria \u00e8 geometry(@parent) relativa al layer province.

","tags":["aggregare","transform","sr"]},{"location":"esempi/aggregare_elementi_contigui/","title":"Aggregare elementi adiacenti","text":"

a questa e altre domande \u00e8 possibile rispondere utilizzando le funzioni di aggregazione del calcolatore di campi di QGIS.

Numero di regioni:

espressione da usare:

aggregate(\n    layer:= 'regioni_g',\n    aggregate:='count',\n    expression:=to_string(\"COD_REG\"),\n    filter:=touches($geometry, geometry(@parent))\n )\n

Regioni confinanti:

aggregate(\n    layer:= 'regioni_g',\n    aggregate:='concatenate',\n    expression:=to_string(\"DEN_REG\"),\n    concatenator:=', ',\n    filter:=touches($geometry, geometry(@parent))\n )\n

funzione aggregate

Prova tu

Geopackage

","tags":["aggregare","adiacenza"]},{"location":"esempi/aggregare_valori_tabella/","title":"Aggregare valori di una tabella","text":"

Data la tabella (semplice file csv) ottenere l'output come in figura:

per risolvere questi tipi di problemi occorre necessariamente usare l'algoritmo di Processing Aggrega e la seguente espressione (da mettere nel punto 5 - vedi screen):

array_to_string(array_agg(col2||':'||col3, group_by:=col1))\n

Idea presa da qui: link: https://gis.stackexchange.com/questions/282924/aggregating-strings-in-qgis

","tags":["aggregare","array","tabella","valori","csv"]},{"location":"esempi/aggregare_valori_tabella/#provaci-tu-sotto-la-tabella","title":"provaci tu, sotto la tabella","text":"col1 col2 col3 1 a c 1 b c 2 c c 2 d b 2 e z

Funzioni e variabili utilizzate:

","tags":["aggregare","array","tabella","valori","csv"]},{"location":"esempi/array_natural_sorting/","title":"Ordinare numericamente un array alfanumerico","text":"

(problema noto come Natural Sorting)

Data una lista di numeri civici, una per ogni via di una citt\u00e0, una lista del tipo:

nome lista lista_ordinata strada A 5/A-5-4-8-3-6-9-7-1-10-7/B-2-7/A 1,2,3,4,5,5/A,6,7,7/A,7/B,8,9,10 strada B 10-1-2/A-2-3 1,2,2/A,3,10

l'obiettivo di questo esempio \u00e8 di ordinare (Natural sorting) i valori della colonna lista in modo da ottenere la colonna lista_ordinata.

In pratica, ordinare i civici come se fossero solo numerici e nel caso ci fossero 5/A o 7/B, questi devono posizionarsi correttamente dentro l'ordine numerico (quindi un ordinamento umano).

Una prima soluzione \u00e8 la seguente:

array_to_string(\narray_foreach(\n    array_sort(\n        with_variable('lista',\n            string_to_array('5/A-5-4-8-3-14-6-9-7-1-10-7/B-2-7/A' ,'-'),\n            array_foreach(generate_series(0, array_length(@lista)-1),\n            lpad(regexp_substr( (@lista[@element]),'(\\\\d+)'),3,'0') -- per muneri < 999\n            ||'|'||\n            if(regexp_substr((@lista[@element]),'([a-zA-Z/]+)') !='',\n               regexp_substr((@lista[@element]),'([a-zA-Z/]+)'),\n               ' ') -- uno spazio\n            ||'|'||\n            @lista[@element]))),\nregexp_replace( @element,'^.+\\\\|(.+)$','\\\\1'))\n)\n

","tags":["ordinare","array","tabella","valori","regex","natural-sorting"]},{"location":"esempi/array_natural_sorting/#osservazione","title":"osservazione","text":"

Il natural sorting \u00e8 un problema noto (c'\u00e8 molta letteratura) e la soluzione non \u00e8 univoca, dipende dall'algoritmo utilizzato, per maggiori info vedi i riferimenti.

","tags":["ordinare","array","tabella","valori","regex","natural-sorting"]},{"location":"esempi/array_natural_sorting/#riferimenti","title":"Riferimenti","text":"
  1. domanda posta su SE: https://gis.stackexchange.com/questions/421166/sorting-alphanumeric-array-numerically-using-qgis-field-calculator
  2. Natural sorting : https://blog.codinghorror.com/sorting-for-humans-natural-sort-order/

Funzioni e variabili utilizzate:

","tags":["ordinare","array","tabella","valori","regex","natural-sorting"]},{"location":"esempi/assegnare_cat_prevalente/","title":"Assegnare categoria prevalente","text":"

Dati due shapefile poligonali, fabbricati e circorscrizioni. I fabbricati hanno un attributo (categoria) che li categorizza come A,B,C,D. Come attribuire alle circoscrizioni la categoria prevalente dei fabbricati? cio\u00e8, se ci fossero, in una circoscrizione, pi\u00f9 fabbricati con categorie B, rispetto agli altri, allora assegnare la categoria B, oppure A se, la maggioranza dei fabbricati, fosse la categoria A.

Avviare il calcolatore di campi relativamente al layer circoscrizioni e creiare un campo testuale:

popolare con la seguente espressione:

array_majority( \nstring_to_array(\naggregate(\nlayer:='fabbricati_pa', \naggregate:='concatenate', \nexpression:=\"categoria\",\nfilter:=intersects( $geometry, geometry(@parent)),\nconcatenator:=',')\n) \n)\n

PS: occorre installare il plugin ArrayPlus per poter usare la funzione array_majority nelle versioni <= QGIS 3.16; La funzione array_majority \u00e8 disponibile nativamente a partire da QGIS 3.18

Prova tu

Geopackage

Funzioni e variabili utilizzate:

","tags":["categoria","array","tabella","prevalenza"]},{"location":"esempi/atlas_righe_verticale/","title":"Atlas con righe tabella attributi in verticale","text":"

Alcune volte nasce l'esigenza di stampare la tabella attributi di un atlante in verticale e non nel classico modo in orizzontale:

Espressione da usare:

replace(\n   replace(\n      replace (\n         map_to_hstore( attributes())\n            ,'\"',''),\n                '=>',' = '),\n                   ',','\\n')\n

dove l'espressione che crea una struttura a mappa \u00e8:

map_to_hstore( attributes()) \u2192 '\"cod_reg\"=>\"1\",\"cod_rip\"=>\"1\",\"den_reg\"=>\"Piemonte\",\"fid\"=>\"\u2026'\n

le funzioni replace() servono a modificare l'output, cio\u00e8 a togliere i doppi apici, la freccia e aggiungere il vai a capo.

NB: I campi sono ordinati alfabeticamente!

Funzioni e variabili utilizzate:

","tags":["atlante","tabella","valori","chiave-valore"]},{"location":"esempi/attributi_da_layer_vicini/","title":"Prelevare attributi da layer pi\u00f9 vicini","text":"

Livello di linea (MultiLineString) e 4 livelli di punti (MultiPoint).

Il mio livello di linea ha 2 campi di attributi start_pt e end_pt, ho bisogno che vengano compilati con un attributo identificativo (dati stringa popolati con valori come A01, B01, B02, C01, ecc. quindi non \u00e8 il $id valore normale) da una qualsiasi delle potenziali caratteristiche dei 4 livelli punti che pu\u00f2 essere agganciato alla feature di linea.

esempio sotto:

Espressioni utilizzate per QGIS >= 3.18:

campo start_pt:

overlay_nearest(layer:=\nwith_variable('in_layer',array('cat_A','cat_B','cat_C','cat_D'),\nwith_variable('in_dist',\n        array_foreach(@in_layer,distance(overlay_nearest(@element,$geometry)[0], start_point($geometry))),\narray_get(@in_layer, array_find(@in_dist, array_min(@in_dist)))))\n,expression:= id )[0]\n

campo end_pt:

overlay_nearest(layer:=\nwith_variable('in_layer',array('cat_A','cat_B','cat_C','cat_D'),\nwith_variable('in_dist',\n        array_foreach(@in_layer,distance(overlay_nearest(@element,$geometry)[0], end_point($geometry))),\narray_get(@in_layer, array_find(@in_dist, array_min(@in_dist)))))\n,expression:= id )[0]\n

l'unica differenza tra le due espressioni di sopra \u00e8 nelle funzioni: start_point e and_point.

nel linguaggio umano:

l'espressione crea due varibili, la prima contiene i nomi dei 4 layer, la seconda crea un array di distanze tra i 4 layer e il layer lineare; infine, tra i vari valori distanza scelgo quello pi\u00f9 piccolo, una volta rispetto a star_point e una volta per l'end_point.

EDIT:

Le espressioni di sopra risolvono il caso in esame, ma non risolvono il caso in cui una linea abbia, come punti estremi, punti dello stesso layer puntuale: in questo caso le espressioni non riescono a distinguere lo start_point dall'end_point e restituirebbe sempre lo stesso valore; per risolvere il problema si propone la seguente espressione:

-- select id\nwith_variable('feature',\n-- search for the nearest points\n    overlay_nearest(layer:=\n    -- search for the closest layer\n        with_variable('in_layer',array('cat_A','cat_B','cat_C','cat_D'), -- point layer list\n            with_variable('in_dist',\n                array_foreach(@in_layer,\n                       distance(overlay_nearest(@element,$geometry)[0],\n                end_point($geometry))), -- change start or end_point\n        array_get(@in_layer, array_find(@in_dist, array_sort(@in_dist)[0]))))\n    -- search for the closest layer\n        ,expression:= id, limit:=2, max_distance:=0.1 )\n-- search for the nearest points\n, if(array_length(\n        @feature)>1,\n        @feature[1], -- 0: start_point; 1: end_point\n        @feature[0]) -- \n)\n-- select id\n

quesito su stackexchange: https://gis.stackexchange.com/questions/417080/populate-lines-attribute-fields-with-attributes-from-point-features-snapped-to

osservazioni:

  1. i 4 livelli punti si chiamano 'cat_A','cat_B','cat_C','cat_D';
  2. il livello linea si chiama line.
","tags":["prossimit\u00e0","attributi","tabella","layer","overlay","punti"]},{"location":"esempi/attributi_da_layer_vicini/#provaci-tu","title":"Provaci tu","text":"

il GeoPackage \u00e8 qui

Funzioni e variabili utilizzate:

","tags":["prossimit\u00e0","attributi","tabella","layer","overlay","punti"]},{"location":"esempi/calcolo_area_poligoni_reticolo/","title":"Calcolo area poligoni all'interno di un reticoli","text":"

Calcolare l\u2019area delle porzioni di poligoni che ricadono dentro ad una cella di un reticolo.

Esempio: lo strato \u00e8 un dusaf (Destinazione d\u2019Uso dei Suoli Agricoli e forestali ndr), la domanda a cui rispondere \u00e8: quanta superficie di quegli usi del suolo ricadono nella singola maglia del reticolo?

Aggiungere un campo sup (tipo Real) nella tabella attributi del layer reticolo e popolarlo \u2013 usando il calcolatore di campi di QGIS \u2013 con la seguente espressione:

aggregate(\nlayer:='dusaf_5', \naggregate:='sum',\nexpression:=area(intersection(geometry(@parent),$geometry )), \nfilter:=intersects( $geometry,geometry(@parent)))\n

La funzione di aggregazione calcola l\u2019area della porzione di dusaf che interseca ogni rettangolo del reticolo e poi somma per ogni rettangolo.

Funzione

il geopackage \u00e8 scaricabile qui

Funzioni e variabili utilizzate:

","tags":["area","poligoni","reticolo","aggregare"]},{"location":"esempi/calcolo_incrementi_giornalieri/","title":"Calcolo incrementi giornalieri di un attributo","text":"

Supponiamo di avere un campo (tot_att_pos) popolato con valori aggregati giornalieri, per esempio il numero totale di contagiati da CoronaVirus, ecco un tabella di esempio:

data tot_att_pos delta 2020-03-09 7985 1598 2020-03-08 6387 1326 2020-03-07 5061 1145 2020-03-06 3916 620 2020-03-05 3296 590 2020-03-04 2706 443 2020-03-03 2263 428 2020-03-02 1835 258 2020-03-01 1577 528 2020-02-29 1049 228 2020-02-28 821 233 2020-02-27 588 203 2020-02-26 385 74 2020-02-25 311 90 2020-02-24 221 221

come calcolare la colonna delta, popolata con gli incrementi giornalieri?

Per esempio, negli ultimi due giorni il campo tot_att_pos \u00e8 passato da 6387 a 7985, il delta \u00e8 1598.

L'espressione usata per popolare il campo delta \u00e8 la seguente:

with_variable( 'my_exp', \n                array_find(  \n                array_agg( \n                expression:= \"data\" ,\n                order_by:=  \"data\"),\"data\" ),\nif( @my_exp = 0,  -- condizione\n               (array_agg( \n                expression:= \"tot_att_pos\"  , \n                order_by:=  \"data\"  )[0]), -- se vero\n                     (\"tot_att_pos\"  -\n                     (array_agg( \n                      expression:=  \"tot_att_pos\"  , \n                      order_by:=  \"data\"  )[@my_exp-1])) -- altrimenti\n                )\n              )\n

In termini umani significa:

Se il primo elemento dell'array \u00e8 0 associa il primo elemento dell'array dell'attributo tot_att_pos ordinato per data, altrimenti fai la differenza tra il valore corrente e il valore precedente.

questo ci permette di creare questi due grafici:

Funzioni e variabili utilizzate:

","tags":["incrementi","attributi","tabella","valori","condizioni"]},{"location":"esempi/campo_coord_in_lat_lon/","title":"Da un campo di coordinate a due campi","text":"

Alcune volte abbiamo a che fare con un campo che contiene entrambe le coordinate separate da una virgola 44.8636937,10.0077403, come questa di sotto:

DATA NOME GPS 01/02/20 cucu 44.852747416606434,10.028176383697463 02/02/20 ciao 44.044566892850995,12.055562011167229 03/02/20 arrivederci 41.83774391119999,13.131616192302847 04/02/20 pluto 41.08389804418973,16.013252812971114 05/02/20 paperino 38.336008270894254,16.06188803019758

Una tabella cosi fatta non \u00e8 immediatamente utilizzabile in un GIS, occorre separare le due coordinate in due campi distinti, come sotto:

DATA NOME GPS latitude longitude 01/02/20 cucu 44.852747416606434,10.028176383697463 44.852747416606434 10.028176383697463 02/02/20 ciao 44.044566892850995,12.055562011167229 44.044566892850995 12.055562011167229 03/02/20 arrivederci 41.83774391119999,13.131616192302847 41.83774391119999 13.131616192302847 04/02/20 pluto 41.08389804418973,16.013252812971114 41.08389804418973 16.013252812971114 05/02/20 paperino 38.336008270894254,16.06188803019758 38.336008270894254 16.06188803019758

vediamo come farlo usando il calcolatore di campi:

  1. aggiungere un nuovo campo latitude, tipo Real con lunghezza 10 e precisione 7;
  2. utilizzare la seguente espressione: regexp_matches( \"GPS\" , '(.+),(.+)')[0];
  3. aggiungere un nuovo campo longitude, tipo Real con lunghezza 10 e precisione 7;
  4. utilizzare la seguente espressione: regexp_matches( \"GPS\" , '(.+),(.+)')[1];

Infine, per tracciare i punti, utilizzare l'algoritmo Create points layer from table ed utilizzare i due campi longitude e latitude.

Funzioni e variabili utilizzate:

","tags":["campi","attributi","tabella","coordinate","regex"]},{"location":"esempi/centroid_linee/","title":"Ottenere i centroidi lungo le linee","text":"

Come ottenere i centroidi di linee curve lungo le linee stesse?

avviare il calcolatore di campi e creare un nuovo campo coord_WKT testuale e popolarlo con la seguente espressione:

geom_to_wkt( line_interpolate_point( $geometry, $length/2) )\n

ecco la tabella attributi:

Esportare lo strato in formato CSV:

Importialo il nuovo strato CSV come testo delimitato:

Ecco il risultato finale, i centroidi sono lungo le linee:

il geopackage \u00e8 scaricabile qui

Funzioni e variabili utilizzate:

","tags":["linee","centroidi","wkt","valori","csv"]},{"location":"esempi/classificazione_specie/","title":"Classificare specie","text":"

Una colonna taxa contiene una serie di specie separate da #. Come creare una nuova colonna che restituisce una somma di valori, in base alla specie, definiti in un'altra tabella. Sotto un esempio:

di seguito alcuni esempi di valori per specie:

taxon value Calluna_vulgaris 1 Baeomyces_rufus 1 Porpidia_crustulata 2 Rhizocarpon_reductum 2 Micarea_erratica 2 Hypnum_jutlandicum 0.333 Erica_tetralix 2 Carex_pilulifera 1.5

esempio di cosa ottenere: se la colonna taxa contenesse Calluna_vulgaris#Porpidia_crustulata#Micarea_erratica la nuova colonna devobbe contenere 5 (1+2+2).

","tags":["classificare","array","tabella","valori","chiave-valore","csv"]},{"location":"esempi/classificazione_specie/#prima-soluzione","title":"Prima soluzione","text":"
array_sum(\n  array_foreach(\n    string_to_array(\"taxa\",'#'),\n    to_real(attribute(get_feature('taxon','taxon',@element),'value'))))\n

questa soluzione fa uso di un layer taxon che contiene l'elenco delle specie e i relativi valori.

","tags":["classificare","array","tabella","valori","chiave-valore","csv"]},{"location":"esempi/classificazione_specie/#seconda-soluzione","title":"Seconda soluzione","text":"
array_sum(\n  array_foreach(\n  string_to_array(\"taxa\",'#'),\n  map_get(\n    map(\n        'Calluna_vulgaris',1,\n        'Baeomyces_rufus',1,\n        'Porpidia_crustulata',2,\n        'Rhizocarpon_reductum',2,\n        'Micarea_erratica',2,\n        'Hypnum_jutlandicum',0.333,\n        'Erica_tetralix',2,\n        'Carex_pilulifera',1.5),\n@element)))\n

questa soluzione fa uso di un dizionario (mappe valori) che contiene l'elenco e i valori delle specie.

","tags":["classificare","array","tabella","valori","chiave-valore","csv"]},{"location":"esempi/classificazione_specie/#output","title":"output","text":"","tags":["classificare","array","tabella","valori","chiave-valore","csv"]},{"location":"esempi/classificazione_specie/#prova-tu","title":"Prova tu","text":"

Geopackage \u00e8 qui

idea presa da qui

Funzioni e variabili utilizzate:

","tags":["classificare","array","tabella","valori","chiave-valore","csv"]},{"location":"esempi/colorare_distanza_da_punto/","title":"Contare i punti nel poligono per categorie","text":"
color_hsv(\n    scale_linear( \n      distance( \n        geometry(\n          get_feature('center','name','Test')),\n          $geometry),0,1000,100,0),100,100)\n

by eurojam - https://twitter.com/27aea577f17d4c4/status/1591081607108390913 - https://geoobserver.wordpress.com/2022/11/21/qgis-tipp-objekte-nach-abstand-einfarben/

Funzioni e variabili utilizzate:

","tags":["contare","punti","poligoni","condizioni","classificare"]},{"location":"esempi/confrontare_campi_tabella/","title":"Confrontare due campi tabella attributi","text":"

Ho una tabella con due campi che raccolgono una lista di numeri di fogli catastali, come confrontarle e estrarre solo i numeri fogli uguali?

","tags":["attributi","array","tabella","valori","confrontare"]},{"location":"esempi/confrontare_campi_tabella/#espressioni-di-qgis","title":"Espressioni di QGIS","text":"

Importo la tabella in QGIS come testo delimitato, creo una colonna testo output e la popolo con la seguente espressione:

array_to_string(\n    array_majority( array_cat(\n      string_to_array(replace(\"fogli1\",'-',',')),\n      string_to_array(replace(\"fogli2\",'-',','))\n)))\n

Tradotto in linguaggio umano: Trasforma i valori dei due campi in array (string_to_array(replace(\"fogli1\",'|',','))) e poi concatenali (array_cat), cio\u00e8 crea unico array, successivamente estrai l'array dei valori che maggiormente sono presenti (array_majority), infine converti l'array in stringa.

","tags":["attributi","array","tabella","valori","confrontare"]},{"location":"esempi/confrontare_campi_tabella/#provaci-tu","title":"provaci tu","text":"

qui file di esempio

Funzioni e variabili utilizzate:

","tags":["attributi","array","tabella","valori","confrontare"]},{"location":"esempi/conta_punti_in_poligono/","title":"Conta i punti nel poligono","text":"

Contare i features di un layer puntuale che ricadono dentro poligoni, e \u2018appendere\u2019 i valori nella tabella attributi del layer poligonale.

Esiste una geo-algoritmo in processing (Conta i punti nel poligono) che fa questo lavoro in modo brillante ma crea un altro strato.

Un modo rapido per evitare la creazione di un nuovo layer \u00e8 quello di utilizzare il calcolatore di campi:

  1. creare un nuovo campo 'nro' nel layer poligonale;
  2. popolarlo utilizzando la seguente espressione:
aggregate(\n layer:='punti', \n aggregate:='count', \n expression:=$id, \n filter:=intersects( $geometry, geometry(@parent))\n )\n

risultato:

NB: i due layer devono avere stesso SR, altrimenti restituir\u00e0 sempre zero.

Geopackage \u00e8 qui

QUI VIDEO

Funzioni e variabili utilizzate:

","tags":["contare","punti","poligoni","aggregare"]},{"location":"esempi/conta_punti_nel_poligono_per_data/","title":"Conta punti nel poligono e per data","text":"

Immaginiamo di avere dei poligoni in cui ricadono dei punti: contare i punti per ogni poligono e per ogni data.

creare un nuovo campo nel layer poligonale e popolarlo con la seguente espressione:

array_to_string(\n    with_variable('arraydate',\n        aggregate(\n        layer:='nomeLayerPunti', -- layer punti con attributo date\n        aggregate:='array_agg', \n        expression:=\"date\", -- campo data\n        order_by:=\"date\",\n        filter:= intersects( $geometry, geometry(@parent))),\n    array_foreach(\n        array_distinct(@arraydate),@element||': '||array_count(@arraydate,@element))\n))\n
","tags":["contare","punti","poligoni","data","array"]},{"location":"esempi/conta_punti_nel_poligono_per_data/#prova-tu","title":"prova tu","text":"

idea presa da qui SE: https://gis.stackexchange.com/questions/422320/counting-points-in-polygon-by-time-in-qgis

Funzioni e variabili utilizzate:

","tags":["contare","punti","poligoni","data","array"]},{"location":"esempi/conteggio/","title":"Conteggio valori in un campo","text":"

Supponiamo di voler contare il numero di valori all'interno di un campo cio\u00e8 ottenere il numero di volte che, un valore, si ripete.

Per risolvere il problema utilizzeremo il gruppo di funzioni Aggrega e in particolare la funzione Count

  1. creare un campo numerico conteggio;
  2. popolarlo con l'espressione: count(expression:=\"nome\",group_by:=\"nome\")
  3. \"nome\" \u00e8 il campo che contiene i valori da contare e raggruppare;

Osservazione: la tabella attributi non puo' essere modificata, quindi se un valore \u00e8 presente 10 volte avremmo - in corrispondenza ad ognuno - il valore 10 ripetuto 10 volte.

il geopackage \u00e8 scaricabile qui

Funzioni e variabili utilizzate:

","tags":["contare","array","tabella","aggregare"]},{"location":"esempi/conteggio_caratteri_diversi/","title":"Conteggio caratteri diversi","text":"

Problema: come posso classificare in automatico i codici (tipo 133114 ecc.) per identificare il numero dei cambiamenti, cio\u00e8 il numero di caratteri diversi? Per esempio, nella stringa 133114 ci sono \"1\" tre volte, \"3\" due volte, \"4\" una volta, dunque ci sono tre caratteri diversi. Nella stringa 222222 c'\u00e8 un solo carattere (\"2\") ecc. Quesito preso dalla ML QGIS-user-it

Tabella di esempio:

ID field output 1 133114 3 2 222222 1 3 ABBACD 4

Una soluzione passa per l'uso degli array:

array_length(\narray_distinct(  \nstring_to_array(\nregexp_replace(regexp_replace( 133114,'(.)','\\\\1,'),',$','')))) \u2192 3\n

nel caso in esame utilizzando il campo field

array_length(\narray_distinct(  \nstring_to_array(\nregexp_replace(regexp_replace( \"field\",'(.)','\\\\1,'),',$',''))))\n

oppure per evitare il doppio regex_replace (Grazie Andrea Giudiceandrea)

array_length(\narray_distinct(  \nstring_to_array(\nsubstr(regexp_replace( \"field\",'(.)',',\\\\1'),2))))\n

oppure possiamo evitare anche la funzione substr

array_length(\narray_distinct(  \nstring_to_array(\nregexp_replace( \"field\",'(.)\\\\B','\\\\1,'))))\n

Funzioni e variabili utilizzate:

","tags":["contare","caratteri","tabella","array","regex"]},{"location":"esempi/conversione/","title":"Etichettare punti EPSG 4326 sessadecimali in sessagesimali GMS","text":"

La conversione tra i due sistemi \u00e8 abbastanza semplice e quindi vado direttamente alla espressione da usare nel calcolatore di campi:

'lon :' || floor($x)\n|| '\u00b0 ' || \nfloor( ($x - floor($x))*60) \n||''' '|| \nformat_number( \nto_real((($x - floor($x))*60) -floor((($x - floor($x))*60 )))*60 ,2)||'\" E'\n|| '_' || \n'lat :' || floor($y)\n|| '\u00b0 ' || \nfloor( ($y - floor($y))*60) \n||''' '|| \nformat_number( \nto_real((($y - floor($y))*60) -floor((($y - floor($y))*60 )))*60 ,2) ||'\" N'\n

Geopackage \u00e8 qui

","tags":["etichette","epsg","sessadecimale","sessagesimale","gms"]},{"location":"esempi/conversione/#nota-bene","title":"Nota bene","text":"

Dalla versione QGIS 3.4 \u00e8 possibile usare le funzioni to_dm o to_dms

Funzioni e variabili utilizzate:

","tags":["etichette","epsg","sessadecimale","sessagesimale","gms"]},{"location":"esempi/core_area/","title":"Calcolo della core area (area interna al poligono al netto di un'area di buffer interna )","text":"

La core area \u00e8 l'area interna di un poligono al netto di una superfcie determinata da un buffer interno. E' un indice importante utilizzato in ecologia. In questo esempio si vuole calcolare la core area (in ettari) di un poligono di bosco, considerando una distanza dal margine di 20 metri.

Caricare il layer bosco, selezionarlo e aprire il Calcolatore dei Campi. Aggiungere un nuovo campo denominato \"core_area\": 1. Tipo campo in uscita: Numero decimale 2. Lunghezza campo in uscita: 10 3. Precisione: 2

Nella finestra delle espressioni digitare:

area(buffer($geometry, -20))/10000\n

Il risultato sar\u00e0 17.08 ha

Vediamo l'espressione utilizzata:

  1. buffer($geometry,-20): Crea un buffer del poligono utilizzando la funzione $geometry, con una profondit\u00e0 negativa di 20 metri (buffer interno)
  2. area: Calcola l'area della geometria appena definita, in ettari (/10000)

Il GeoPackage, con il vettore bosco, \u00e8 disponibile qui

Funzioni e variabili utilizzate:

","tags":["area","poligoni"]},{"location":"esempi/cronometro/","title":"Cronometro","text":"

Come visualizzare un cronometro che misuri il tempo trascorso in una sessione di lavoro con QGIS. Il cronometro verr\u00e0 posizionato in alto nella map canvas tramite l'uso delle decorazioni e in particolare Etichetta Titolo...

Le Decorazioni sono raggiungibili dal Menu Visualizza | Decorazioni | Etichetta Titolo...

verr\u00e0 aperta una finestra per configurare Etichetta Titolo e dove editare l'espressione:

","tags":["decorazioni","cronometro","tempo"]},{"location":"esempi/cronometro/#espressione","title":"Espressione","text":"","tags":["decorazioni","cronometro","tempo"]},{"location":"esempi/cronometro/#senza-macro","title":"senza Macro","text":"
with_variable('durata',\n  age(\n    now(),\n    make_datetime(2022,04,07,09,05,42) -- i valori vanno inseriti manualmente\n    ),\nlpad(floor(hour(@durata)),2,0)\n||'h:'||\nlpad(to_int(minute(@durata)-floor(hour(@durata))*60),2,0))\n
","tags":["decorazioni","cronometro","tempo"]},{"location":"esempi/cronometro/#con-macro","title":"con Macro","text":"
with_variable('durata',\n  age(\n    now(),\n    @starting_time -- variabile che contine il datetime di apertura progetto\n    ),\nlpad(floor(hour(@durata)),2,0)\n||'h:'||\nlpad(to_int(minute(@durata)-floor(hour(@durata))*60),2,0))\n
","tags":["decorazioni","cronometro","tempo"]},{"location":"esempi/cronometro/#macro","title":"Macro","text":"

La macro \u00e8 stata realizzata da Valerio Pinna e Giulio Fattori che ringraziamo per il prezioso aiuto.

from datetime import datetime\nfrom qgis.core import QgsProject, QgsExpression, QgsExpressionContextUtils\n\n\n\ndef openProject():\n    project = QgsProject.instance()\n    QgsExpressionContextUtils.setProjectVariable(project,'starting_time',str(datetime.now()))\n    QgsExpressionContextUtils.projectScope(project).variable('starting_time')\n\n\n\ndef saveProject():\n    pass\n\ndef closeProject():\n    pass\n

https://docs.qgis.org/testing/en/docs/user_manual/introduction/qgis_configuration.html#id71

NB: per utilizzare la macro nel Progetto:

  1. Impostazioni | Opzioni | Generale \u2192 Abilita Macro | Sempre
  2. Progetto | Propriet\u00e0 | Macro

Funzioni e variabili utilizzate:

","tags":["decorazioni","cronometro","tempo"]},{"location":"esempi/decimali_come_apice/","title":"Decimali come apice per le etichette delle coordinate","text":"

Etichettare punti con le coordinate x e y mettendo i decimali come apice:

Espressione da usare:

'x = '||\nwith_variable(\n   'caratteri_normali',\n      array('0','1','2','3','4','5','6','7','8','9'),\nwith_variable(\n   'numeri_apice',\n      array('\u2070','\u00b9','\u00b2','\u00b3','\u2074','\u2075','\u2076','\u2077','\u2078','\u2079'),\n\n      format_number(regexp_replace( $x,'^(.+)\\\\.(.+)','\\\\1'),0)\n  ||' '||\n      replace(\n         left(regexp_replace( $x,'^(.+)\\\\.(.+)','\\\\2'),3),\n         @caratteri_normali,\n         @numeri_apice ))) ||' m'\n\n ||  '\\n'  || -- va a capo\n\n 'y = '||\nwith_variable(\n   'caratteri_normali',\n    array('0','1','2','3','4','5','6','7','8','9'),\nwith_variable(\n    'numeri_apice',\n      array('\u2070','\u00b9','\u00b2','\u00b3','\u2074','\u2075','\u2076','\u2077','\u2078','\u2079'),\n      format_number(regexp_replace( $y,'^(.+)\\\\.(.+)','\\\\1'),0)\n  ||' '||\n      replace(\n         left(regexp_replace( $y,'^(.+)\\\\.(.+)','\\\\2'),3),\n         @caratteri_normali,\n         @numeri_apice ))) ||' m'\n

le funzioni replace() sostituisce i numeri normali con quelli ad apice.

Funzioni e variabili utilizzate:

","tags":["decimali","etichette","coordinate","x","y","regex"]},{"location":"esempi/distanze_progressive_chilometriche/","title":"Formattare le distanze chilometriche progressive","text":"

Vettore lineare (strade) e vettore puntuale con distanze progressive, la tabella degli attributi ha un campo distance che rappresenta le distanze progressive espresse in metri, in questo esempio popoleremo - usando il calcolatore di campi di QGIS - un nuovo campo (prog_km) con le distanze chilometriche progressive in stile autostrade.

","tags":["formattare","progressive","condizioni"]},{"location":"esempi/distanze_progressive_chilometriche/#espressione","title":"espressione","text":"
CASE \nWHEN  \"prog\" <10  THEN '0+00' ||\"prog\"  \nWHEN  \"prog\" <100  THEN '0+0' ||\"prog\" \nWHEN  \"prog\" <1000  THEN '0+' ||\"prog\" \nWHEN  \"prog\" <10000  THEN left( \"prog\",1)||'+'|| right( \"prog\" ,3)\nWHEN  \"prog\" <100000  THEN left( \"prog\",2)||'+'|| right( \"prog\" ,3)\nWHEN  \"prog\" <1000000  THEN left( \"prog\",3)||'+'|| right( \"prog\" ,3)\nELSE 'valore oltre 1000 km'\nEND\n
","tags":["formattare","progressive","condizioni"]},{"location":"esempi/distanze_progressive_chilometriche/#prova-tu","title":"Prova tu","text":"

dati e progetto

Funzioni e variabili utilizzate:

","tags":["formattare","progressive","condizioni"]},{"location":"esempi/drilldown_form_multiple/","title":"Creare moduli con filtro dinamico (anche multi-selezione)","text":"

Una delle novit\u00e0 introdotte nella QGIS 3.2 \u00e8 la Form drill-down (a cascata) WIDGET Value Relation (Relazione valore) che permette di creare delle Form con filtro dinamico, in questo esercizio vedremo come realizzare una Form semplice e una multiselezione.

","tags":["moduli","filtro","form","relazioni"]},{"location":"esempi/drilldown_form_multiple/#form-semplice-selezione-11","title":"Form semplice selezione 1:1","text":"
\"cod_prov\" = current_value('provincia')\n
","tags":["moduli","filtro","form","relazioni"]},{"location":"esempi/drilldown_form_multiple/#form-avanzato-nm","title":"Form avanzato n:m","text":"
eval( ' \"cod_prov\" in' || replace(current_value('provincia'),array('{','}', '\"'),array('(',')', '\\'')))\n

Espressione di Pedro Ven\u00e2ncio con suggerimento di Alexandre Neto - Lista QGIS dev

","tags":["moduli","filtro","form","relazioni"]},{"location":"esempi/drilldown_form_multiple/#form-avanzato-con-spatial-join-1m","title":"Form avanzato con spatial join 1:m","text":"
aggregate( \nlayer:='province_siciliane', \naggregate:='concatenate', \nexpression:= \"DEN_PCM\", \nfilter:= intersects(@current_geometry, geometry(@parent) )\n) \n

o pi\u00f9 semplicemente (e anche pi\u00f9 performante)

intersects( @current_geometry ,$geometry)\n
minimum(distance(@current_geometry ,$geometry)) = distance(@current_geometry ,$geometry)\n

eval( ' \"cod_prov\" in' || replace(current_value('provincia'),array('{','}', '\"'),array('(',')', '\\'')))\n

Espressione di Pedro Ven\u00e2ncio con suggerimento di Alexandre Neto - Lista QGIS dev

funzione aggregate

","tags":["moduli","filtro","form","relazioni"]},{"location":"esempi/drilldown_form_multiple/#prova-tu","title":"Prova tu","text":"

Geopackage con dati e progetto Nel GeoPackage sono state memorizzate i tre stili usati per il form!!!

","tags":["moduli","filtro","form","relazioni"]},{"location":"esempi/drilldown_form_multiple/#riferimenti","title":"Riferimenti","text":"

Lista QGIS dev

Issue: https://github.com/qgis/QGIS/issues/33046

Funzioni e variabili utilizzate:

","tags":["moduli","filtro","form","relazioni"]},{"location":"esempi/elenco_comuni_attraversati_fiume/","title":"elenco comuni","text":"

Come ottenere l'elenco dei Comuni attraversati da un fiume.

Esempio:

Dato il vettore dei Comuni toscani e il vettore dei fiumi (Arno e Ombrone) aggiungere un campo (al vettore fiumi) con tutti i nomi dei comuni attraversati dai due fiumi

avviare il calcolatore di campi e creare un nuovo campo 'comuni' testo (255) e popolarlo con la seguente espressione:

aggregate(\nlayer:='comuni_rt', \naggregate:='concatenate', \nexpression:= \"nome\", \nfilter:= crosses($geometry, geometry(@parent) ),\nconcatenator:='-') \n
Step:

seleziono il layer _fiumi_rt, clicco sull'icona del calcolatore di campi:

  1. nome del campo in uscita: comuni
  2. tipo di campo in uscita: testo;
  3. lunghezza campo: 255
  4. scrivo espressione di sopra;

ecco la tabella attributi:

","tags":["aggregare","tabella","valori"]},{"location":"esempi/elenco_comuni_attraversati_fiume/#prova-tu","title":"prova tu","text":"

dati e progetto QGIS 3.4

Funzioni e variabili utilizzate:

","tags":["aggregare","tabella","valori"]},{"location":"esempi/elenco_ordinato_comuni_attraversati/","title":"Elenco ordinato di Comuni attraversati da un itinerario","text":"

Come ottenere l'elenco ordinato dei Comuni attraversati da un itinerario.

Esempio:

A partire da un itinerario ciclabile, determinare i Comuni attraversati da questa linea, in ordine di intersezione, partendo da un origine seguendo il percorso per arrivare alla destinazione, avendo quindi una lista ordinata.

avviare il calcolatore di campi (dopo aver selezionato il layer poligonale) e creare un nuovo campo sort_D-A numerico e popolarlo con la seguente espressione:

with_variable('toto',  reverse( geometry(get_feature('percorso','fid',1))),\n    array_find( \n        array_filter(\n            array_sort(\n                array_agg(\n                    line_locate_point(@toto, line_interpolate_point( intersection($geometry,@toto ), \n                    length(intersection($geometry,@toto))*0.1 ))\n                         )\n                      ), @element >0),\n                    line_locate_point(@toto, line_interpolate_point( intersection($geometry,@toto ), \n                    length(intersection($geometry,@toto)) *0.1 ))\n                )\n)   \n

L'espressione popoler\u00e0 solo le celle in cui esiste l'intersezione tra percorso e poligono comunale, le altre celle rimarranno NULL. Il valore rappresenter\u00e0, a partire da 0, l'ordine dei Comuni (0,1,2,3....50...).

Logica dell'espressione:

Per ogni intersezione, tra linea percorso e poligoni comunali, calolo un punto lungo la linea posto ad una distanza pari al 10% dell'intera intersezione e la uso per determinare la lunghezza totale a partire dall'origine dell'intero percorso. Lunghezze maggiori indicano poligoni comunali attraversati dopo rispetto a quelli con lunghezza minore.

Step:

seleziono il layer itinerario_cicloturistico_domosossola_aosta ambiti_amministrativi_comuni presente nella TOC, clicco sull'icona del calcolatore di campi:

  1. nome del campo in uscita: sort_D-A
  2. tipo di campo in uscita: integer;
  3. scrivo espressione di sopra;

ecco la tabella attributi:

Poligoni comunali

Maggiori dettagli nel blog post su Pigrecoinfinito:

","tags":["aggregare","array","tabella","itinerari","ordinare"]},{"location":"esempi/elenco_ordinato_comuni_attraversati/#prova-tu","title":"prova tu","text":"

dati e progetto QGIS 3.12

Funzioni e variabili utilizzate:

","tags":["aggregare","array","tabella","itinerari","ordinare"]},{"location":"esempi/eliminare_duplicati_condizione/","title":"Rimuovere elementi duplicati in base a una condizione su un'altra colonna di attributi","text":"

gis.stackexchange : https://gis.stackexchange.com/questions/419159/removing-duplicate-features-based-on-a-condition-on-another-attribute-column-in

Rimuovere elementi duplicati in base a una condizione su un\u2019altra colonna di attributi in QGIS. Esempio, tabella degli attributi di uno shapefile poligonale:

","tags":["duplicati","condizioni","tabella","attributi","selezionare"]},{"location":"esempi/eliminare_duplicati_condizione/#selezione-per-espressione","title":"Selezione per espressione","text":"
Column_A != minimum (Column_A, group_by:=Column_B)\n

In linguaggio umano:

Seleziona tutte le righe per cui la Column_A \u00e8 diversa != dal valore minimo minumum calcolato nel campo Column_A dopo aver raggruppato usando i valori della Column_B.

Si utilizza il != in quanto occorre rimuovere i dati duplicati.

","tags":["duplicati","condizioni","tabella","attributi","selezionare"]},{"location":"esempi/eliminare_duplicati_condizione/#geoprocessing","title":"Geoprocessing","text":"

Utilizzando l'algoritmo aggrega:

espressione utilizzata:

with_variable(\n    'cucu',\n    array_agg( \"Column_A\" , \"Column_B\" ),\narray_agg( \"Column_C\" , \"Column_B\" )\n                          [array_find(@cucu,array_min(@cucu))]\n                     )\n

per maggiori info, leggi qui: https://pigrecoinfinito.com/2021/12/18/rimozione-di-elementi-duplicati-in-base-a-una-condizione-su-unaltra-colonna-di-attributi-in-qgis/

il file di esempio \u00e8 scaricabile qui

Funzioni e variabili utilizzate:

","tags":["duplicati","condizioni","tabella","attributi","selezionare"]},{"location":"esempi/eliminare_testo_tra_parentesi/","title":"Eliminare testo tra parentesi","text":"

Supponiamo di avere una tabella degli attributi con un campo che contiene del testo, come l'esempio di sotto:

prima dopo ciao a tutti (si fa per dire), sono Tot\u00f2 ciao a tutti, sono Tot\u00f2 come state oggi? (come prima, non ci fare caso) test come state oggi? test serata bella serata bella facile usare le regex, vero? () facile usare le regex vero?

per ottenere il campo dopo, basta utilizzare la seguente espressione

regexp_replace( \"nome\", '\\\\(.*\\\\)','')\n

oppure aggiornare il campo prima con la stessa espressione.

Funzioni e variabili utilizzate:

","tags":["testo","regex","valori"]},{"location":"esempi/espressione_regolare/","title":"Espressione regolare: inserire automaticamente un carattere speciale","text":"

Ho delle label composte da 4-5 parole e vorrei mandare a capo ogni 2 parole circa. Se uso lo spazio ovviamente mi impila le 4-5 parole e non \u00e8 quello che vorrei ottenere. E' possibile inserire automaticamente un carattere speciale dopo ogni due parole? Utilizzerei poi quel carattere per mandare a capo il testo nel compositore di stampa di QGIS 2.18. Inserire il carattere speciale a mano \u00e8 impensabile...sono pi\u00f9 di 1000 feature..

CASE \nWHEN length (\"TRIM_STR_C\" ) >34\nTHEN regexp_replace( \"TRIM_STR_C\" , '(\\\\S+\\\\s+\\\\S+\\\\s+\\\\S+)(\\\\s+)(.*)','\\\\1$\\\\3') \nelse regexp_replace( \"TRIM_STR_C\" , '(\\\\S+\\\\s+\\\\S+)(\\\\s+)(.*)','\\\\1$\\\\3') \nEND\n

Questa espressione condizionale controlla prima la lunghezza della stringa (label) e se >34 applica la prima regexp_replace altrimenti la seconda;

la regexp_replace:

(\\\\S+\\\\s+\\\\S+\\\\s+\\\\S+)(\\\\s+)(.*) acchiappa il terzo spazio presente in tutta la frase e per sostituirgli un carattere spaciale: \\\\1$\\\\3 dove \\\\1 \u00e8 la prima parte prima del terzo spazio mentre \\\\3 \u00e8 la terza parte contando anche lo spazio;

(\\\\S+\\\\s+\\\\S+)(\\\\s+)(.*) acchiappa il secondo spazio presente in tutta la frase e per sostituirgli un carattere spaciale: \\\\1$\\\\3 dove \\\\1 \u00e8 la prima parte prima del terzo spazio mentre \\\\3 \u00e8 la terza parte contando anche lo spazio;

thread ML Gfoss

Altra possibile soluzione, molto pi\u00f9 elegante \u00e8 la seguente (grazie Andrea Borruso):

^((\\\\S+\\\\s*?){3})(\\\\s+)(.*?)$ e per la sostituzione \\\\1#\\\\4

ovvero, il numero tra parentesi graffe indica la parola oltre la quale inserire il carattere speciale:

regexp_replace('Via Mario Miglioranza detto Pinto','^((\\\\S+\\\\s*?){3})(\\\\s+)(.*?)$','\\\\1#\\\\4')  \u2192 Via Mario Miglioranza#detto Pinto\n

Funzioni e variabili utilizzate:

","tags":["regex","caratteri","condizioni","valori"]},{"location":"esempi/estrarre_campo_hstore/","title":"Estrarre un campo da un attributo HStore","text":"

Il formato HStore \u00e8 molto usato nel database OpenStreetMap, leggi qui.

In questo esempio estrarremo dall'attributo other_tags il valore della chiave population, il dataset \u00e8 qui

espressione utilizzata:

to_int(\n    map_get(\n        hstore_to_map(\"other_tags\"),'population')\n)\n
","tags":["estrarre","attributi","tabella","valori","chiave-valore"]},{"location":"esempi/estrarre_campo_hstore/#provaci-tu","title":"provaci tu","text":"

download isole

","tags":["estrarre","attributi","tabella","valori","chiave-valore"]},{"location":"esempi/estrarre_numeri_iniziali/","title":"Estrarre i numeri iniziali","text":"

Domanda posta su un gruppo telegram:

Buona sera, chiedo qualche dritta sulle regexp in PG:

Ho una tabella con un campo di tipo text, che contiene informazioni sul numero di tubi e diametri a mo' di etichetta statica, vorrei estrarre solo la quantit\u00e0, e listarla a modo di array, come faccio?

es.

'1T\u00d850' --> atteso: [1]\n'3T\u00d8120 + 8T\u00d860' --> atteso: [3, 8]\n'5T\u00d830 + 7T\u00d860 + 12T\u00d825' --> atteso: [5, 7, 12]\n

","tags":["ricerca","caratteri","regex","array"]},{"location":"esempi/estrarre_numeri_iniziali/#soluzione","title":"soluzione","text":"
array_foreach(\n  string_to_array(\"tubi\",' + '),\n  regexp_replace(@element,'(\\\\d+)(.+)','\\\\1')\n)\n

la prima parte dell'espressione crea un array e gli elementi sono i testi compresi tra i +

dove:

Funzioni e variabili utilizzate:

","tags":["ricerca","caratteri","regex","array"]},{"location":"esempi/etichettare_chiave_valore/","title":"Etichettare usando struttura a mappa chiave-valore","text":"

Alcune volte nasce la necessit\u00e0 di etichettare le feature facendo vedere sia il nome del campo che il corrispondente valore (classico caso chiave:valore).

Shapefile regioni ISTAT, creare l'etichetta in modo da visualizzare, per ogni regione, tutti i campi e relativi valori, vedi screenshot:

Espressione da usare:

replace(\n   replace (\n      map_to_hstore( attributes())\n   ,'\"','')\n      , '=>',' = ')\n

dove l'espressione che crea una struttura a mappa \u00e8:

map_to_hstore( attributes()) \u2192 '\"cod_reg\"=>\"1\",\"cod_rip\"=>\"1\",\"den_reg\"=>\"Piemonte\",\"fid\"=>\"\u2026'\n

le funzioni replace() servono a modificare l'output, cio\u00e8 a togliere i doppi apici e la freccia.

NB: I campi sono ordinati alfabeticamente!

Funzioni e variabili utilizzate:

","tags":["etichette","chiave-valore","valori"]},{"location":"esempi/etichettare_con_apici/","title":"Aggiungere caratteri speciali alle etichette","text":"

Come aggiungere nelle etichette gli apici come km\u00b2 e similari?

La funzione char restituisce il carattere associato ad un codice unicode, quindi \u00e8 possibile usare i codici unicode per qualsiasi altro carattere speciale per esempio:

descrizione espressione risultato apice 2 char(178) \u00b2 apice 3 char(179) \u00b3 gradi char(176) \u00b0 circa char(8776) \u2248 diametro char(8709) \u2205 euro char(8364) \u20ac alfa char(945) \u03b1 beta char(946) \u03b2 epsilon char(949) \u03b5 teta char(952) \u03b8 diverso char(8800) \u2260

","tags":["etichette","caratteri"]},{"location":"esempi/etichettare_con_apici/#osservazione","title":"osservazione:","text":"

per trovare il codice di un carattere basta utilizzare la funzione ascii('\u2b50') \u2192 11088

blog post : https://pigrecoinfinito.com/2021/10/11/qgis-e-le-unita-di-misura-nel-si/

Funzioni e variabili utilizzate:

","tags":["etichette","caratteri"]},{"location":"esempi/etichettare_itinerario_elenco_comuni_attraversati/","title":"Etichettare un itinerario con l\u2019elenco ordinato dei Comuni attraversati","text":"

Qualche giorno fa in queste pagine \u00e9 stato pubblicato un esempio su come creare, tramite calcolatore di campi, un elenco ordinato di Comuni attraversati da un itinerario (esempio 39). Nell\u2019esempio citato l\u2019espressione utilizzata permetteva di creare un nuovo campo con numerazione progressiva all\u2019interno del layer poligonale contenente i limiti comunali. In questo esempio vedremo invece come sia possibile, sempre utilizzando iI calcolatore di campi, intervenire direttamente sul layer lineare rappresentante l\u2019itinerario e creare una etichetta (o un nuovo campo testuale della tabella attributi) contenente un elenco ordinato e numerato dei comuni attraversati.

L\u2019espressione da utilizzare \u00e9 la seguente:

array_to_string(\n        array_foreach(\n            generate_series(1, \n                num_geometries( \n                    collect_geometries(\n                        aggregate(\n                        layer:= 'poligoni',\n                        aggregate:='array_agg',\n                        expression:= start_point(intersection($geometry, geometry(@parent))),\n                        filter:=intersects($geometry, geometry(@parent)))\n                                                )\n                                        )\n                                    )\n        ,\n\n    concat (@element,'. ',\n        array_get(\n            aggregate(\n            layer:= 'poligoni',\n            aggregate:='array_agg',\n            expression:= \"nome\",\n            filter:=intersects($geometry, geometry(@parent)),\n            order_by:= line_locate_point(geometry(@parent),start_point(intersection($geometry,geometry(@parent)))))\n        ,@element-1)\n                )\n                            )\n, ', ')\n

Vediamo le diverse parti che compongono l\u2019espressione e la sua logica.

start_point(intersection($geometry, geometry(@parent)))\n

la quale, dopo aver spezzato l\u2019itinerario in segmenti corrispondenti ai territori comunali attraversati, crea una nuova geometria puntuale calcolando il punto iniziale di ciascun segmento, corrispondente, in questo esempio, al primo ingresso dell\u2019itinerario all\u2019interno di un Comune.

Aggiungendovi la funzione line_locate_point, la quale calcola la distanza tra il punto iniziale di una linea (per noi l\u2019itinerario) e un dato punto (i diversi punti equivalenti agli ingressi nei territori comunali), \u00e9 possibile ordinare la geometria puntuale secondo l\u2019ordine di ingresso del percorso nei diversi Comuni.

La serie numerica viene creata ricorrendo alla funzione generate_series, con primo valore 1 e per valore ultimo il numero di punti che compongono la geometria puntuale generata dall\u2019espressione:

start_point(intersection($geometry, geometry(@parent)))\n

calcolato tramite funzione num_geometries.

In entrambe, ricorrendo all\u2019argomento filter della funzione aggregate, \u00e9 possibile limitare il calcolo ai soli poligoni comunali intersecati dall\u2019itinerario:

filter:=intersects($geometry, geometry(@parent)))\n

La concatenazione dei due elementi (numero e nome) viene fatta tramite funzione array_foreach, applicando a ciascun elemento della prima serie numerale l\u2019espressione concat().

Il risultato di questa operazione \u00e9 ancora un\u2019array di dati, la quale viene convertita in stringa tramite array_to_string.

Procedura 1. Seleziona il layer contenente l\u2019itinerario; 2. Nel Pannelo Stile Layer seleziona la scheda Etichette; 3. In Valore clicca sul simbolo a destra per aprire la finestra di dialogo delle espressioni; 4. Copia l\u2019espressione nel riquadro; 5. Conferma premendo OK.

Realizzato da\u00a0Valerio Pinna (grazie mille!)

","tags":["etichette","itinerari","array","valori","ordinare"]},{"location":"esempi/etichettare_itinerario_elenco_comuni_attraversati/#prova-tu","title":"prova tu","text":"

dati e progetto QGIS 3.12

Funzioni e variabili utilizzate:

","tags":["etichette","itinerari","array","valori","ordinare"]},{"location":"esempi/etichette/","title":"Etichettare usando attibuto geometry","text":"

L'attributo geometry \u00e8 l'unico campo non visibile nella tabella attributi, ma c'\u00e8!!!

La geometry \u00e8 espressa in un modo non comprensibile dall'uomo e quindi si evita di farla vedere, questo attibuto porta con se altri attibuti impliciti alla geometria stessa come:

le caratteristiche sono sempre richiamabili (se presenti, cio\u00e8 se ha la Z o m) e quindi non occorre esplicitarle, anzi se esplicitate creano un dataset ridontate.

Un modo per richiamarle \u00e8 attraverso l'etichettatura:

espressione da scrivere nel calcolatore di campi

'x= ' || to_int($x)  \n|| '\\n'  || \n'y= ' || to_int($y)\n|| '\\n'  || \n'z= ' || z($geometry)\n|| '\\n'  || \n'm= ' || m($geometry)\n

espressione da scrivere nel calcolatore di campi

to_int($length)\n||'/'|| \nz(start_point($geometry))\n

espressione da scrivere nel calcolatore di campi 'Area= ' || format_number( $area,1) || ' mq'

Geopackage \u00e8 qui

Funzioni e variabili utilizzate:

","tags":["etichette","formattare","x","y","z","punti"]},{"location":"esempi/etichette_formattate_diversi_stili/","title":"Etichette formattate con diversi stili all'interno del testo","text":"

Una richiesta che spesso si ritrova nei canali social della Comunit\u00e1 QGIS \u00e9 quella di poter creare delle etichette al cui interno solo una parte del testo \u00e9 formattata con uno stile diverso dal resto della stringa. In QGIS, infatti, \u00e9 possibile utilizzare gli strumenti offerti dal sistema per formattare in grassetto o corsivo l\u2019intera etichetta ma non \u00e9 possibile, di default, applicare lo stile ad una sola parte del testo. Una soluzione a questo problema \u00e9 offerta dal Calcolatore di campi, dimostrando ancora una volta la potenza di questo strumento. Esistono in rete diversi siti che offrono la possibilit\u00e1 di formattare automaticamente un testo e di espostarlo con un semplice copia-incolla. Qui verranno utilizzati Boldtext (LINK 1) per il grassetto e Lingojam (LINK 2) per il corsivo e per alcuni altri esempi di stili per per creare stringhe alfabetiche formattate da utilizzare nella nostra espressione.

L\u2019espressione da utilizzare nell\u2019etichetta in corrispondenza della casella Valore \u00e9 la seguente:

with_variable(\n  'caratteri_normali',\n  array('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9'),\n\nwith_variable(\n'corsivo',\narray('\ud835\ude22','\ud835\ude23','\ud835\ude24','\ud835\ude25','\ud835\ude26','\ud835\ude27','\ud835\ude28','\ud835\ude29','\ud835\ude2a','\ud835\ude2b','\ud835\ude2c','\ud835\ude2d','\ud835\ude2e','\ud835\ude2f','\ud835\ude30','\ud835\ude31','\ud835\ude32','\ud835\ude33','\ud835\ude34','\ud835\ude35','\ud835\ude36','\ud835\ude37','\ud835\ude38','\ud835\ude39','\ud835\ude3a','\ud835\ude3b','\ud835\ude08','\ud835\ude09','\ud835\ude0a','\ud835\ude0b','\ud835\ude0c','\ud835\ude0d','\ud835\ude0e','\ud835\ude0f','\ud835\ude10','\ud835\ude11','\ud835\ude12','\ud835\ude13','\ud835\ude14','\ud835\ude15','\ud835\ude16','\ud835\ude17','\ud835\ude18','\ud835\ude19','\ud835\ude1a','\ud835\ude1b','\ud835\ude1c','\ud835\ude1d','\ud835\ude1e','\ud835\ude1f','\ud835\ude20','\ud835\ude21','0','1','2','3','4','5','6','7','8','9'),\n\nwith_variable(\n    'grassetto',\n    array('\ud835\uddee','\ud835\uddef','\ud835\uddf0','\ud835\uddf1','\ud835\uddf2','\ud835\uddf3','\ud835\uddf4','\ud835\uddf5','\ud835\uddf6','\ud835\uddf7','\ud835\uddf8','\ud835\uddf9','\ud835\uddfa','\ud835\uddfb','\ud835\uddfc','\ud835\uddfd','\ud835\uddfe','\ud835\uddff','\ud835\ude00','\ud835\ude01','\ud835\ude02','\ud835\ude03','\ud835\ude04','\ud835\ude05','\ud835\ude06','\ud835\ude07','\ud835\uddd4','\ud835\uddd5','\ud835\uddd6','\ud835\uddd7','\ud835\uddd8','\ud835\uddd9','\ud835\uddda','\ud835\udddb','\ud835\udddc','\ud835\udddd','\ud835\uddde','\ud835\udddf','\ud835\udde0','\ud835\udde1','\ud835\udde2','\ud835\udde3','\ud835\udde4','\ud835\udde5','\ud835\udde6','\ud835\udde7','\ud835\udde8','\ud835\udde9','\ud835\uddea','\ud835\uddeb','\ud835\uddec','\ud835\udded','\ud835\udfec','\ud835\udfed','\ud835\udfee','\ud835\udfef','\ud835\udff0','\ud835\udff1','\ud835\udff2','\ud835\udff3','\ud835\udff4','\ud835\udff5'),\n\nwith_variable('scrittura_a_mano', \n\narray('\ud835\udcb6','\ud835\udcb7','\ud835\udcb8','\ud835\udcb9','\ud835\udc52','\ud835\udcbb','\ud835\udc54','\ud835\udcbd','\ud835\udcbe','\ud835\udcbf','\ud835\udcc0','\ud835\udcc1','\ud835\udcc2','\ud835\udcc3','\ud835\udc5c','\ud835\udcc5','\ud835\udcc6','\ud835\udcc7','\ud835\udcc8','\ud835\udcc9','\ud835\udcca','\ud835\udccb','\ud835\udccc','\ud835\udccd','\ud835\udcce','\ud835\udccf','\ud835\udc9c','\ud835\udc35','\ud835\udc9e','\ud835\udc9f','\ud835\udc38','\ud835\udc39','\ud835\udca2','\ud835\udc3b','\ud835\udc3c','\ud835\udca5','\ud835\udca6','\ud835\udc3f','\ud835\udc40','\ud835\udca9','\ud835\udcaa','\ud835\udcab','\ud835\udcac','\ud835\udc45','\ud835\udcae','\ud835\udcaf','\ud835\udcb0','\ud835\udcb1','\ud835\udcb2','\ud835\udcb3','\ud835\udcb4','\ud835\udcb5','\ud835\udfe2','\ud835\udfe3','\ud835\udfe4','\ud835\udfe5','\ud835\udfe6','5','\ud835\udfe8','\ud835\udfe9','\ud835\udfea','\ud835\udfeb'),\n\nwith_variable('stiloso',\narray('\ud835\udd52','\ud835\udd53','\ud835\udd54','\ud835\udd55','\ud835\udd56','\ud835\udd57','\ud835\udd58','\ud835\udd59','\ud835\udd5a','\ud835\udd5b','\ud835\udd5c','\ud835\udd5d','\ud835\udd5e','\ud835\udd5f','\ud835\udd60','\ud835\udd61','\ud835\udd62','\ud835\udd63','\ud835\udd64','\ud835\udd65','\ud835\udd66','\ud835\udd67','\ud835\udd68','\ud835\udd69','\ud835\udd6a','\ud835\udd6b','\ud835\udd38','\ud835\udd39','\u2102','\ud835\udd3b','\ud835\udd3c','\ud835\udd3d','\ud835\udd3e','\u210d','\ud835\udd40','\ud835\udd41','\ud835\udd42','\ud835\udd43','\ud835\udd44','\u2115','\ud835\udd46','\u2119','\u211a','\u211d','\ud835\udd4a','\ud835\udd4b','\ud835\udd4c','\ud835\udd4d','\ud835\udd4e','\ud835\udd4f','\ud835\udd50','\u2124','\ud835\udfd8','\ud835\udfd9','\ud835\udfda','\ud835\udfdb','\ud835\udfdc','\ud835\udfdd','\ud835\udfde','\ud835\udfdf','\ud835\udfe0','\ud835\udfe1'),\n\n   replace(\"Name\", @caratteri_normali, @grassetto) \n    || '\\n'  ||  \n    replace(\"Name\", @caratteri_normali, @corsivo)\n    || '\\n'  ||  \n    replace(\"Name\", @caratteri_normali, @scrittura_a_mano)\n     || '\\n'  ||  \n    replace(\"Name\", @caratteri_normali, @stiloso)\n\n)))))\n
","tags":["etichette","formattare","testo","array"]},{"location":"esempi/etichette_formattate_diversi_stili/#vediamo-come-opera","title":"Vediamo come opera","text":"

Per ogni stile che si vuole utilizzare \u00e9 necessario creare una variabile usando la funzione with_variable contenente un\u2019array composta da tutti i caratteri (maiuscolo, minuscolo e numeri). La prima variabile creata contiene i caratteri normali, non formattati, mentre le altre variabili nell\u2019espressione contengono serie di caratteri formattati nei diversi stili. Per creare queste array si deve semplicemente copiare e incollare il contenuto della prima array coi caratteri normali in uno dei siti suddescritti e una volta creato il testo formattato copiarlo nella nuova array. Una volta preparato il gruppo di variabili con gli stili a propria scelta, passiamo alla seconda parte dell\u2019espressione.

replace(\"Name\", @caratteri_normali, @grassetto)

Utilizzando la funzione replace, semplicemente chiediamo al sistema di restituirci la stringa qui rappresentata da \"den_reg\" sostituendo ai caratteri normali (@caratteri_normali) i caratteri corrispondenti contenuti nella seconda variabile (@grassetto). Per applicare un diverso stile si deve semplicemente sostituire seconda variabile con lo stile scelto. Utilizzando la funzione concat o il simbolo di concatenazione || si possono costruire anche etichette complesse con diversi stili di formattazione all\u2019interno della stessa stringa. Un esempio di questo \u00e9 presentato poco pi\u00fa avanti dove vedremo una soluzione alternativa allo stesso problema.

Soluzione con variabili di progetto

Per rendere gli stili disponibili a tutti i layer del progetto \u00e9 possibile utilizzare le variabili personalizzate di progetto, cos\u00ed da richiamare i diversi stili velocemente all\u2019interno dell\u2019espressione.

Step 1

All\u2019interno delle propriet\u00e1 del progetto, nella scheda Variabili, creare una nuova variabile per ciascuno degli stili, contenente l\u2019intera serie di caratteri separati dalla virgola.

Step 2

L\u2019espressione in questo caso sar\u00e1 semplificata, semplicemente richiamando la stringa contenuta nella variabile di progetto e convertendola in array con la funzione string_to_array.

with_variable('caratteri_normali',\nstring_to_array(@stile_normale) ,\n\nwith_variable('grassetto',\nstring_to_array(@stile_grassetto) ,\n\nwith_variable('corsivo',\nstring_to_array(@stile_corsivo) ,\n\n\nreplace(\"DEN_REG\", @caratteri_normali,  @grassetto ) || \n' non \u00e9 in ' || \nreplace('corsivo', @caratteri_normali,  @corsivo )\n )))\n

L\u2019idea di questo esempio e stata suggerita da una risposta su GIS.Stackexchange (LINK 3) data dall\u2019utente bugmenot123 che ringrazio per la geniale soluzione proposta.

Grazie a Salvatore Fiandaca per avermi proposto di scrivere questo esempio e per il suo suggerimento per proporre anche la soluzione con variabili di progetto.

Link utili:

  1. https://boldtext.io/
  2. https://lingojam.com/ItalicTextGenerator
  3. https://gis.stackexchange.com/questions/357234/styling-substring-of-label-with-different-style-without-creating-two-separate-la?fbclid=IwAR3n94vGBAe9MMoayzLTkGjdlimq7Dkbefm0lAzuSPSbS_kLpxq88w6Eixk

Realizzato da\u00a0Valerio Pinna (grazie mille!)

","tags":["etichette","formattare","testo","array"]},{"location":"esempi/etichette_formattate_diversi_stili/#prova-tu","title":"Prova tu","text":"

Geopackage \u00e8 qui

Funzioni e variabili utilizzate:

","tags":["etichette","formattare","testo","array"]},{"location":"esempi/fill-down/","title":"fill-down con le espressioni di QGIS","text":"

Il fill-down \u00e8 un filtro molto usato da chi lavora con i dati e risolve il segunete problema: \"Se un dato record di una tabella ha un valore mancante per un dato campo, riempilo con il valore corrispondente da un record precedente, se presente\". Molti tool lo hanno implementato come Visidata, Miller, OpenRifine, GeoPandas ecc...; vediamo come ottenere questa funzione usando solo le espressioni di QGIS.

Tabella di esempio:

data nuts2 zona zona_fill 2020-11-09T17:00:00 ITF1 2020-11-10T17:00:00 ITF1 arancione arancione 2020-11-11T17:00:00 ITF1 arancione 2020-11-12T17:00:00 ITF1 arancione 2020-11-20T17:00:00 ITF1 arancione 2020-11-21T17:00:00 ITF1 arancione 2020-11-22T17:00:00 ITF1 rossa rossa 2020-11-23T17:00:00 ITF1 rossa 2020-11-24T17:00:00 ITF1 rossa 2020-12-04T17:00:00 ITF1 rossa 2020-11-09T17:00:00 ITF5 rossa 2020-11-10T17:00:00 ITF5 arancione arancione 2020-11-11T17:00:00 ITF5 arancione 2020-11-12T17:00:00 ITF5 arancione 2020-11-13T17:00:00 ITF5 arancione 2020-11-14T17:00:00 ITF5 arancione 2020-11-24T17:00:00 ITF5 arancione arancione 2020-11-25T17:00:00 ITF5 arancione 2020-11-26T17:00:00 ITF5 arancione

come ottenere la colonna zona_fill a partire dalla colonna zona: in pratica occorre popolare le celle con il primo valore non nullo partendo dall'alto e procedendo verso il basso.

Ecco una soluzione:

  1. crare il campo zona_fill come testo, lunghezza 20;
  2. con il calcolatore di campi, aggiornale il campo appena creato con l'espressione:
if( \"zona\" is NULL,\nattribute( get_feature_by_id(@layer, $id -1),\n'zona_fill') , \"zona\")\n

PS: potremmo direttamente aggiornare il campo zona senza necessariamente creare un nuovo campo, usando questa espressione:

if( \"zona\" is NULL,\nattribute( get_feature_by_id(@layer, $id -1),\n'zona') , \"zona\")\n

Nel linguaggio umano significa: partendo dalla prima riga ($id=1) della tabella, se il campo zona \u00e8 non vuoto allora popolalo con il valore corrispondente se invece \u00e8 vuoto (NULL) prendi il valore corrispondente alla riga precedente ($id -1).

Il quesito \u00e8 stato posto in lista QGIS-user internazionale e la soluzione \u00e8 di Andrea Giudiceandrea (grazie mille)

Nella sezione Funzioni, Gruppo Custom \u00e8 presente la funzione personalizzata fill-down creata da Giulio Fattori.

Funzioni e variabili utilizzate:

","tags":["tabella","fill-down","condizioni"]},{"location":"esempi/finestra_temporale/","title":"Calcolo incidenza cumulativa settimanale","text":"

Questo calcolo \u00e8 interessante in quanto permette di calcolare l\u2019incidenza cumulativa settimanale, ovvero, fissata una data, calcolare la somma di un attributo relativo ai 6 giorni precedenti (finestra temporale).

/*incidenza cumulativa settimanale*/\n\nwith_variable('pos',\n    array_find(array_agg( expression:=\"campodata\"),\"campodata\"),\n        with_variable('dat',\n            array_length(array_agg(\"campodata\")),\narray_length(\narray_slice(\n    array_agg(\"campo1\",group_by:=\"campo2\"),\n    -@dat+@pos-6,\n    -@dat+@pos)))\n

NB: la funzione array_sum \u00e8 presente nel core di QGIS a partire da QGIS 3.18 Z\u00fcrich, in alternativa \u00e8 presente nel plugin ArrayPlus

","tags":["etichette","incidenza","array","csv"]},{"location":"esempi/finestra_temporale/#ecco-un-esempio-usando-i-dati-sul-covid-19","title":"Ecco un esempio usando i dati sul COVID-19","text":"

Fissata una data, calcolare la somma dei nuovi_positivi dei 6 giorni precedenti e poi normalizzarli rispetto la popolazione (campo j_OBS_VALUE messo in join).

/*incidenza cumulativa settimanale*/\n(with_variable('pos',\n    array_find(array_agg( expression:=\"data\"),\"data\"),\n        with_variable('dat',\n            array_length(array_agg(\"data\")),\narray_sum(\narray_slice(\n    array_agg(\"nuovi_positivi\",\"denominazione_regione\"),\n    -@dat+@pos-6,\n    -@dat+@pos)))\n             )\n/  \"j_OBS_VALUE\") * 100000\n

Funzioni e variabili utilizzate:

","tags":["etichette","incidenza","array","csv"]},{"location":"esempi/generalizzare_linee/","title":"Vestizione generalizzata delle linee di contorno","text":"

Quando si creano linee di contorno a partire da un modello digitale del terreno spesso la geometria lineare risultante si presenta ricca di asperit\u00e1. Esistono diversi algoritmi o plugin che permettono di generalizzare e semplificare le linee al fine di renderle pi\u00fa adatte ad un loro uso su mappe stampate o schermate.

In questo esempio l'operazione di semplificazione e smussamento della vestizione delle linee verr\u00e1 fatto ricorrendo alle espressioni e al generatore di geometrie, cosi da non intervenire direttamente sulla geometria e mantenere il dataset originario del vettore.

espressione da usare:

CASE\nWHEN $length > 25 \nTHEN \nsmooth(simplify($geometry,10),21,0.2)\nEND\n
","tags":["linee","vestizione","condizioni"]},{"location":"esempi/generalizzare_linee/#spiegazioni","title":"spiegazioni","text":"

Vediamo le diverse parti che compongono l'espressione:

  1. Seleziona il layer contenente le curve di livello.
  2. Nel Pannelo Stile Layer seleziona la scheda Simbologia
  3. In Tipo simbolo del vettore seleziona Generatore Geometria
  4. In Tipo di geometria seleziona LineString/MultiLineString
  5. Copia l\u2019espressione nel riquadro

La simbologia del layer si aggiorner\u00e1 automaticamente. In questo modo \u00e9 possibile cambiare alcuni dei valori inseriti e verificare in tempo reale il risultato.

Una volta trovata la combinazione migliore di valori che restituisce la simbologia che si preferisce, \u00e9 possibile utilizzare la stessa espessione nel Calcolatore di campi per aggiornare la Geometria:

  1. Seleziona il layer contenente le curve di livello.
  2. Apri il Calcolatore di campi
  3. Spunta l'opzione Aggiorna un campo esistente
  4. Nel men\u00fa a tendina seleziona geometry.
  5. Copia l\u2019espressione nel riquadro
  6. Clicca ok
","tags":["linee","vestizione","condizioni"]},{"location":"esempi/generalizzare_linee/#prova-tu","title":"Prova tu","text":"

Il geopackage \u00e8 scaricabile qui

--

Realizzato da Valerio Pinna

Funzioni e variabili utilizzate:

","tags":["linee","vestizione","condizioni"]},{"location":"esempi/geometria_vicina_filtro/","title":"Geometria pi\u00f9 vicina e filtro condizionato","text":"

Tre layer: 1. Layer di punti che rappresenta delle utenze (layer1). 2. Layer di punti derivante da un rilevamento topografico (layer2). 3. Layer di poligoni rappresentante degli edifici (layer3).

Popolare un nuovo campo del layer1 con il valore dell'attributo presente nel layer2 relativo alla geometria pi\u00f9 vicina a condizione che i punti ricadono nello steso poligono, layer3.

Esempio:

soluzione di Andrea Giudiceandrea

attribute( \narray_filter( \noverlay_nearest( 'layer2', $currentfeature, limit:=-1 ), \nattribute( @element, 'IDp' ) = \"IDp\" )[0], 'IDl2' )\n

Soluzione pigreco

relation_aggregate( \n    relation:='rel',\n    aggregate:='array_agg',\n    expression:=\"IDl2\")\n    [\n        with_variable('fufu',\n        array_foreach(\n            relation_aggregate( \n                relation:='rel',\n                aggregate:='array_agg',\n                expression:=$geometry),\n        distance($geometry,@element)),\n        array_find(@fufu,array_min(@fufu)))\n    ]\n

Soluzione pigreco in SQL

SELECT l1.\"IDAG\" AS la1 , id, shortestline(l1.\"geom\", l2.\"geom\") as geom\nFROM \"layer1\" l1 , \"layer2\" l2 \nWHERE l1.\"IDAG\"=l2.\"IDAG\"\ngroup by l1.\"IDAG\"\nhaving min(st_distance(l1.\"geom\", l2.\"geom\"))\n
","tags":["prossimit\u00e0","condizioni","array","relazioni"]},{"location":"esempi/geometria_vicina_filtro/#prova-tu","title":"prova tu","text":"

dati e progetto QGIS 3.12

Funzioni e variabili utilizzate:

","tags":["prossimit\u00e0","condizioni","array","relazioni"]},{"location":"esempi/geometria_vicina_filtro_condizionato/","title":"Geometria pi\u00f9 vicina con filtro condizionato","text":"

Due layer di punti: layer1 con attributo id1 e layer2 con id2. A partire dal layer1, ottenere per ogni punto del layer1 tutti i punti del layer2 dove id2 ha un valore diverso da id1 (collegarli con un segmento).

Esempio:

Come si evince dallo screenshot, i punti in rosso devono collegarsi con i punti blu che hanno id differente. Il punto 6 \u00e8 rimasto isolato perch\u00e9 non ci sono punti vicini e con id diverso da 6.

Espressione utilizzata (>=QGIS 3.16):

collect_geometries(\n        make_line(\n        $geometry,\n        geometry(get_feature('layer2','id2',\n                                attribute( \n                                array_filter( \n                                overlay_nearest('layer2',$currentfeature,limit:=-1), \n                                attribute( @element, 'id2' ) != \"id1\" )[0], 'id2' ))))\n                    )\n

Altra espressione pi\u00f9 performante su grandi dataset (>=QGIS 3.22.1)

make_line (\n    eval( 'overlay_nearest( \n        \\'layer2\\', \n        $geometry, \n        filter:=id2<>'||\"id1\"||')')[0],\n    $geometry\n)\n

idea presa da qui:

","tags":["prossimit\u00e0","condizioni","array","overlay","linee"]},{"location":"esempi/geometria_vicina_filtro_condizionato/#prova-tu","title":"prova tu","text":"

Funzioni e variabili utilizzate:

","tags":["prossimit\u00e0","condizioni","array","overlay","linee"]},{"location":"esempi/gpkg_blob_immagini/","title":"Gpkg blob immagini","text":"

IN LAVORAZIONE

","tags":["immagini","blob","geopackage"]},{"location":"esempi/gpkg_blob_immagini/#come-memorizzare-e-riutilizzare-immagini-memorizzate-in-un-geopackage","title":"Come memorizzare e riutilizzare immagini memorizzate in un GeoPackage","text":"

Per memorizzare immagini all'interno di un GeoPackage e in particolare in un layer vettoriale, per esempio un layer puntuale, possiamo utilizzare un campo di tipo BLOB. Successivamente, per visualizzarle possiamo utilizzando le espressioni di QGIS, in particolare la funzione to_base64.

Immaginiamo di avere realizzato un rilievo della pubblica illuminazione, ogni punto del layer vettoriale rappresenta un palo della luce; assieme ad altri dati memorizzo anche la foto all'interno del geopackage, in un campo definito BLOB:

'base64:' || to_base64(\"campoBLOB\")\n

La stringa 'base64:' iniziale \u00e8 necessaria per indicare che ci\u00f2 che segue \u00e8 una stringa base64 che codifica un'immagine, come 'http:' o 'https:' per indicare che si tratta di un URL.

Funzioni e variabili utilizzate:

","tags":["immagini","blob","geopackage"]},{"location":"esempi/hub_lines/","title":"Unisci con linee Hub lines","text":"

Come creare hub lines usando il calcolatore di campi di QGIS

#QGISUserConf2019 A Coru\u00f1a

Tabella di partenza: A Coru\u00f1a da usare come hub

City Nation Latitude Longitude Carballo Spain 43.2128129 -8.6915927 Barcelona Spain 41.3850639 2.1734035 Krasnodar Russia 45.0392674 38.9872209 Luserna San Giovanni Italy 44.8170347 7.2445882 Cascais Portugal 38.6967571 -9.4207438 A Coru\u00f1a Spain 43.3623436 -8.4115401 Gij\u00f3n Spain 43.5322015 -5.6611195 A Coru\u00f1a Spain 43.3623436 -8.4115401 Gr\u00fct (Gossau ZH) Swizerland 47.31 8.78436 Berlin Germany 52.5200066 13.404954 A Coru\u00f1a Spain 43.3623436 -8.4115401 Valencia Spain 39.4699075 -0.3762881 Madrid Spain 40.4167754 -3.7037902 Oviedo Spain 43.3619145 -5.8493887

Creare un campo WKT testuale di 50 caratteri e popolare il campo con la seguente espressione:

'LINESTRING (-8.4115401 43.3623436 ,' ||  \"Longitude\"  || ' ' ||  \"Latitude\"  || ')'\n

otterremo la tabella:

successivamente importata in QGIS come testo delimitato e geometria di tipo WKT

","tags":["linee","hub-line","wkt"]},{"location":"esempi/hub_lines/#prova-tu","title":"Prova tu","text":"

dati

Funzioni e variabili utilizzate:

","tags":["linee","hub-line","wkt"]},{"location":"esempi/lavorare_con_le_ore/","title":"Lavorare con il formato ora","text":"

Supponiamo di avere un file CSV con questi dati, che dovrebbero rappresentare un oraio, ma non sono correttamente definiti come formato Ora; come convertirlo correttamente?

time 0d 00:45:38 0d 00:05:00 0d 00:09:59 0d 00:14:58 0d 00:19:57 0d 00:24:56

Il problema \u00e8 legato alla presenza di 0d, sotto due possibili modi per trasformarlo correttamente in Ora:

in questo esempio tolgo i primi tre caratteri, ovvero 0d:

to_time(regexp_replace(\"time\",'^...',''),'HH:mm:ss','en') \u2192 <ora: 00:05:00>\n

in questo secondo esempio, nascondo la prima parte della stringa con \\'0d\\', cove lo \\ ha la funzione di escape del '

to_time(\"time\",'\\'0d\\' HH:mm:ss','en') \u2192 <ora: 00:05:00>\n

Funzioni utilizzate:

","tags":["data","ora","regex"]},{"location":"esempi/layer_vicino/","title":"Layer pi\u00f9 vicino","text":"

Dati enne layer vettoriali (es:punto, linea e poligono) e un vettore punto di confronto. Come stabilire a quale layer \u00e8 pi\u00f9 vicino un punto tracciato a caso?

Espressione usata nel generatore di geometria del layer punti di confronto:

shortest_line(\noverlay_nearest(layer:=\nwith_variable('in_layer',array('punti','line','poligono'), -- three layers\nwith_variable('in_dist',\n        array_foreach(@in_layer,distance(overlay_nearest(@element,$geometry)[0], $geometry)),\narray_get(@in_layer, array_find(@in_dist, array_min(@in_dist)))))\n,expression:= $geometry )[0],\n$geometry)\n

link: https://gist.github.com/pigreco/f1705597c3515c21d81c64df1b46db09#gistcomment-3673986

Funzioni e variabili utilizzate:

","tags":["prossimit\u00e0","linee","array","overlay","shortest-line"]},{"location":"esempi/linea_min_distanza/","title":"Tracciare segmento di minima distanza usando il generatore di geometria","text":"

Dati due layer puntuali (ma potrebbero essere di qualsiasi tipologia), tracciare il segmento di minima distanza tra gli oggetti dei due layer usando il generatore di geometrie

  1. Carico due layer puntuali: puntiA e puntiB
  2. Tematizzo il layer puntiA usando il generatore di geometrie

-- crea un segmento di minima distanza tra il layer puntiA e puntiB\n\nshortest_line($geometry, -- geometria puntoA\n aggregate( \n    layer:='puntiB',\n    aggregate:= 'collect', -- crea multiPoint\n    expression:=$geometry) -- geometria puntoB\n )\n
3. carico poligonoC e lineaD, altri due layer 4. utilizzo stessa espresione di sopra, cambio solamente il nome del layer (poligonoC o lineaD al posto di puntiB)

ecco il risultato:

poi, con un po' di magia \u00e8 possibile aggiungere l'etichetta con il valore della lunghezza (ma questa \u00e8 altra storia!!!)

","tags":["prossimit\u00e0","linee","aggregare","shortest-line"]},{"location":"esempi/linea_min_distanza/#prova-tu","title":"Prova tu","text":"

Geopackage \u00e8 qui NB: occorre >= QGIS 3.8, nel gpkg trovare anche il progetto QGIS!!!

Funzioni e variabili utilizzate:

","tags":["prossimit\u00e0","linee","aggregare","shortest-line"]},{"location":"esempi/linea_min_distanza2/","title":"Calcolo distanza minima tra due vettori","text":"

Dati due layer (es_uno puntuale e l'altro lineare), calcolare la lunghezza del segmento di minima distanza tra gli elementi dei due layer usando il calcolatore di campi:

Carico i due layer: alberi e fiumi

Traccio la linea di minima distanza solo per visualizzarla a schermo tramite il generatore di geometrie, usando l'espressione:

shortest_line(\n    $geometry,\n    overlay_nearest( \n    layer:='fiumi',\n    expression:=$geometry)[0]\n         )\n

per calcolare la lunghezza e aggiungerla come campo nella tabella attributi del layer alberi:

  1. aprire tabella attributi;
  2. aprire field calc;
  3. aggiungere un nuovo campo numerico;
  4. popolarlo con l'espressione:
length(\nshortest_line(\n    $geometry,\n    overlay_nearest( \n    layer:='fiumi',\n    expression:=$geometry)[0]\n         )\n       )\n

Osservazione: la funzione overlay_nearest \u00e8 presente in QGIS a partire dalla 3.16 Hannover

Funzioni e variabili utilizzate:

","tags":["prossimit\u00e0","linee","overlay","shortest-line"]},{"location":"esempi/lista_esempi/","title":"Lista esempi","text":"

Abstract

Questa sezione raccoglie degli esempi pratici e svolti step by step, con molti screenshot per rendere facile la comprensione di alcune funzioni di base come Area, lunghezza, Buffer ecc... | La sezione \u00e8 in continua evoluzione e sono benvenuti contributi esterni

Attualmente ci sono 80 esempi svolti! (in evoluzione)

... e 50 esempi da svolgere: mettiti alla prova

"},{"location":"esempi/lista_esempi/#elenco-esempi","title":"Elenco esempi","text":"

(Livello di difficolt\u00e0: 1 -> Facile -- 5 -> Difficile)

nro Esempio Descrizione Autore Livello funzioni utilizzate 1 aggiungi campo aggiungere colonna area per calcolo superficie Salvatore Fiandaca 2 $area 2 campi coordinate aggiungere colonne coordinate x e y Salvatore Fiandaca 2 $x, $y 3 campo virtuale aggiungere campo virtuale Salvatore Fiandaca 2 $length 4 campo quota z aggingere colonna quota con valori z Salvatore Fiandaca 2 z, start_point, $geometry 5 etichettare etichettare usando il campo geometry Salvatore Fiandaca 2 to_int, format_number, $x, $y, z, m, $length, start_point, $geometry 6 aggiornare geometria aggiornare il campo geometry Salvatore Fiandaca 2 simplify, $geometry 7 conversione etichettare punti da sessadecimali a sessagesimali Salvatore Fiandaca 2 floor, format_number, to_real, $x, $y 8 tematizzare Tematizzare utilizzando la sovrascrittura definita dai dati Salvatore Fiandaca 2 CASE, length 9 legenda Legenda con testo lungo, inserimento carattere speciale Salvatore Fiandaca 2 CASE, regexp_replace 10 selezione Seleziona usando le funzioni di aggregazione Salvatore Fiandaca 2 $area, minimum, = 11 core area Calcola la core area di un poligono Ludovico Frate 2 area, buffer 12 sposta etichette Sposta etichetta e genera segmento Salvatore Fiandaca 3 x, y, $geometry 13 conteggio valori Conteggio valori in un campo Salvatore Fiandaca 2 count 14 centroidi linee curve Centroide lungo le linee curve Salvatore Fiandaca 2 $geometry, $length, line_interpolate_point, geom_to_wkt 15 conta i punti nel poligono Conta i punti nel poligono Salvatore Fiandaca 2 aggregate 16 somma lunghezze nel poligono Somma le lunghezze delle linee dentro il poligono Salvatore Fiandaca 2 parent, aggregate, length, geometry, intersection, intersects, transform, $geometry 17 conta punti nel poligono per categorie Contare i punti nel poligono per categorie Martina Savarese 2 parent, aggregate, AND, geometry 18 nascondi etichette Nasconde etichette non desiderate Salvatore Fiandaca 2 parent, not, aggregate, intersects, point_on_surface, $geometry 19 calcolo area poligoni nel reticolo Calcolare l\u2019area delle porzioni di poligoni che ricadono dentro ad una cella di un reticolo Salvatore Fiandaca 2 parent, aggregate, geometry, intersection, intersects, $geometry 20 spatial join Trasferire un attributo usando le relazioni spaziali Salvatore Fiandaca 2 parent, aggregate, geometry, to_string, intersects, $geometry 21 unica label Unica label per pi\u00f9 poligoni Salvatore Fiandaca 2 x, y, make_point, centroid, collect, $geometry 22 elenco comuni Come ottenere l'elenco dei Comuni attraversati da un fiume Salvatore Fiandaca 2 aggregate, crosses, $geometry, geometry, parent 23 rotazione pattern lineare Come ruotare un pattern lineare in funzione della feature Salvatore Fiandaca 2 angle_at_vertex, shortest_line, centroid, oriented_bbox, boundary, $geometry 24 numerazione poligoni in base a relazione spaziale Numerazione poligoni in base a relazioni spaziali Salvatore Fiandaca 3 @element, array_agg, array_sort, string_to_array, array_get, array_find, array_reverse, $area, count, array_foreach, upper, to_int, $geometry 25 assegnare categoria prevalente Assegnare categoria prevalente Salvatore Fiandaca 2 array_majority, string_to_array, aggregate, intersects, $geometry, geometry, parent 26 creare Hub lines Creare Hub lines Salvatore Fiandaca 2 doppio pipe 27 aggrega con SR differenti Aggrega con SR differenti Salvatore Fiandaca 3 aggregate, count, intersects, transform, $geometry, geometry, parent 28 distanze progressive chilometriche Formatta le distanze progressive chilometriche tipo Autostrade Salvatore Fiandaca 2 CASE 29 aggregare elementi adiacenti Aggrega elementi adiacenti Salvatore Fiandaca 3 aggregate, count, to_string, touches, $geometry, geometry, parent 30 linea minima distanza tra due punti Traccia una linea di minima distanza usando il generatore di geometrie Salvatore Fiandaca 2 aggregate, shortest_line, $geometry 31 creare campo somma cumulativa Espressione per popolare campo con somma cumulativa Salvatore Fiandaca 2 if, $id,array_agg, eval, replace, array_to_string, array_slice, array_sum 32 aggiungere punto a linea Aggiunge un nodo di disegno ad una linea Salvatore Fiandaca 2 make_line, start_point, $geometry, end_point, geometry, get_feature_by_id 33 drilldown form multiple Creare Form con filtro dinamico drillDown (cascade) Salvatore Fiandaca 3 aggregate, eval, array 34 selezionare primi n valori Come selezionare i primi n poligoni pi\u00f9 grandi Salvatore Fiandaca 2 doppio-pipe, uguale, array_contains, array_slice, array_sort, array_agg, $area, $geometry 35 generalizzare isoipse Generalizzare le linee di contorno Valerio Pinna 3 CASE, $length, simplify, smooth, $geometry 36 campo coord in lat lon Generare due campi lon lat a partire da un unico campo Salvatore Fiandaca 2 regexp_match 37 calcolo incrementi giornalieri Calcola gli incrementi giornalieri di un attributo Salvatore Fiandaca 4 with_variable, if, array_find, array_agg 38 tracciare un grafico Come tracciare un grafico per ogni feature usando il generatore di geometrie Salvatore Fiandaca 4 with_variable, relation_aggregate, array_to_string, array_get, array_foreach, generate_series, translate, make_line, make_point, centroid, end_point, round, $geometry 39 elenco ordinato di Comuni Come ottenere l'elenco ordinato dei Comuni attraversati da un itinerario Salvatore Fiandaca 3 with_variable, array_find, array_filter, array_agg, line_locate_point, line_interpolate_point, intersection, length, $geometry 40 etichettare con chiave-valore Etichettare facendo vedere sia il nome del campo che il corrispondente valore Salvatore Fiandaca 2 replace, map_to_hstore, attributes 41 etichettare itinerario con elenco ordinato Comuni Etichettare itinerario con elenco ordinato di Comuni attraversti Valerio Pinna 4 parent, aggregate, array_to_string, array_get, array_foreach, generate_series, num_geometries, collect_geometries, intersection, start_point, concat, $geometry 42 etichette formattate diversi stili Etichette formattate con diversi stili Valerio Pinna 2 with_variable, array, string_to_array, replace 43 selezionare vertici duplicati Selezionare vertici duplicati Salvatore Fiandaca 3 if, $id, get_feature_by_id, array_agg, array_sort, string_to_array, array_last, array_find, array_reverse, geom_to_wkt, count, array_length, $geometry 44 conteggio caratteri diversi Conta i caratteri diversi in un testo Salvatore Fiandaca 2 array_length, array_distinct, string_to_array, substr, regexp_replace 45 distanza minima tra due vettori Lunghezza della linea di minima distanza tra due vettori Salvatore Fiandaca 2 aggregate,shortest_line, overlay_nearest, $geometry 46 lunghezze segmenti di un poligono Lunghezze dei segmenti di un poligono Salvatore Fiandaca 3 segments_to_lines, num_geometries, length, round, geometry_n, segments_to_lines, array_to_string, generate_series, array_foreach, $geometry 47 fill-down con QGIS riempire le celle sottostanti con il primo valore non nullo Salvatore Fiandaca 3 @layer, if, attribute, $id, get_feature_by_id 48 finestra temporale Fissata una data, calcolare la somma di un attributo relativo ai 6 giorni precedenti Salvatore Fiandaca 4 with_variable, array_find, array_filter, array_agg, array_length, array_sum, array_slice 49 rotazione simbolo parallelo ad una linea Lunghezze dei segmenti di un poligono Salvatore Fiandaca 3 with_variable, overlay_nearest, line_interpolate_angle, closest_point, $geometry 50 livello acqua Effetto riempimento recipiente d'acqua Salvatore Fiandaca 4 difference, make_rectangle_3points, point_n, bounds, make_point, x, y, bounds_height, intersection, area, second, now, area, format_number, $geometry 51 layer vicino Come determinare il layer pi\u00f9 vicino ad un altro Salvatore Fiandaca 4 with_variable, array_get, array_foreach, array_find, array_min, overlay_nearest, distance, array, shortest_line, $geometry 52 eliminare testo tra parentesi Eliminare il testo tra parentesi tonde Salvatore Fiandaca 3 regexp_replace 53 segmento minimo facciata-strada Determinare il segmento minimo tra centroide facciata edifici e strada pi\u00f9 vicina Salvatore Fiandaca 4 with_variable, generate_series, array_foreach, array_find, num_geometries, collect_geometries, geometry_n, segments_to_lines, overlay_nearest, distance, centroid, shortest_line, $geometry 54 selezionare punti pi\u00f9 vicini Selezionare 'n' punti pi\u00f9 vicini a partire da un punto selezionato Salvatore Fiandaca 4 with_variable, array_find, array_agg, array_foreach, aggregate, geom_to_wkt, make_circle, distance, overlay_nearest, intersects, is_selected, $geometry 55 Nome del campo con massimo valore Determina il nome del campo che contiene il valore massimo su un record Salvatore Fiandaca 4 with_variable, hstore_to_map, array_max, array_find, attributes, map_delete, map_avals, map_akeys 56 Ricerca caratteri speciali Ricerca e selezione di record con campi che contengono caratteri speciali Salvatore Fiandaca 3 regexp_substr, <> 57 confrontare campi tabella Ricercare valori uguali in due campi diversi Salvatore Fiandaca 3 array_to_string, array_majority, array_cat, string_to_array 58 estrarre campo da un hstore Aggiungere un campo a partire da un altro campo in formato hstore (tipico di OSM) Salvatore Fiandaca 3 hstore_to_map, map_get, to_int 59 geometrie vicine ma con condizione tracciare un segmento tra punti vicini che soddisfano la condizione id1 <> id2 Salvatore Fiandaca 4 overlay_nearest, array_filter, attribute, make_line, collect_geometries, $geometry, geometry 60 atlante con righe tabella in verticale riga tabella attributi in verticale nel layout di stampa di un atlante Salvatore Fiandaca 3 replace, map_to_hstore, attributes 61 decimali coordinate come apici decimali coordinate messe come apici Salvatore Fiandaca 3 with_variable, regexp_replace, left, array, $x, $y, replace 62 media e stdev tra campi calcola la media e la deviazione standard campionaria lungo lo stesso record Salvatore Fiandaca 3 with_variable, array_foreach, array_mean, attributes, map_delete, map_avals, map_akeys 63 classificazione specie classificare delle specie, fare delle somme in funzione delle specie Salvatore Fiandaca 3 array_sum, array_foreach, get_feature, attribute, map_get, map, string_to_array, to_real 64 prelevare attributi da layer pi\u00f9 vicini Prelevare attributi da diversi layer con criterio di vicinanza Salvatore Fiandaca 4 with_variable, array_get, array_foreach, array_find, array_min, overlay_nearest, distance, array, shortest_line, $geometry, start_point, end_point 65 aggrega valori di una tabella Aggregare i valori di una tabella e creare un nuovo layer Salvatore Fiandaca 3 array_agg, array_to_string 66 etichettare usando gli apici Etichettare usando gli apici, km\u00b2 o m\u00b3 Salvatore Fiandaca 1 char 67 ID univoco per gruppi consecutivi ID univoco per gruppi consecutivi Salvatore Fiandaca 4 with_variable, array_find, array_distinct, array_agg, aggregate 68 eliminare righe duplicate con condizione Eliminare righe duplicate con condizioni su pi\u00f9 attributi Salvatore Fiandaca 3 minimum, array_agg, array_find, with_variable 69 selezione ultimo record per data Selezionare l'ultimo record usando un campo in formato data Salvatore Fiandaca 3 maximun, array_agg, array_max 70 trova valore Trova valore in tutta la tabella attributi Salvatore Fiandaca 3 array_find, map_avals, attributes 71 Array Natural sorting Ordinare numericamente una lista alfanumerica Salvatore Fiandaca 4 with_variable, array_sort, array_foreach, array_to_string, string_to_array, generate_series,regexp_substr, regexp_replace, lpad 72 Conta punti nel poligono e per data Conta punti nel poligono e per data Salvatore Fiandaca 4 parent, with_variable, aggregate, array_to_string, array_count, array_foreach, array_distinct, $geometry, intersects 73 Lavorare con le ore Convertire nel corretto formato Ora Salvatore Fiandaca 2 to_time regexp_replace 74 Spostare i punti dentro i poligoni in base agli attributi Spostare i punti dentro i poligoni in base agli attributi Salvatore Fiandaca 4 with_variable, get_feature,closest_point, bounds_height, centroid, attribute, $currentfeature 75 Seleziona primo record per ogni duplicato Seleziona primo record per ogni duplicato Salvatore Fiandaca 3 @with_variable, array_agg, if, count 76 Cronometro Creare un cronometro nella Map Canvas Salvatore Fiandaca 3 with_variable, age, now(), make_datetime, lpad, floor, to_int, minute, hour 77 Selezionare record orfani in una relazione padre-figlio Selezionare record orfani in una relazione padre-figlio Salvatore Fiandaca 3 @parent, NOT, aggregate, count 78 Tema con unico contorno per poligoni adiacenti Crea unico contorno per poligoni adiancenti Salvatore Fiandaca 3 collect, buffer, difference, $geometry, intersection 79 Prende attributo da un layer sovrapposto Come prendere attributi da layer sovrapposti Salvatore Fiandaca 3 array_to_string, overlay_intersects 80 seleziona poligoni con max area sovrapposta Come prendere attributi da layer sovrapposti Salvatore Fiandaca 3 maximum, intersection, area, overlay_intersects, $geometry 81 tracciare punti a distanza prefissata lungo una linea Come tracciare puntia distanza prefissata lungo una linea Salvatore Fiandaca 3 overlay_nearest, collect_geometries, line_interpolate_point, \\$geometry, array_foreach, array 82 estrarre numeri inizialia Come estrarre i numeri iniziali di un testo Salvatore Fiandaca 3 regexp_replace, array_foreach, string_to_array 83 spatial join condizionato Spatial join con condizione: nome citt\u00e0 con popolazione maggiore Salvatore Fiandaca 4 @parent, with_variable, aggregate, geometry, to_string, intersects, $geometry, overlay_contains, map, map_akeys 84 spatial join condizionato Spatial join con condizione: con tre layer Salvatore Fiandaca 4 @parent, with_variable, aggregate, geometry, to_string, intersects, $geometry, overlay_contains, map, map_akeys"},{"location":"esempi/lista_esempi/#tags","title":"Tags","text":"

Elenco tag per la ricerca

"},{"location":"esempi/lista_esempi/#partecipa","title":"Partecipa","text":"

Se hai un esempio svolto e vuoi condividerlo puoi farlo, vedi sezione Lavora con Noi:

per maggiori info scrivi all'autore

"},{"location":"esempi/lista_esempi/#licenza","title":"Licenza","text":"

In questa sezione Esempi svolti e tutti gli esercizi svolti, la licenza \u00e8 CC-BY-NC-SA 4.0

"},{"location":"esempi/livello_acqua/","title":"Effetto riempimento recipiente d'acqua","text":"

In questo breve tutorial vedremo come realizzare una tematizzazione, tramite espressioni geometriche, che simuli il riempimento di un recipente di acqua, e lo applicheremo ai nostri poligoni.

espressione utilizzata nel generatore di geometrie:

difference(\n$geometry,\n-- bounding Box\nmake_rectangle_3points(\npoint_n(bounds($geometry),4),\npoint_n(bounds($geometry),3),\n-- punto altezza rettangolo\n make_point(x(point_n(bounds($geometry),1)),\n           (y(point_n(bounds($geometry),1)))\n        + bounds_height($geometry)*(second(now()))/60),1))\n

espressione utilizzate per le etichette:

format_number((\n-- area intersezione\narea(intersection(\n$geometry,\n-- bounding Box\nmake_rectangle_3points(\npoint_n(bounds($geometry),2),\npoint_n(bounds($geometry),1),\n-- punto altezza rettangolo\n make_point(x(point_n(bounds($geometry),1)),\n           (y(point_n(bounds($geometry),1)))\n     + bounds_height($geometry)*(second(now()))/60),1)))\n-- area feature corrente\n     /area($geometry))*100,1)||' %'\n

NB: per ottenere l'effetto dinamico occorre attivare, da propriet\u00e0 layer | Visualizzazione, Aggiorna layer a intervalli.

qui video demo:

https://youtu.be/uUEGSdWraPY

Funzioni e variabili utilizzate:

","tags":["vestizione","x","y","punti","area"]},{"location":"esempi/lunghezze_segmenti_poligono/","title":"Lunghezze dei lati di un poligono","text":"

Dato un layer poligonale, come ottenere una lista di valori delle lunghezze dei lati del poligono.

Creare un campo testuale (nello screenshot \u00e8 test) sufficientemente lungo e popolarlo con la seguente espressione:

Espressione:

array_to_string(\n        array_foreach(\n            array_foreach(\n                generate_series(1, num_geometries( segments_to_lines($geometry))),\n                geometry_n(segments_to_lines($geometry),@element)), \n                    round(length(@element),2))\n                ) \n

Nel linguaggio umano significa: crea, per ogni poligono, un array e popolalo con la geometria dei singoli lati del poligono, infine calcola la loro lunghezza e mettili in una lista.

Osservazioni:

  1. l'espressione \u00e8 generica, si puo' usare con qualsiasi poligono;
  2. per poligoni con molti lati, i calcoli richiesti sono lunghi.

Geometrie:

Generare, per ogni poligono, un array con le geometrie dei lati del poligono:

array_foreach(\n    generate_series(1, num_geometries( segments_to_lines($geometry))),\n                geometry_n(segments_to_lines($geometry),@element)\n            )\n

questa espressione ci permette di fare una serie di interrogazioni come:

  1. qual \u00e8 il lato pi\u00f9 lungo e quanto vale la lunghezza;
  2. applicare tutte le funzioni geometriche relative alla geometria del lato, esempio:
  3. azimuth di un lato;
  4. centroide di un lato;
  5. coordinate di un vertice del lato n;
  6. ecc...

Il tema (la quotatura) \u00e8 scaricabile da qui: https://plugins.qgis.org/styles/5/

Funzioni e variabili utilizzate:

","tags":["linee","array"]},{"location":"esempi/maxValoreCampoNome/","title":"Nome del campo con massimo valore","text":"

Le funzioni di aggregazione di QGIS agiscono su un campo, ma se volessimo determinare il nome del campo che contenesse il valore massimo per ogni record, come faremmo?

La funzione che permette di creare una mappa per ogni record \u00e8 attributes() e tramite questa risolveremo il seguente problema.

Abbiamo uno shapefile dei comuni siciliani e la tabella degli attributi presenta, per ogni anno (dal 2012 al 2020), il valore della popolazione residente, sotto la tabella:

determinare, per ogni comune, quale \u00e8 l'anno (quindi, il nome del campo) in cui la popolazione \u00e8 massima e scriverlo in un campo nuovo (annoMax).

La tabella attributi ha 11 campi, ma la ricerca della popolazione massima va fatta solo negli ultimi 9 campi.

Nel caso non dovessimo evitare alcuni campi, l'espressione da utilizzare \u00e8:

with_variable ('sel',\n        map_avals (attributes ()),\n        map_akeys (attributes ())[array_find (@sel, array_max (@sel))]\n              )\n

ma nell'esempio occorre evitare la ricerca del massimo nei campi PRO_COM e COMUNE, occorre, quindi, utilizzare la seguente espressione:\u00f9

with_variable('deleteField',\n        map_delete(map_delete(\n        attributes(),'PRO_COM'),'COMUNE'),\nwith_variable('sel',\n        map_avals( @deleteField),\n        map_akeys( @deleteField)[array_find(@sel,array_max(@sel))])\n             )\n

oppure questa:

with_variable ('sel',\n        array_filter(\n                map_avals (attributes ()), @element not in (\"PRO_COM\",\"COMUNE\")),\n                map_akeys (attributes ())[array_find (@sel, array_max (@sel))])\n

Se volessimo aggiungere anche il campo con il valore massimo, basterebbe creare una mappa con chiave il campo (che contiene il valore massimo) e come valore, il valore massimo; per far questa mappa occorre utilizzare la seguente espressione:

hstore_to_map(\nwith_variable('deleteField',\n        map_delete(map_delete(\n        attributes(),'PRO_COM'),'COMUNE'),\nwith_variable('sel',\n        map_avals( @deleteField),\n        map_akeys( @deleteField)[array_find(@sel,array_max(@sel))]\n        ||'=>'|| map_get(@deleteField,\n        map_akeys( @deleteField)[array_find(@sel,array_max(@sel))])\n             ))\n             )\n

dalla mappa posso estrarre la chiave e il valore in due campi diversi:

estraggo dalla mappa la chiave:

map_akeys( -- estraggo la chiave, ovvero anno\nhstore_to_map(\nwith_variable('deleteField',\n        map_delete(map_delete(map_delete(\n        attributes(),'PRO_COM'),'COMUNE'),'max_valore'),\nwith_variable('sel',\n        map_avals( @deleteField),\n        map_akeys( @deleteField)[array_find(@sel,array_max(@sel))]\n        ||'=>'|| map_get(@deleteField,\n        map_akeys( @deleteField)[array_find(@sel,array_max(@sel))])\n             ))\n             )\n        )[0]\n

estraggo dalla mappa il valore:

map_avals( -- estraggo il valore\nhstore_to_map(\nwith_variable('deleteField',\n        map_delete(map_delete(map_delete(\n        attributes(),'PRO_COM'),'COMUNE'),'maxCampo2'),\nwith_variable('sel',\n        map_avals( @deleteField),\n        map_akeys( @deleteField)[array_find(@sel,array_max(@sel))]\n        ||'=>'|| map_get(@deleteField,\n        map_akeys( @deleteField)[array_find(@sel,array_max(@sel))])\n             ))\n             )\n        )[0]\n

Idea presa da qui: link: https://gis.stackexchange.com/questions/411369/returning-column-name-of-the-max-value

","tags":["campi","attributi","chiave-valore","array"]},{"location":"esempi/maxValoreCampoNome/#provaci-tu-qui-il-geopackage","title":"provaci tu, qui il geopackage","text":"

scarica

","tags":["campi","attributi","chiave-valore","array"]},{"location":"esempi/maxValoreCampoNome/#funzione-custom","title":"funzione Custom","text":"

La funzione personalizzata scritta in Python fa la stessa cosa:

MinMaxValueFieldName

Funzioni e variabili utilizzate:

","tags":["campi","attributi","chiave-valore","array"]},{"location":"esempi/media_stdev_tra_campi/","title":"Media e deviazione standard tra campi","text":"

Le funzioni di aggregazione di QGIS agiscono su un campo, ma se volessimo determinare la media e la stdev dei valori di ogni record, come faremmo?

La funzione che permette di creare una mappa per ogni record \u00e8 attributes() e tramite questa risolveremo il problema.

Abbiamo uno shapefile dei comuni siciliani e la tabella degli attributi presenta, per ogni anno (dal 2012 al 2020), il valore della popolazione residente, sotto la tabella:

determinare, per ogni comune, la media e la stdev (deviazione standard campionaria)

La tabella attributi ha 11 campi, ma i valori della popolazione \u00e8 negli ultimi 9 campi.

Nell'esempio occorre evitare i campi \"fid\", PRO_COM e COMUNE, occorre, quindi, utilizzare la seguente espressione:

with_variable('deleteField',\n        map_delete(map_delete(map_delete(\n        attributes(),'PRO_COM'),'COMUNE'),'fid'),\n-- media\narray_mean(map_avals((@deleteField))\n))\n

with_variable('deleteField',\n        map_delete(map_delete(map_delete(map_delete(\n        attributes(),'PRO_COM'),'COMUNE'),'fid'),'media'),\n-- stdev campionaria\nwith_variable('riga',map_avals(@deleteField),\n        sqrt(\n                array_sum(\n                        array_foreach(\n                                @riga,\n                                (@element-array_mean(@riga))^2))\n                                /\n                                (array_length(@riga)-1))\n                )\n)\n

","tags":["campi","attributi","chiave-valore","array"]},{"location":"esempi/media_stdev_tra_campi/#provaci-tu-qui-il-geopackage","title":"provaci tu, qui il geopackage","text":"

scarica

Funzioni e variabili utilizzate:

","tags":["campi","attributi","chiave-valore","array"]},{"location":"esempi/nascondi_etichette/","title":"Nascondi etichette","text":"

Appena attiviamo le etichette queste sono sempre al top e sempre visibili, vediamo in questo esempio come nascondere alcune etichette utilizzando le opzioni di visualizzazione delle etichette e le funzioni di aggregazione.

Carico due layer poligonali: circoscrizioni e quartieri di Palermo

Etichetto il layer quartieri:

Le etichette sono visibili e in certi casi sono anche fastidiose;

applico un filtro al layer circoscrizioni, in modo tale da visualizzare solo alcune circoscrizioni:

\"CIR_ID\" > 5

risultato:

Ora nascender\u00f2 le etichette, del layer quartieri, che sono sotto le circorscrizioni:

espressione usata:

not aggregate('circoscrizioni', 'count', 'PK_UID', intersects ($geometry,  point_on_surface( geometry(@parent))))\n

il geopackage \u00e8 scaricabile qui

Funzioni e variabili utilizzate:

","tags":["etichette","attributi","aggregare"]},{"location":"esempi/numerazione_poligoni_rel_spaziale/","title":"Numerazione dei poligoni in base alla relazione spaziale","text":"

Etichettare le regioni italiane ISTAT in funzione della superficie, per esempio: la regione pi\u00f9 estesa deve avere come etichetta 1 e poi via via aumentare al decrescere dell' area.

espressione da usare:

array_find(\n    array_reverse( \n        array_sort(array_agg($Area))\n                 ), $Area)+1\n

L'espressione significa:

Crea un array (un vettore) e mettici dentro tutti i valori delle aree delle regioni, ordinali in senso crescente (dal pi\u00f9 piccolo al pi\u00f9 grande) e poi fai l'inverso, cio\u00e8, ordinali dal pi\u00f9 grande al pi\u00f9 piccolo; infine assegna l'indice della posizione del valore dell'area.

PS: +1 serve solo a far iniziare il conteggio da 1 in quanto gli array iniziano da zero.

Altro esempio:

Etichettare in funzione della longitudine, cio\u00e8 mettere la label 1 nella regione pi\u00f9 a Ovest e cosi via per le altre:

espressione da usare:

array_find(\n        array_sort(array_agg(x_min( $geometry)))\n                 ,x_min( $geometry))+1\n

Altro esempio:

Etichettare, per ogni regione, le province in ordine alfabetico:

espressione da usare:

\"sigla\"  || '-' || \n(array_find(\n        array_sort(\n            array_agg(expression:=\"sigla\" , group_by:=\"cod_reg\" )), \"sigla\" )+1)\n

Altro esempio:

Creata una griglia regolare formata da circa 4000 poligoni. Nominare tutti i poligoni partendo da destra verso sinistra e dall'alto verso il basso con lettere e numeri in sequenza. Quindi la prima maglia della griglia sar\u00e0 A1, A2, A3 ecc, la seconda B1 B2 B3 e cos\u00ec via.

espressione da usare:

array_get(\n    with_variable( 'cucu',\n        string_to_array('a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z'),\n            array_cat(\n                array_foreach( @cucu ,upper(@element)), -- alfabeto a,b,c...\n                array_foreach( @cucu ,upper(@element || @element)))), -- alfabeto raddoppiato aa,bb,cc...\n    to_int((array_find(\n        array_reverse(\n            array_sort(\n                array_agg(\n                    y_min($geometry)))),\n                    y_min($geometry)))/\n                    count( expression:=y_min($geometry),group_by:=y_min($geometry))))\n||\n-- aggiunge il numero finale AA1, ZZ10\n(to_int((array_find(\n    array_reverse(\n        array_sort(\n        array_agg(\n            x_min($geometry)))),\n            x_min($geometry)))/\n    count( expression:=y_min($geometry),group_by:=x_min($geometry)))+1 )\n
PS. L'espressione di sopra copre solo i casi a,b,c,....aa,bb,cc... per aggiungere anche aaa,bbb,ccc.... occorre aggiungere la stringa:

array_foreach( @cucu ,upper(@element || @element|| @element))

ovvero tre volte la variabile @element.

","tags":["relazioni","poligoni","area","array","spatial-join"]},{"location":"esempi/numerazione_poligoni_rel_spaziale/#prova-tu","title":"Prova tu","text":"","tags":["relazioni","poligoni","area","array","spatial-join"]},{"location":"esempi/numerazione_poligoni_rel_spaziale/#geopackage","title":"Geopackage","text":"

Funzioni e variabili utilizzate:

","tags":["relazioni","poligoni","area","array","spatial-join"]},{"location":"esempi/prendi_attributo_da_elemento_sovrapposto/","title":"Prendere un attributo da un altro layer sovrapposto","text":"

Supponiamo di avere un layer di punti e che alcuni di essi sono sovrapposti ad un altro layer poligonale: come prendere un attributo del layer poligonale e aggiungerlo nel layer di punti.

overlay_intersects('nomeLayerPoligonale',\"nomeAttributoLayer Poligonale\")[0]\n

NB: le funzioni overlay_* restituiscono quasi sempre un array, quindi, per prendere il primo valore occorre usare la notazione Python [0]

nel caso ci fossere pi\u00f9 punti che si intersecassero coi poligoni, utilizzare questa espressione:

array_to_string(\n    overlay_intersects('nomeLayerPoligonale',\"nomeAttributoLayer Poligonale\")\n                )\n

che aggiunger\u00e0 la lista dei punti sovrapposti.

OSSERVAZIONE: il ragionamento espresso sopra \u00e8 valido per tutte le funzioni overlay_*, dove * \u00e8 un predicato geometrico (contains, crosses, disjoint, equals, intersects, nearest, touches e within); quindi se volessimo prendere un attributo da punti pi\u00f9 vicini, basterebbe utilizzare le stesse espressioni di sopra, ma utilizzando l'espressione overlay_nearest.

Esempio aggiunto per gentile richiesta di Giulio Fattori (grazie)

","tags":["prossimit\u00e0","sovrapposizione","poligoni","array","overlay"]},{"location":"esempi/prendi_attributo_da_elemento_sovrapposto/#dati-e-progetto","title":"dati e progetto","text":"

scarica Geopackage

Funzioni e variabili utilizzate:

","tags":["prossimit\u00e0","sovrapposizione","poligoni","array","overlay"]},{"location":"esempi/punti_in_poligoni_categorie/","title":"Contare i punti nel poligono per categorie","text":"

Contare solo alcuni degli elementi di un vettore puntuale che ricadono all'interno delle geometrie di un vettore poligonale, e \u2018appendere\u2019 i valori nella tabella attributi del layer poligonale.

Possiamo utilizzare l'operatore AND per filtrare il conteggio dei punti del poligono in modo da includere in tale conteggio solo quei punti che hanno determinate caratteristiche.

Utilizzare il calcolatore di campi:

  1. creiamo un nuovo campo virtuale (Tipo: integer) nel layer poligonale;
  2. popolarlo utilizzando un'espressione tipo:
aggregate(layer:='punti', aggregate:='count', expression:=\"nome_campo\", filter:=(\"nome_campo\"='valore_campo' AND intersects( $geometry, geometry(@parent))))\n

Per fare un esempio concreto usiamo i dataset utilizzati nel manuale utente di QGIS scaricabili da qui caricando il vettore poligonale 'regions' e quello puntuale 'airports'. Poniamo ad esempio di voler conteggiare il numero di aeroporti sd uso civile ricadenti in ciascuna regione: possiamo utilizzare la funzione aggregate e imporre che siano soddisfatte due condizioni nell\u2019argomento del filtro tramite l\u2019operatore AND.

risultato:

Partendo da qui possiamo costruire un\u2019espressione pi\u00f9 complessa che ci restituisca il numero di aeroporti, per ciascun uso, presenti in ciascuna regione.

risultato:

Last but not least\u2026 Implicazioni dell\u2019uso della funzione aggregate con la variabile @parent per contare i punti nel poligono

Ho usato questi dataset poich\u00e9 utilizzati anche nella documentazione per spiegare le relazioni 1:N. Solo che in questo caso non c\u2019\u00e8 stato neppure bisogno di impostare una relazione di progetto tra i vettori \u201cregions\u201d (1) e \u201cairports\u201d (N)!

Realizzato da Martina Savarese

Funzioni e variabili utilizzate:

","tags":["contare","punti","poligoni","condizioni","classificare"]},{"location":"esempi/ricerca_caratteri_speciali/","title":"Ricerca caratteri speciali","text":"

I caratteri speciali sono tutti quelli che non trovi sulla tastiera. Simboli, lettere accentate, icone che si dissociano dall\u2019alfabeto tradizionale.

L'alfabeto tradiziona minuscolo,maiuscolo e numeri:

a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z\nA,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z\n0,1,2,3,4,5,6,7,8,9\n

Vediamo come selezionare i record in cui un campo contiene dei caratteri speciali. Una tecnica per selezionare i record che contengono almeno un carattere speciale \u00e8 quello di ricercare tutti i caratteri che NON fanno parte dell'insiene scritto sopra; oppure, di ricercare un insieme di caratteri specificati.

Ecco un esempio:

","tags":["ricerca","caratteri","regex"]},{"location":"esempi/ricerca_caratteri_speciali/#prima-tecnica","title":"prima tecnica","text":"

creare un pattern per escludere i caratteri da cercare [^A-Za-z0-9\\\\s]

L'espressione da utilizzare \u00e8:

regexp_substr(\"testo\",'[^A-Za-z0-9\\\\s]') <> ''\n

dove:

","tags":["ricerca","caratteri","regex"]},{"location":"esempi/ricerca_caratteri_speciali/#seconda-tecnica","title":"seconda tecnica","text":"

creare un pattern con i caratteri da cercare [\u00e0\u00e8\u00e9\u00ec\u00f2\u00f9\u00a3$%], naturalmente l'elenco pu\u00f2 crescere.

L'espressione da utilizzare \u00e8:

regexp_substr(\"testo\",'[\u00e0\u00e8\u00e9\u00ec\u00f2\u00f9\u00a3$%]') <> ''\n
","tags":["ricerca","caratteri","regex"]},{"location":"esempi/ricerca_caratteri_speciali/#risultato","title":"risultato","text":"

in entrambi i casi, e per questo esempio, la soluzione \u00e8 la stessa

per fare test con i regex: https://regex101.com/

Grazie a Valerio Pinna

Funzioni e variabili utilizzate:

","tags":["ricerca","caratteri","regex"]},{"location":"esempi/rotazione_pattern/","title":"Rotazione di pattern lineare","text":"

Campire degli edifici con pattern lineari e rotazione dipendente dalle feature

in questo screenshot si nota che il pattern lineare ha una rotazione costante di 45\u00b0 per tutti gli edifici, per edifici con lato a 45\u00b0 (vedi frecia) il pattern risulta parallelo e quindi non bello a vedersi.

Vediamo come calcolare un angolo diverso per ogni edificio in modo da limitare il parallelismo del pattern lineare:

l'espressione da usare \u00e8:

angle_at_vertex(shortest_line(centroid(oriented_bbox($geometry)), boundary(oriented_bbox($geometry))),0)\n
","tags":["linee","vestizione","centroidi","shortest-line"]},{"location":"esempi/rotazione_pattern/#nel-linguaggio-umano-significa","title":"nel linguaggio umano significa:","text":"

calcola l'angolo del segmento (in blue) pi\u00f9 corto tra il centroide del bounding box orientato (tratteggio rosso) e il bounding box stesso.

espressione:

prova tu usando in file qml:

file QML

Funzioni e variabili utilizzate:

","tags":["linee","vestizione","centroidi","shortest-line"]},{"location":"esempi/rotazione_simbolo_parallelo_linea/","title":"Rotazione simbolo parallelamente alla linea pi\u00f9 vicina","text":"

L'espressione di sotto calcola l'angolo della linea pi\u00f9 vicina e lo utilizza per far ruotare parallelamente un simbolo.

with_variable ('geom',\noverlay_nearest('strade_palermo',$geometry)[0],\nline_interpolate_angle( @geom,\nline_locate_point(@geom,closest_point(@geom,$geometry))))\n

Funzioni e variabili utilizzate:

","tags":["linee","overlay","prossimit\u00e0"]},{"location":"esempi/segmento_minimo_facciata_strada/","title":"Segmento minimo tra facciata e strada","text":"

New SpatialAnalysis Challenge: Riesci a definire un flusso di lavoro per collegare il bordo di ogni edificio rivolto verso la strada al punto pi\u00f9 vicino sul segmento di strada? L'idea alla base della sfida \u00e8 trovare il bordo del poligono il cui punto centrale \u00e8 pi\u00f9 vicino a una strada e quindi collegarlo con il punto pi\u00f9 vicino sulla strada. tweet1,tweet2

","tags":["linee","shortest-line","array","overlay","centroidi"]},{"location":"esempi/segmento_minimo_facciata_strada/#prima-soluzione","title":"Prima soluzione","text":"
with_variable('andy',\n    array_foreach( array_foreach(\n    generate_series(1,num_geometries(segments_to_lines($geometry))),\n    centroid(geometry_n(segments_to_lines($geometry),@element))),\n    distance(@element, overlay_nearest('roads',$geometry)[0])),\n/*shortest line*/\n    shortest_line(\n        array_foreach(\n        generate_series(1, num_geometries( segments_to_lines($geometry))),\n        centroid(geometry_n(segments_to_lines($geometry),@element)))\n        [array_find( @andy,array_min(@andy))], \n        overlay_nearest('roads',$geometry)[0]))\n

L'espressione pu\u00f2 essere usata come tema tramite il generatore di geometrie:

oppure direttamente nell'algoritmo Geometria tramite espressione per ottenere un nuovo layer:

altra soluzione con stesso risultato:

with_variable('toto',\n    collect_geometries( \n    array_foreach(\n    generate_series(1,num_geometries(segments_to_lines($geometry))),\n    centroid(geometry_n(segments_to_lines($geometry),@element)))),\n/*shortest line*/\n    shortest_line(@toto,overlay_nearest('roads',$geometry)[0]))\n

ma entrambe le soluzioni hanno un problema, la funzione overlay_nearest restituisce la strada pi\u00f9 vicina all'edificio e non al centroide della facciata, ecco un esempio estratto dal dataset:

la freccia rossa indica il segmanto pi\u00f9 corto tracciato erroneamente in quanto la strada pi\u00f9 vicina risulterebbe quella indicata con (1).

","tags":["linee","shortest-line","array","overlay","centroidi"]},{"location":"esempi/segmento_minimo_facciata_strada/#seconda-soluzione","title":"Seconda soluzione","text":"

La soluzione corretta deve per forza passare per due step:

  1. estrarre i centroidi delle facciate;
  2. tracciare il segmento pi\u00f9 corto.

I centroidi delle facciate degli edifici li estraggo con:

collect_geometries (\n    array_foreach (\n    generate_series (1, num_geometries (segments_to_lines ($ geometry)))),\n    centroid (geometry_n (segments_to_lines ($ geometry), @ element))))\n

il segmento pi\u00f9 corto lo traccio con:

shortest_line( $geometry,\noverlay_nearest('roads',$geometry)[0])\n

ecco il risultato:

Funzioni e variabili utilizzate:

","tags":["linee","shortest-line","array","overlay","centroidi"]},{"location":"esempi/segmento_minimo_facciata_strada/#dati","title":"dati","text":"

https://t.co/u0xGe5YtCT?amp=1

","tags":["linee","shortest-line","array","overlay","centroidi"]},{"location":"esempi/select_duplicate_vertices/","title":"Selezionare vertici duplicati","text":"

Ogni volta che estraiamo i vertici in una geometria (lineare o poligonale) otteniamo quasi sempre dei vertici duplicati, in questo esempio vedremo come selezionarli usando le espressioni.

Per selezionare i vertici duplicati vedremo due soluzioni diverse:

count(\n    expression:=geom_to_wkt( $geometry,2),\n    group_by:=geom_to_wkt( $geometry,2)\n      ) > 1\n

Ogni espressione viene valutata riga per riga nella tabella attributi, questa espressione sar\u00e0 vera solo in quelle righe dove il conteggio delle geometrie sono maggiori di uno e quindi duplicate: prima riga, conteggio con aggregazione, eistono pi\u00f9 geometrie uguali?? se si il count \u00e8 >1 e seleziona la riga.

array_length(\n        array_agg( \n            expression:=$geometry,\n            group_by:=geom_to_wkt($geometry,2))\n            ) > 1\n

Il concetto \u00e8 simile a quello precedente, ma usando gli array: quindi quando un array contiene pi\u00f9 di un elemento (geometria=vertice), la lunghezza dell'array sar\u00e0 > 1 e quindi duplicato.

per entrambe stesso risultato:

","tags":["selezionare","vertici","contare","array"]},{"location":"esempi/select_duplicate_vertices/#selezionare-solo-uno-dei-due-punti-doppi","title":"Selezionare solo uno dei due punti doppi","text":"

espressione da utilizzare:

if($id = \n  array_first( -- primo punto\n    array_agg(\n    expression:= $id,\n    filter:=\n      array_length(\n      array_agg( \n      expression:=$geometry,\n      group_by:=geom_to_wkt($geometry)))>1,\n    group_by:=geom_to_wkt($geometry)\n    )\n  )\n, $id, '')\n
if($id = \n  array_last( -- ultimo punto\n    array_agg(\n    expression:= $id,\n    filter:=\n      array_length(\n      array_agg( \n      expression:=$geometry,\n      group_by:=geom_to_wkt($geometry)))>1,\n    group_by:=geom_to_wkt($geometry)\n    )\n  )\n, $id, '')\n

if($id = \n    array_agg(\n    expression:= $id,\n    filter:=\n      array_length(\n      array_agg( \n      expression:=$geometry,\n      group_by:=geom_to_wkt($geometry)))>1,\n    group_by:=geom_to_wkt($geometry)\n    )[0] -- primo vertice doppio; [-1] per ultimo; [x] per xesimo posto\n, $id, '')\n

NB1: La selezione potrebbe non essere visibile a schermo a causa della sovrapposizione dei punti, per ovviare alternare le funzioni array_first con array_last. NB2: I calcoli da fare sono molti e per dataset pesanti potrebbe impiegarci molto tempo (dipende anche dalle risorse hardware)

In collaborazione con Valerio Pinna che ringrazio per la disponibilit\u00e0.

","tags":["selezionare","vertici","contare","array"]},{"location":"esempi/select_duplicate_vertices/#prova-tu","title":"Prova tu","text":"

il geopackage \u00e8 scaricabile qui

Funzioni e variabili utilizzate:

","tags":["selezionare","vertici","contare","array"]},{"location":"esempi/select_with_aggregate/","title":"Selezionare tramite funzioni di aggregazione - caso minimun","text":"

Facciamo un esempio, uso vettore province_g del geopackage allegato e seleziono i comuni che hanno superficie pi\u00f9 piccola per ogni provincia:

seleziono (nel panel layer) il layer dove effettuare la selezione e premo il tasto funzione F3 oppure come da figura sotto:

scrivo l'espressione:

$area = minimum($area, group_by:= \"COD_PROV\" )\n
e poi clicco su (2) seleziona elementi:

il geopackage \u00e8 scaricabile qui

Funzioni e variabili utilizzate:

","tags":["selezionare","aggregare","area"]},{"location":"esempi/selezionare_poligoni_max_area_sovrapposta/","title":"Selezionare i riquadri con massima/minima area sovrapposta da altro layer poligonale","text":"

Supponiamo di avere il quadro di unione di tutta Italia relativo al DEM Tinitaly e di voler selezionare, per ogni regione, quale siano i riquadri con maggiore sovrapposizione di territorio.

Usando solo le espressioni di QGIS e Select by Expression , l'espressione da usare \u00e8:

area(\nintersection(\n    $geometry,\n    overlay_intersects('Reg01012022_G_Wgs84',\n                        $geometry)[0]))\n=\nmaximum(\n        area(\n        intersection($geometry,\n                    overlay_intersects('Reg01012022_G_Wgs84',\n                                        $geometry)[0])),\n                                        group_by:=overlay_intersects('Reg01012022_G_Wgs84',\n                                                                     \"cod_reg\")[0])\n

per ottenere i riquadri minimi, sostituire la funzione maximun con minimun:

Funzioni e variabili utilizzate:

","tags":["selezionare","poligoni","overlay"]},{"location":"esempi/selezionare_primi_n_valori/","title":"Selezionare i primi 10 poligoni pi\u00f9 grandi","text":"

Supponiamo di dover selezionare i primi 10 poligoni (per esempio le prime 10 province pi\u00f9 estese d'Italia) usando la selezione per espressione di QGIS:

 array_contains( \n    array_slice(  \n     array_sort( \n      array_agg($area), \n                ascending:=false ), 0,9 ),\n          $area)\n

Nel linguaggio umano significa:

Prendi i primi 10 (da 0 a 9) elementi (valore area) contenuti in un array ordinato in senso decrescente.

","tags":["selezionare","poligoni","etichette","area"]},{"location":"esempi/selezionare_primi_n_valori/#etichettatura","title":"Etichettatura","text":"

Etichettare con il nome della provincia e il numero sequenziale

Etichettiamo tramite regola e usiamo come filtro is_selected(), come espressione:

 \"DEN_UTS\"  || ' (' || \n (array_find(  \n      array_sort( \n        array_agg( $area ) , \n                       ascending:=false ) ,\n              $area ) +1)\n               || ')'\n

NB: +1 perch\u00e9 l'indice inizia da 0

Funzioni e variabili utilizzate:

","tags":["selezionare","poligoni","etichette","area"]},{"location":"esempi/selezionare_primo_record_per_ogni_duplicato/","title":"Selezionare primo record per ogni duplicato per attributo","text":"

Supponiamo di avere una layer con tabella attributi in cui un attributo contiene dei duplicati, selezionare un solo record per ogni duplicato. Questo esempio prende spunto da questa domanda posta su StackExchange.

Usando solo le espressioni di QGIS e Select by Expression , l'espressione da usare \u00e8:

id rischio 1 R1 2 R2 3 R2 4 R3 5 R3 6 R3
with_variable ('your_field','rischio',\nif(\n    count(eval(@your_field),eval(@your_field))>1 \n    AND \n    $id = array_agg($id,eval(@your_field))[0],true,false)\n    )\n

selezioner\u00e0 la riga 2 e 4

Funzioni e variabili utilizzate:

","tags":["selezionare","duplicati","tabella","array","attributi"]},{"location":"esempi/selezionare_punti_vicini_punto/","title":"Selezionare 'n' punti pi\u00f9 vicini ad un punto selezionato","text":"

Supponiamo di avere un layer di punti e di voler selezionare i primi 10 punti pi\u00f9 vicini ad un punto selezionato arbitrariamente. Questo esempio prende spunto da questa domanda posta su StackExchange.

Usando solo le espressioni di QGIS e Select by Expression , l'espressione da usare \u00e8:

/*Select the first 'n' points closest to the selected point*/\n-- fid selection\nwith_variable ('selected_fid',\n    array_find(\n    array_agg(geom_to_wkt($geometry,6)),\n    array_agg(geom_to_wkt($geometry,6), filter:=is_selected())[0]),\n-- selection circle \nwith_variable ('circle', \n    make_circle (\n    $geometry,\n    aggregate(\n    layer:=@layer_name,\n    aggregate:='array_agg',\n    expression:=\n    array_max(array_foreach (\n    overlay_nearest (@layer_name, $geometry,limit:=10),\n    distance($geometry,@element))))[@selected_fid]),\n-- verify\n    intersects (@circle,array_agg($geometry)[@selected_fid]))\n)\n

NB: il valore del parametro limit:= in questo caso specifico, dipende dal provider utilizzato:

  1. per shapefile ($id inizia da 0) utilizzare limit:=valore +1
  2. per geopackage ($id inizia da 1) utilizzare limit:=valore

Funzioni e variabili utilizzate:

","tags":["selezionare","prossimit\u00e0","punti","overlay"]},{"location":"esempi/selezionare_record_orfani_rel_padrefiglio/","title":"Selezionare i record senza riferimenti in una relazione padre figlio","text":"

In una relazione padre-figlio (1:m), pu\u00f2 verificarsi che la tabella figlia abbia dei record senza alcun riferimento alla tabella padre, come selezionare questi record? Esempio preso da StackExchange.

Usando solo le espressioni di QGIS e Select by Expression , l'espressione da usare \u00e8:

NOT aggregate (\n      layer:= 'tabellaPadre',\n      aggregate:= 'count',\n      expression:= $id,\n      filter:= \"campoCorrelato\" = attribute (@parent,'campoCorrelato'))> 0\n

la logica dell'espressione \u00e8 la seguente: per ogni record padre, conta il numero di figli che saranno certamente >0, negare l'espressione corrisponde a selezionare i record figli che NON hanno un genitore.

Funzioni e variabili utilizzate:

","tags":["selezionare","tabella","attributi","relazioni"]},{"location":"esempi/selezione_ultimo_record_per_data/","title":"Selezionare ultimo record per data","text":"

L'esempio \u00e8 preso da qui:

stackexchange: https://gis.stackexchange.com/questions/419587/selecting-latest-record-by-date :

Una tabella degli attributi (in un GeoPackage) contenente un campo stringa box_ide e un campo data inspection_date. Le righe della tabella sono simili a:

box_id inspection_date NE_01_01 2021/05/01 NE_01_01 2021/05/02 NE_01_01 2021/05/04 SE_03_02 2021/06/09 SW_01_04 2021/06/05 SW_01_04 2021/06/07

come selezionare quei record con l'ultimo inspection_date per ciascuno box_id.

Usando i dati di esempio, la selezione risultante sarebbe simile a:

box_id inspection_date NE_01_01 2021/05/04 SE_03_02 2021/06/09 SW_01_04 2021/06/07","tags":["selezionare","record","aggregare","array"]},{"location":"esempi/selezione_ultimo_record_per_data/#funzione-di-aggregazione","title":"Funzione di Aggregazione","text":"

Usando le funzioni di aggregazione, per esempio maximum:

\"inspection_date\" = maximum(\"inspection_date\", group_by:=\"box_id\")\n

non funziona in quanto (sembra) la funzione maximum trasformi un oggetto QDate in QDateTime e di conseguenza l'uguaglianza non \u00e8 mai verificata, infatti l'espressione:

maximum(\"inspection_date\") \u2192 <datetime: 2021-06-09 00:00:00 (ora legale Europa occidentale)>\n

per ovviare occorre trasformare l'output della funzione maximun in data:

\"inspection_date\" = to_date(maximum(\"inspection_date\", group_by:=\"box_id\"))\n

questa funziona!!!

","tags":["selezionare","record","aggregare","array"]},{"location":"esempi/selezione_ultimo_record_per_data/#funzioni-array","title":"Funzioni Array","text":"

Usando gli Array non occorre nessuna trasformazione:

\"inspection_date\" =\n       array_max(array_agg(\"inspection_date\", group_by:=\"box_id\"))\n

","tags":["selezionare","record","aggregare","array"]},{"location":"esempi/selezione_ultimo_record_per_data/#osservazione","title":"Osservazione","text":"

Dal men\u00f9 Impostazioni | Opzioni \u00e8 possibile modificare la visualizzazione delle date:

","tags":["selezionare","record","aggregare","array"]},{"location":"esempi/selezione_ultimo_record_per_data/#prova-tu","title":"prova tu","text":"

Geopackage

Funzioni e variabili utilizzate:

","tags":["selezionare","record","aggregare","array"]},{"location":"esempi/somma_lunghezze_nel_poligono/","title":"Somma lunghezze nel poligono","text":"

Sommare le feature di un layer lineare che ricadono dentro poligoni, e \u2018appendere\u2019 i valori nella tabella attributi del layer poligonale.

Esiste una geo-algoritmo in processing (somma lunghezze linee) che fa questo lavoro in modo brillante ma crea un altro strato.

Un modo rapido per evitare la creazione di un nuovo layer \u00e8 quello di utilizzare il calcolatore di campi:

  1. creare un nuovo campo 'tot_lungh' nel layer poligonale;
  2. popolarlo utilizzando la seguente espressione:

caso in cui i due layer hanno stesso EPSG:

aggregate(layer:='linee', aggregate:='sum',expression:=length(intersection(geometry(@parent),$geometry )), filter:=intersects( $geometry,geometry(@parent)))\n

caso in cui i due layer hanno DIVERSO EPSG:

aggregate(layer:='strade', aggregate:='sum', \nexpression:=length(intersection(transform(geometry(@parent),'EPSG:4326','EPSG:32633'),$geometry)), \nfilter:=intersects( $geometry,transform(geometry(@parent),'EPSG:4326','EPSG:32633')))\n

risultato:

NB: la piccola differenza tra le lunghezze \u00e8 imputabile alla trasformazione di EPSG!!! La prima tabella \u00e8 relativa al vettore poligonale la seconda, lunghezze delle linea, deriva dal geo-algoritmo in processing.

il geopackage \u00e8 scaricabile [qui](../prova_tu/dati_esempi.zip Funzioni e variabili utilizzate:

","tags":["poligoni","aggregare","transform"]},{"location":"esempi/spatial_join/","title":"Spatial join","text":"

L\u2019unione spaziale di attributi \u00e8 un problema frequente in ambito GIS - si tratta di trasferire attributi da un layer ad un altro basandosi solo sulle loro reciproche relazioni spaziali. In QGIS questa feature pu\u00f2 essere avviata attraverso lo strumento Unisci attributi per posizione

Esempio:

supponiamo di avere due layer: le province e regioni ISTAT, trasferire l'attributo 'COD_REG' dal vettore regione al vettore province.

avviare il calcolatore di campi e creare un nuovo campo 'COD_REG' Integer (9) e popolarlo con la seguente espressione:

aggregate(layer:='Reg01012018_g', aggregate:='concatenate', expression:=to_string(\"COD_REG\"), \nfilter:=intersects( Buffer($geometry,-10), geometry(@parent) ),concatenator:='-') \n

L'espressione di sopra in linguaggio umano:

aggrega, usando il layer Reg01012018_g, il campo COD_REG in modo da rispettare la relazione spaziale (filter:=) tra regioni ($geometry) e province(geometry(@parent)).

Step:

seleziono il layer ProvCM01012018_g, clicco sull'icona del calcolatore di campi:

  1. nome del campo in uscita: COD_REG
  2. tipo di campo in uscita: Integer;
  3. lunghezza campo: 9
  4. scrivo espressione di sopra;

ecco la tabella attributi:

Tematizzo con i valori del nuovo campo:

OSSERVAZIONE:

  1. ottengo il risultato sperato solo perch\u00e9 ho utilizzato il Buffer negativo altrimenti avrei ottenuto un risultato diverso (ovvero tutti le regioni che si intersecavano con la provincia);
  2. il calcolatore di campi permette di aggiungere un campo nuovo nella stessa tabella attributi, cosa che \u00e8 molto utile per questi lavori.
  3. un risultato del genere NON \u00e8 possibile ottenerlo cosi rapidamente.

Funzioni e variabili utilizzate:

","tags":["spatial-join","aggregare"]},{"location":"esempi/spatial_join_condizionato/","title":"Spatial join con condizione","text":"

L\u2019unione spaziale di attributi \u00e8 un problema frequente in ambito GIS - si tratta di trasferire attributi da un layer ad un altro basandosi solo sulle loro reciproche relazioni spaziali, in questo esempio aggiungiamo una difficolt\u00e0 in pi\u00f9, ovvero, una condizione.

Il quesito nasce da questa challenge, proposta da Ujaval Gandhi e chiede:

Hai uno strato poligonale di aree urbane e uno strato puntuale di luoghi.Etichettare il poligono con il nome della citt\u00e0 con popolazione maggiore usando una spatial join con condizione?

qui i dati: https://t.co/fqEKY68uGC

","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/spatial_join_condizionato/#soluzione-proposta-da-ujaval-gandhi","title":"Soluzione proposta da Ujaval Gandhi","text":"
array_get(aggregate(\n  layer:='ne_10m_populated_places_simple',\n  aggregate:='array_agg',\n  expression:=\"name\",\n  filter:=intersects($geometry, geometry(@parent)), order_by:=\"POP_MAX\"), -1)\n

nel linguaggio umano: Ordina in modo crescente (order_by) la popolazione relativa ai punti che ricadono dentro (aggregate) i poligoni ed estrai il nome della citt\u00e0. dove: - array_agg: crea un array che contiene i nomi delle citt\u00e0 dentro i poligoni; - il filtro ordina i punti usando la popolazione

video youtube: https://youtu.be/qpiFT8UHhwM

","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/spatial_join_condizionato/#soluzione-proporta-da-toto-fiandaca","title":"Soluzione proporta da Tot\u00f2 Fiandaca","text":"

nel linguaggio umano: Crea una variabile e la popola con il valore massimo della popolazione dei punti che ricadono dentro ogni poligono (ma non so ancora il nome della citt\u00e0), quindi ripeto la ricerca creando una mappa (map(\"name\",\"pop_max\")) e tra le varie mappe, prendo quella con popolazione maggiore (quest'ultima ricerca la fa array_find).

with_variable('max',\n  overlay_contains(\n    layer:='ne_10m_populated_places_simple',expression:= \"pop_max\"),\nmap_akeys( \n  overlay_contains(\n    layer:='ne_10m_populated_places_simple',\n    expression:= map(\"name\",\"pop_max\"))[array_find(@max,array_max(@max))])[0])\n
oppure:

with_variable('max',\n  overlay_contains(\n    layer:='ne_10m_populated_places_simple',expression:= \"pop_max\"),\nattribute(overlay_contains(\n  layer:='ne_10m_populated_places_simple',\n  expression:= @feature)[array_find(@max,array_max(@max))],'name'))\n

in questo caso ho usato la variabile @faeture che contiene l'intero rigo (compreso di geometria) dell'elemento valutato; quindi, usando attribute posso richiamare qualsiasi attributo delle riga.

video youtube: https://youtu.be/NOgDku2S9ws

","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/spatial_join_condizionato/#posizionare-letichetta","title":"posizionare l'etichetta","text":"

Per posizionare l'etichetta nel corretto punto, corrispondente al punto della citt\u00e0 con popolazione maggiore, occorre usare questa espressione nel tab posizione Generatore geometria:

with_variable('max',\n  overlay_contains(\n  layer:='ne_10m_populated_places_simple',expression:= \"pop_max\"),\noverlay_contains(\n  layer:='ne_10m_populated_places_simple',\n  expression:= $geometry)[array_find(@max,array_max(@max))])\n
","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/spatial_join_condizionato/#_1","title":"Spatial join con condizione","text":"

Funzioni e variabili utilizzate:

","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/spatial_join_condizionato2/","title":"Spatial join con condizione","text":"

L\u2019unione spaziale di attributi \u00e8 un problema frequente in ambito GIS - si tratta di trasferire attributi da un layer ad un altro basandosi solo sulle loro reciproche relazioni spaziali, in questo esempio aggiungiamo una difficolt\u00e0 in pi\u00f9, ovvero, una condizione.

Il quesito nasce da questa challenge, proposta da Ujaval Gandhi e chiede:

Collegare ciascuna scuola (schools) all'universit\u00e0 (college) pi\u00f9 vicina nella stessa regione amministrativa. Vedere l'immagine allegata per l'output desiderato.

qui i dati: https://t.co/SyCbIQWnAy

","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/spatial_join_condizionato2/#soluzione-proposta-da-ujaval-gandhi","title":"Soluzione proposta da Ujaval Gandhi","text":"

nel linguaggio umano:

video youtube: <>

","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/spatial_join_condizionato2/#soluzione-proporta-da-toto-fiandaca","title":"Soluzione proporta da Tot\u00f2 Fiandaca","text":"

nel linguaggio umano: Crea una variabile e la popola con il valore massimo della popolazione dei punti che ricadono dentro ogni poligono (ma non so ancora il nome della citt\u00e0), quindi ripeto la ricerca creando una mappa (map(\"name\",\"pop_max\")) e tra le varie mappe, prendo quella con popolazione maggiore (quest'ultima ricerca la fa array_find).

make_line(\n  eval('overlay_nearest(\\'colleges\\',$geometry,filter:=IDp='||\"IDp\"||')')[0],$geometry)\n

Issue https://github.com/qgis/QGIS/issues/43146

Funzioni e variabili utilizzate:

","tags":["spatial-join","aggregare","challenge"]},{"location":"esempi/sposta_etichetta_linea/","title":"Spostare etichetta e generare segmento","text":"

Supponiamo di dover etichettare delle particelle, le label risultano troppo vicine o sovrapposte e vogliamo spostarle facendo generare un segmanto che indichi lo spostamento (vedi screenshot sotto), vediamo come fare:

","tags":["etichette","linee","x","y"]},{"location":"esempi/sposta_etichetta_linea/#caso-qgis-2x-218","title":"Caso QGIS 2.x (2.18)","text":"

Per poter tracciare il segmento occorre aggiungere - alla tabella attributi - due campi x e y (Real); queste coordinate serviranno per memorizzare il punto in cui sposteremo - manualmente - l'etichetta.

Aggiungiamo i due campi X e Y:

tabella attributi:

dopo aver creato i due campi:

fatto ci\u00f2, usiamo la barra delle etichette:

le varie opzioni si attiveranno dopo aver messo il layer in editing e configurato la sezione posizionamento.

Vediamo ora come fare disegnare il segmento: tra il centroid del poligono e il punto in cui spostiamo (manualmente) l'etichetta

Video demo QGIS 2.18

","tags":["etichette","linee","x","y"]},{"location":"esempi/sposta_etichetta_linea/#caso-qgis-3x","title":"Caso QGIS 3.x","text":"

Dalla 3.0 in poi non occorre pi\u00f9 modificare la tabella attributi - aggiungendo i campi x e y - in quanto ci pensa la tabella di memorizzazione ausiliaria

occorre solo utilizzare in X e Y: Store Data in the project dopo avere definito il campo primario del layer

Geopackage \u00e8 qui

Funzioni e variabili utilizzate:

","tags":["etichette","linee","x","y"]},{"location":"esempi/sposta_punti_dentro_poligoni_per_attributo/","title":"Spostare i punti dentro i poligoni in base agli attributi","text":"

Un layer poligonale con tre particelle, attributo Parcel_No (1,2 e 3) e un layer puntuale con mille punti e attributo Parcel_No (1,2 e 3), quindi i punti hanno solo tre valori. Spostare i punti nel corrispondente poligono, utilizzando, appunto, l'attributo comune.

espressione utilizzata:

closest_point(\n   geometry(get_feature('polygon','Parcel_No',\n   attribute($currentfeature,'Parcel_No' ))),\n   $geometry)\n

l'espressione crea un altro punto pi\u00f9 vicino al poligono, quindi li vedremo quasi tutti lungo il perimetro; se invece volessimo i punti dentro i relativi poligoni, per esempio lungo un cerchio, ecco altra espressione:

with_variable('geomPolygon', \n  geometry(\n     get_feature('polygon',\n                 'Parcel_No',\n                  attribute( $currentfeature, 'Parcel_No' ))),\nclosest_point(buffer(centroid(\n   @geomPolygon), bounds_height((@geomPolygon))/5),\n   $geometry))\n

l'espressione di sotto distribuisce casualmente i punti dentro ogni poligono, a partire dal centroide:

--> variabile\nwith_variable('geomPolygon', \n    geometry(\n    get_feature('polygon',\n            'Parcel_No',\n             attribute( $currentfeature, 'Parcel_No' ))),\n--> variabile\nproject(\npoint:=\n    closest_point(\n    geometry1:=centroid(@geomPolygon), -- polygon\n    geometry2:=$geometry), -- point\ndistance:=\n    distance(\n    closest_point(\n    boundary(@geomPolygon),centroid(@geomPolygon)),\n    centroid(@geomPolygon))*randf(0,1),\nazimuth:=\n    radians (rand(0,360))\n    )\n)\n

Animazione:

espressione utilizzata:

per tracciare le linee:

with_variable('geomPolygon', geometry(get_feature('polygon','Parcel_No',attribute( $currentfeature, 'Parcel_No' ))),\nif(contains(@geomPolygon,@canvas_cursor_point)=1,\nmake_line(\n$geometry,\nclosest_point(buffer(centroid(\n@geomPolygon), bounds_height((@geomPolygon))/5),\n$geometry))\n,null))\n

per tracciare i punti:

with_variable('geomPolygon',\n    geometry(get_feature('polygon','Parcel_No',attribute($currentfeature, 'Parcel_No'))),\n      -- condizione\n      if(contains(@geomPolygon,@canvas_cursor_point)=1,\n        closest_point(buffer(centroid(\n          @geomPolygon), bounds_height((@geomPolygon))/5),\n          $geometry), null))\n
","tags":["punti","poligoni","calamita","linee"]},{"location":"esempi/sposta_punti_dentro_poligoni_per_attributo/#prova-tu","title":"prova tu","text":"

dati e progetto QGIS 3.24

Funzioni e variabili utilizzate:

","tags":["punti","poligoni","calamita","linee"]},{"location":"esempi/tema_unico_contorno/","title":"Come aggiungere un unico contorno ad un layer poligonale","text":"

Per aggiungere un unico contorno allo stile di un layer poligonale con elementi adiacenti (vedi immagine sotto), solitamente si duplica il layer e su questo si cambia il tema per ottenere unico contorno (per esempio usando lo stise Elementi fusi). In questo esempio vedremo come evitare di duplicare il layer e di creare, tramite espressioni, un unico contorno complessivo o raggruppato secondo un attributo.

Per ottenere l'unico contorno occorre aggiungere un layer nell'impostazione del simbolo e modificarlo in Generatore Geometria, come espressione utilizzare:

buffer(collect($geometry),0)\n

toglier lo sfondo e lasciare solo il contorno.

nel caso volessimo raggruppare per un attributo (\"COD_PROV\"), ecco un esempio:

espressione utilizzata:

buffer(collect($geometry,\"COD_PROV\"),0)\n

ma se volessimo solo il contorno interno tra i poligoni adiacenti, allora occorre utilizzare la seguente espressione:

DIFFERENCE(\n    boundary(collect($geometry)), \n    boundary( buffer(collect($geometry),0))\n            )\n
oppure:

intersection(\n    aggregate(\n      layer:=@layer_name,\n      aggregate:='collect',\n      expression:=$geometry,\n      filter:=\"cod_prov\" != attribute(@parent,'cod_prov')),\n    $geometry)\n

dove COD_PROV \u00e8 un attributo del layer (vedi tweet: https://twitter.com/bogind2/status/1538381147436204032)

ottenendo:

Funzioni e variabili utilizzate:

","tags":["aggregare","stile","contorni"]},{"location":"esempi/tematizzare/","title":"Tematizzare utilizzando la sovrascrittura definita dai dati","text":"

Ad uno shapefile puntuale attribuire al simbolo colori diversi in funzione di un campo e la dimensione in funzione di un altro campo.

nella Dimensione (mouse sull'icona comparir\u00e0)

quindi l'ingresso atteso \u00e8 un numero reale che genereremo con la seguende condizione:

CASE \nWHEN   length( \"ID_OD\" ) >3  THEN 4\nWHEN   length( \"ID_OD\" ) =3  THEN 6\nELSE 2\nEND\n

nella Colore di riempimento (mouse sull'icona comparir\u00e0)

quindi l'ingresso atteso \u00e8 una stringa [r,g,b,a] con interi oppure come hex che genereremo con la seguende condizione:

CASE \nWHEN   length( \"ID_OD\" ) >3  THEN '255,0,0'\nWHEN   length( \"ID_OD\" ) =3  THEN '255,0,255'\nELSE '255,255,0'\nEND\n

Funzioni e variabili utilizzate:

","tags":["vestizione","condizioni","punti"]},{"location":"esempi/tracciare_grafico_generatore_geometrie/","title":"Tracciare un grafico usando solo il generatore di geometrie, uno per ogni feature","text":"

Supponiamo di avere uno shapefile poligonale, le province siciliane, e i relativi dati sul COVID-19 in un file CSV. Tracciare, a partire dal centroide di ogni feature (ogni provincia), una curva che rappresenti l'andamento, nel tempo, del parametro medico presente nel file CSV (in questo caso specifico \u00e8 totale_casi).

Il file CSV \u00e8 cosi strutturato (esempio di due giorni di rilievo) 459 record, 51 giorni di osservazioni:

data codice_provincia denominazione_provincia sigla_provincia totale_casi pop_res 2020-02-24T18:00:00.000 084 Agrigento AG 0 434870 2020-02-24T18:00:00.000 085 Caltanissetta CL 0 262458 2020-02-24T18:00:00.000 087 Catania CT 0 1107702 2020-02-24T18:00:00.000 086 Enna EN 0 164788 2020-02-24T18:00:00.000 083 Messina ME 0 626876 2020-02-24T18:00:00.000 082 Palermo PA 0 1252588 2020-02-24T18:00:00.000 088 Ragusa RG 0 320893 2020-02-24T18:00:00.000 089 Siracusa SR 0 399224 2020-02-24T18:00:00.000 081 Trapani TP 0 430492 2020-02-25T18:00:00.000 084 Agrigento AG 0 434870 2020-02-25T18:00:00.000 085 Caltanissetta CL 0 262458 2020-02-25T18:00:00.000 087 Catania CT 0 1107702 2020-02-25T18:00:00.000 086 Enna EN 0 164788 2020-02-25T18:00:00.000 083 Messina ME 0 626876 2020-02-25T18:00:00.000 082 Palermo PA 3 1252588 2020-02-25T18:00:00.000 088 Ragusa RG 0 320893 2020-02-25T18:00:00.000 089 Siracusa SR 0 399224 2020-02-25T18:00:00.000 081 Trapani TP 0 430492

Lo shapefile province ha la tabella attributi cosi strutturata:

cod_prov den_prov sigla 81 Trapani TP 82 Palermo PA 83 Messina ME 84 Agrigento AG 85 Caltanissetta CL 86 Enna EN 87 Catania CT 88 Ragusa RG 89 Siracusa SR

Creao una relazione di progetto (1:m) tra i due file, utilizzando come campo comune il campo sigla

Espressione per traciare la curva:

translate( \n    make_line(-- curva\n        relation_aggregate( \n        relation:='rel1',\n        aggregate:='array_agg',\n        expression:=make_point( $id*50, \"totale_casi\"/\"pop_res\"*2*10^7 ))\n            ),\nx(centroid($geometry)),y(centroid($geometry)))\n

L'espressione crea un array di punti geometrici make_point, uno per ogni data ($id), successivamente trasformati in linea make_line e traslati translate sui centroidi di ogni provincia. In questa espressione make_point( $id*50, \"totale_casi\"/\"pop_res\"*2*10^7 ), oltre a normalizzare i dati dividendo per la popolazione residente, uso dei fattori moltiplicativi per l'asse x e y.

Per tracciare gli assi cartesiani, che seguono il grafico:

make_line( -- ordinate\n    make_point(x(centroid($geometry)),y(centroid($geometry))), \n    make_point(x(centroid($geometry)),\n    y(end_point(\n        translate( \n            make_line(\n                relation_aggregate( \n                relation:='rel1',\n                aggregate:='array_agg',\n                expression:=make_point( $id*50, \"totale_casi\"/\"pop_res\"*2*10^7))),\n        x(centroid($geometry)),y(centroid($geometry))\n                 )\n                )))\n        )\n
make_line( -- ascisse\n    make_point(x(centroid($geometry)),y(centroid($geometry))), \n    make_point(x(end_point(\n        translate( \n            make_line(\n                relation_aggregate( \n                relation:='rel1',\n                aggregate:='array_agg',\n                expression:=make_point( $id*50, \"totale_casi\"/\"pop_res\"*2*10^7))),\n        x(centroid($geometry)),y(centroid($geometry))\n        )\n                        )\n),y(centroid($geometry))))\n

Infine, traccio nell'ultimo punto del grafico, il valore normalizzato per 1000 abitati:

end_point( -- ultimo punto grafico\n    translate(\n        make_line(\n            relation_aggregate( \n            relation:='rel1',\n            aggregate:='array_agg',\n            expression:=make_point( $id*50, \"totale_casi\"/\"pop_res\"*2*10^7 ))),\n    x(centroid($geometry)),y(centroid($geometry)))\n        )\n
round(to_string(relation_aggregate( \nrelation:='rel1',\naggregate:='array_agg',\nexpression:=\"totale_casi\"/\"pop_res\")[-1])*1000,1)\n

Gif animata realizzata con il plugin TimeManager di Anita Graser

","tags":["grafico","linee","relazioni","array","centroidi","punti","csv"]},{"location":"esempi/tracciare_grafico_generatore_geometrie/#prova-tu","title":"Prova tu","text":"","tags":["grafico","linee","relazioni","array","centroidi","punti","csv"]},{"location":"esempi/tracciare_grafico_generatore_geometrie/#caso-generico","title":"caso generico","text":"

espressione consigliata

with_variable('id_min', relation_aggregate( relation:='rel1',aggregate:='array_agg',expression:= $id)[0],\n(with_variable('pos_min', relation_aggregate( relation:='rel1',aggregate:='array_agg',expression:=\"positive\")[0],\n(\ntranslate( \nmake_line(-- curva\nrelation_aggregate( \nrelation:='rel1',\naggregate:='array_agg',\nexpression:=make_point(($id - @id_min )*200, (\"positive\" - @pos_min)*2))),\nx(centroid($geometry)),y(centroid($geometry)))\n))))\n

dove:

esempio dati:

name negative positive data CODIMUNI Barcelona 5497 4745 2020-03-29 080193 Barcelona 6259 5355 2020-03-30 080193 Barcelona 6580 5599 2020-04-01 080193 Barcelona 7402 6112 2020-04-02 080193 Barcelona 8078 6354 2020-04-03 080193 Barcelona 8156 6416 2020-04-04 080193 Barcelona 8408 6566 2020-04-05 080193 Barcelona 8483 6655 2020-04-06 080193 Barcelona 8961 6873 2020-04-07 080193 Barcelona 8754 6988 2020-04-08 080193 Barcelona 9490 7305 2020-04-09 080193 Barcelona 9619 7363 2020-04-10 080193 Barcelona 9633 7354 2020-04-11 080193 Barcelona 9671 7319 2020-04-13 080193 Barcelona 9774 7225 2020-04-15 080193 Begues 17 15 2020-03-29 080207 Begues 18 19 2020-03-30 080207 Begues 18 19 2020-04-01 080207 Begues 18 20 2020-04-02 080207 Begues 19 21 2020-04-03 080207 Begues 19 21 2020-04-04 080207 Begues 22 21 2020-04-05 080207 Begues 22 21 2020-04-06 080207 Begues 24 19 2020-04-07 080207 Begues 24 19 2020-04-08 080207 Begues 26 21 2020-04-09 080207 Begues 26 21 2020-04-10 080207 Begues 26 21 2020-04-11 080207 Begues 26 21 2020-04-13 080207 Begues 26 21 2020-04-15 080207

Funzioni e variabili utilizzate:

","tags":["grafico","linee","relazioni","array","centroidi","punti","csv"]},{"location":"esempi/tracciare_punti_adistanzaprefissata_lungo_linea/","title":"Tracciare punti a distanza prefissata lungo una linea","text":"

Come tracciare dei punti su una linea a distanza prefissata a partire dall'origine della linea:

  1. tracciare dei punti casuali sulla linea (nome layer:linea);
  2. nella tabella attributi, dei punti casuali, aggiungere un campo distanza e popolere con le distanze desiderate (a partire dallo start_point della linea);
  3. aggiornare la geometria dei punti usando il field calc e la seguente espressione:
 line_interpolate_point( \n    overlay_nearest('linea',$geometry)[0],\n                           \"distanza\") \n

video: https://youtu.be/iYPjdYOHSLc

","tags":["linee","punti"]},{"location":"esempi/tracciare_punti_adistanzaprefissata_lungo_linea/#usando-algoritmo-di-processing","title":"Usando algoritmo di processing","text":"

\u00c8 possibile creare direttamente la geometria punto usando l'algoritmo Geometria con Espressione a partire dal Layer in ingresso il layer lineare, tipo di geometria Punto ed espressione:

collect_geometries( \n    array_foreach(array(1000,10000,150000,270000,500000),\n    line_interpolate_point($geometry,@element)))\n

Funzioni e variabili utilizzate:

","tags":["linee","punti"]},{"location":"esempi/trova_nella_tabella_attributi/","title":"Trova nella tabella attributi","text":"

La ricerca di un valore (numero o stringa) avviene sempre all'interno di un campo, ma se volessimo fare una ricerca su tutta la tabella attributi? ecco un trucco:

Usando solo le espressioni di QGIS e Select by Expression , l'espressione da usare \u00e8:

array_find(map_avals (attributes ()),'valore')>=0\n

dove:

","tags":["tabella","attributi","chiave-valore","array","selezionare"]},{"location":"esempi/trova_nella_tabella_attributi/#esempio","title":"esempio","text":"id nome cognome eta 1 carlo rossi 25 2 pippo bianchi 50 3 anna bella 25 4 bianchi verde 34

se volessi selezionare le feature che contenessero, non importa in quale campo, il valore 25:

array_find(map_avals (attributes ()),25)>=0\n

selezionerebbe la prima e la terza riga;

se invece volessi cercare, la parola bianchi:

array_find(map_avals (attributes ()),'bianchi')>=0\n

otterrei selezionate le righe 2 e 4

Funzioni e variabili utilizzate:

","tags":["tabella","attributi","chiave-valore","array","selezionare"]},{"location":"esempi/unica_etichetta_pi%C3%B9_poligoni/","title":"Etichettare pi\u00f9 poligoni con unica label","text":"

Etichettare con l'attributo \"COD_REG\" lo strato province italiane ISTAT (QGIS >=3.0)

Per poter etichettare pi\u00f9 feature, con una unica label, occorre che nella tabella attributi sia presente un campo con valori ripetuti (nel nostro esempio si ripetono i valori del campo \"COD_REG\"):

Vediamo come realizzare tutto ci\u00f2:

Come campo etichetta seleziono \"COD_REG\" e poi dalla scheda Posizionamento sezione Definito dai dati.

Nelle Coordinate x e y scrivere la seguente espressione:

x (centroid(collect (expression:=$geometry,  group_by:=\"COD_REG\" )))\n

ripetere la stessa cosa per la y:

y (centroid(collect (expression:=$geometry,  group_by:=\"COD_REG\" )))\n

Funzioni utilizzate (cercare le funzioni nella guida):

  1. x, y : estrae la coordinate x o y dal centroide;
  2. centroid: estrai il centroide di una feature;
  3. collect: crea unica feature secondo un raggruppamento.

Funzioni e variabili utilizzate:

","tags":["etichette","poligoni","x","y","centroidi","punti"]},{"location":"gr_funzioni/da_documentare/","title":"Vuoi documentare una variabile? Ecco quelle ancora non pronte","text":"

Al momento sono circa 130

"},{"location":"gr_funzioni/da_documentare/#elenco-variabili","title":"elenco variabili","text":"Variable Description algorithm_id The unique ID of an algorithm animation_end_time End of the animation\u2019s overall temporal time range (as a datetime value) animation_interval Duration of the animation\u2019s overall temporal time range (as an interval value) animation_start_time Start of the animation\u2019s overall temporal time range (as a datetime value) atlas_feature The current atlas feature (as feature object) atlas_featureid The current atlas feature ID atlas_featurenumber The current atlas feature number in the layout atlas_filename The current atlas file name atlas_geometry The current atlas feature geometry atlas_layerid The current atlas coverage layer ID atlas_layername The current atlas coverage layer name atlas_pagename The current atlas page name atlas_totalfeatures The total number of features in atlas canvas_cursor_point The last cursor position on the canvas in the project\u2019s geographical coordinates cluster_color The color of symbols within a cluster, or NULL if symbols have mixed colors cluster_size The number of symbols contained within a cluster current_feature The feature currently being edited in the attribute form or table row current_geometry The geometry of the feature currently being edited in the form or the table row current_parent_feature represents the feature currently being edited in the parent form. Only usable in an embedded form context. current_parent_geometry represents the geometry of the feature currently being edited in the parent form. Only usable in an embedded form context. form_mode What the form is used for, like AddFeatureMode, SingleEditMode, MultiEditMode, SearchMode, AggregateSearchMode or IdentifyMode as string. frame_duration Temporal duration of each animation frame (as an interval value) frame_number Current frame number during animation playback frame_rate Number of frames per second during animation playback fullextent_maxx Maximum x value from full canvas extent (including all layers) fullextent_maxy Maximum y value from full canvas extent (including all layers) fullextent_minx Minimum x value from full canvas extent (including all layers) fullextent_miny Minimum y value from full canvas extent (including all layers) geometry_part_count The number of parts in rendered feature\u2019s geometry geometry_part_num The current geometry part number for feature being rendered geometry_point_count The number of points in the rendered geometry\u2019s part geometry_point_num The current point number in the rendered geometry\u2019s part geometry_ring_num Current geometry ring number for feature being rendered (for polygon features only). The exterior ring has a value of 0. grid_axis The current grid annotation axis (eg, \u2018x\u2019 for longitude, \u2018y\u2019 for latitude) grid_number The current grid annotation value item_id The layout item user ID (not necessarily unique) item_uuid The layout item unique ID layer The current layer layer_crs The Coordinate Reference System Authority ID of the current layer layer_id The ID of current layer layer_ids The IDs of all the map layers in the current project as a list layer_name The name of current layer layers All the map layers in the current project as a list layout_dpi The composition resolution (DPI) layout_name The layout name layout_numpages The number of pages in the layout layout_page The page number of the current item in the layout layout_pageheight The active page height in the layout (in mm for standard paper sizes, or whatever unit was used for custom paper size) layout_pageoffsets Array of Y coordinate of the top of each page. Allows to dynamically position items on pages in a context where page sizes may change layout_pagewidth The active page width in the layout (in mm for standard paper sizes, or whatever unit was used for custom paper size) legend_column_count The number of columns in the legend legend_filter_by_map Indicates if the content of the legend is filtered by the map legend_filter_out_atlas Indicates if the atlas is filtered out of the legend legend_split_layers Indicates if layers can be split in the legend legend_title The title of the legend legend_wrap_string The character(s) used to wrap the legend text map_crs The Coordinate reference system of the current map map_crs_acronym The acronym of the Coordinate reference system of the current map map_crs_definition The full definition of the Coordinate reference system of the current map map_crs_description The name of the Coordinate reference system of the current map map_crs_ellipsoid The acronym of the ellipsoid of the Coordinate reference system of the current map map_crs_proj4 The Proj4 definition of the Coordinate reference system of the current map map_crs_projection The descriptive name of the projection method used by the Coordinate reference system of the map (e.g. \u2018Albers Equal Area\u2019) map_crs_wkt The WKT definition of the Coordinate reference system of the current map map_end_time The end of the map\u2019s temporal time range (as a datetime value) map_extent The geometry representing the current extent of the map map_extent_center The point feature at the center of the map map_extent_height The current height of the map map_extent_width The current width of the map map_id The ID of current map destination. This will be \u2018canvas\u2019 for canvas renders, and the item ID for layout map renders map_interval The duration of the map\u2019s temporal time range (as an interval value) map_layer_ids The list of map layer IDs visible in the map map_layers The list of map layers visible in the map map_rotation The current rotation of the map map_scale The current scale of the map map_start_time The start of the map\u2019s temporal time range (as a datetime value) map_units The units of map measurements model_path Full path (including file name) of current model (or project path if model is embedded in a project). model_folder Folder containing current model (or project folder if model is embedded in a project). model_name Name of current model model_group Group for current model notification_message Content of the notification message sent by the provider (available only for actions triggered by provider notifications). parent Refers to the current feature in the parent layer, providing access to its attributes and geometry when filtering an aggregate function project_abstract The project abstract, taken from project metadata project_area_units The area unit for the current project, used when calculating areas of geometries project_author The project author, taken from project metadata project_basename The basename of current project\u2019s filename (without path and extension) project_creation_date The project creation date, taken from project metadata project_crs The Coordinate reference system of the project project_crs_arconym The acronym of the Coordinate reference system of the project project_crs_definition The full definition of the Coordinate reference system of the project project_crs_description The description of the Coordinate reference system of the project project_crs_ellipsoid The ellipsoid of the Coordinate reference system of the project project_crs_proj4 The Proj4 representation of the Coordinate reference system of the project project_crs_wkt The WKT (well known text) representation of the coordinate reference system of the project project_distance_units The distance unit for the current project, used when calculating lengths of geometries and distances project_ellipsoid The name of the ellipsoid of the current project, used when calculating geodetic areas or lengths of geometries project_filename The filename of the current project project_folder The folder of the current project project_home The home path of the current project project_identifier The project identifier, taken from the project\u2019s metadata project_keywords The project keywords, taken from the project\u2019s metadata project_last_saved Date/time when project was last saved. project_path The full path (including file name) of the current project project_title The title of current project project_units The units of the project\u2019s CRS qgis_locale The current language of QGIS qgis_os_name The current Operating system name, eg \u2018windows\u2019, \u2018linux\u2019 or \u2018osx\u2019 qgis_platform The QGIS platform, eg \u2018desktop\u2019 or \u2018server\u2019 qgis_release_name The current QGIS release name qgis_short_version The current QGIS version short string qgis_version The current QGIS version string qgis_version_no The current QGIS version number row_number Stores the number of the current row snapping_results Gives access to snapping results while digitizing a feature (only available in add feature) scale_value The current scale bar distance value symbol_angle The angle of the symbol used to render the feature (valid for marker symbols only) symbol_color The color of the symbol used to render the feature symbol_count The number of features represented by the symbol (in the layout legend) symbol_id The Internal ID of the symbol (in the layout legend) symbol_label The label for the symbol (either a user defined label or the default autogenerated label - in the layout legend) symbol_layer_count Total number of symbol layers in the symbol symbol_layer_index Current symbol layer index symbol_marker_column Column number for marker (valid for point pattern fills only). symbol_marker_row Row number for marker (valid for point pattern fills only). user_account_name The current user\u2019s operating system account name user_full_name The current user\u2019s operating system user name value The current value with_variable Allows setting a variable for usage within an expression and avoid recalculating the same value repeatedly zoom_level Zoom level of the tile that is being rendered (derived from the current map scale). Normally in interval [0, 20]."},{"location":"gr_funzioni/da_documentare/#come-sostenere","title":"come sostenere","text":""},{"location":"gr_funzioni/gruppo_funzioni/","title":"Gruppi funzioni","text":"

Nell'Interfaccia del Field Calc (e nel costruttore di espressione) \u00e8 presente, nella parte centrale, una sezione che raccoglie i Gruppi delle Funzioni elencate sotto:

Gruppo funzioni nro funzioni* Descrizione info Aggrega (23/23) Contiene funzioni che aggregano valori nei livelli e campi. aggiornate a QGIS 3.0 Array (36/36) Questo gruppo contiene funzioni espressione per la creazione e la manipolazione di array (noti anche come strutture dati ad elenco). L'ordine dei valori all'interno dell'array \u00e8 importante, al contrario della struttura dati 'a mappa', in cui l'ordine delle coppie chiave-valore \u00e8 irrilevante e i valori vengono identificati dalle loro chiavi. aggiornate a QGIS 3.28 Campi e valori (1/1) Contiene un elenco di campi del layer. Si possono ottenere valori campione con il click del tasto destro del mouse. Seleziona il nome del campo dall'elenco e fai click con il tasto destro per aprire il men\u00f9 con le opzioni per caricare un campione di valori dal campo selezionato. Elenco dei campi del layer selezionato QGIS 3.28 Colore (17/17) Questo gruppo contiene funzioni per manipolare i colori Per manipolare i colori Condizioni (6/6) Questo gruppo contiene funzioni per gestire controlli condizionali nelle espressioni. aggiornate a QGIS 3.6 Conversioni (15/15) Questo gruppo contiene funzioni per convertire i dati da un tipo ad un altro, es. da stringa a intero, da intero a stringa. aggiornate a QGIS 3.16 Corrispondenza Fuzzy (4/4) Questo gruppo contiene funzioni per confronti fuzzy fra valori. funzioni per confronti fuzzy fra valori Custom (16/16) Questo gruppo contiene funzioni Python create in modo personalizzato dall'utente. funzioni personalizzate Data ora (21/21) Questo gruppo contiene funzioni per gestire dati con date e ore. aggiornate a QGIS 3.14 Espressioni utente (?) Questo gruppo contiene espressioni memorizzate nel profilo utente. aggiornate a QGIS 3.12 File e percorsi (9/9) Contiene funzioni che manipolano nomi di file e di percorsi. manipolano nomi di file e di percorsi aggiornate a QGIS 3.22 Form (0/2) Questo gruppo contiene funzioni che sono disponibili nel contesto modulo attributi. Per esempio, in impostazioni campo widget. Gruppo visibile solo nei widget. aggiornate a QGIS 3.14 Generale (7/7) Questo gruppo contiene funzioni generali assortite. assortimento di funzioni generiche Geometria (151/151) Questo gruppo contiene funzioni che operano sugli oggetti geometrici es. lunghezza, area. aggiornate a QGIS 3.34 Layer mappa (3/3) Contiene due funzioni e la lista dei layer della mappa che sono disponibili nel progetto corrente con possibilit\u00e0 di leggere1 i nomi e valori degli attributi. aggiornate a QGIS 3.30 Layout (2/2) Visibile solo nel layout di stampa Maps (14/14) Questo gruppo contiene funzioni per la creazione e la manipolazione di strutture di dati 'a mappa' (noti anche come oggetti dizionario, coppie chiave-valore o array associative). Si possono assegnare valori a determinate chiavi. L'ordine delle coppie chiave-valore nell'oggetto mappa non \u00e8 rilevante. >= QGIS 3.0 aggiornate a QGIS 3.24 Matematica (28/28) Questo gruppo contiene funzioni matematiche es. radice quadrata, seno e coseno aggiornate a QGIS 3.12 Operatori (23/23) Questo gruppo contiene operatori es. + - * aggiornate a QGIS 3.20 Raster (2/2) Contiene funzioni che calcolano statistiche e valori raster. >= QGIS 3.4 Recente (1/1) Elenca le ultime 20 espressioni utilizzate Record e attributi (17/17) Questo gruppo contiene funzioni che operano sugli identificativi dei record. aggiornate a QGIS 3.30 Sensors Questo gruppo contiene le funzioni per interagire con i sensori a QGIS 3.30 Relazioni (?) Visibile solo se ci sono relazioni di progetto Stringhe di testo (25/25) Questo gruppo contiene le funzioni che operano sulle stringhe es. sostituzione, conversione in maiuscolo. aggiornate a QGIS 3.32 Variabili (4/65+) Questo gruppo contiene variabili dinamiche che possono essere inserite nelle tue espressioni. >= QGIS 2.12 - variano in funzione del contesto

conteggio: https://gist.github.com/pigreco/2b2ad2eb12d17c4370b09635ae1470b4

* i numeri tra parentesi rappresentano: (numero funzioni documentate/numero funzioni nel gruppo)

"},{"location":"gr_funzioni/gruppo_funzioni/#espressione-e-tag","title":"espressione e tag","text":"

I tag sono utili per la ricerca delle espressioni:

funzioni tags $geometry current, processing, functions $id row, current $length distance, planimetric, length, perimeter, current, linestring, project, settings, ellipsoid, border, setting, calculated $map layout, item, drawn, current, main, print, map, window, overview, canvas $page layout, print, page, current $perimeter distance, planimetric, length, perimeter, current, polygon, project, settings, ellipsoid, setting, calculated $rownum row, number, current $scale denominator, contexts, current, scale, canvas, map $vertex_as_point point, mesh, vertex, current $vertex_index index, mesh, vertex, current $vertex_x coordinate, mesh, vertex, current $vertex_y coordinate, mesh, vertex, current $vertex_z mesh, vertex, current $x first, point, coordinate, current, multipoint $x_at current, retrieves, feature, coordinate $y first, point, coordinate, current, multipoint $y_at current, retrieves, feature, coordinate $z first, point, current, multipoint, altitude, 3D % division, remainder * multiplication, values + addition, null, result, values - subtraction, null, result, values / division, values < left, evaluates, compares, less, values, right <= compares, equal, less, values, left, evaluates, right <> compares, evaluates, values, equal = compares, evaluates, values, equal AND condition CASE casewhen, clause, series, met, first, corresponding, end, none, evaluated, components, conditions, optional, marks, return, evaluation, else, case, evaluate, result, stops, condition, set ILIKE compare, numbers, insensitive, first, match, sensitive, supplied, parameter, case, matches, pattern IN list, contained, found IS compare, same, equal, identical IS NOT compare, same, different LIKE compare, sensitive, numbers, first, works, supplied, parameter, matches, pattern Meshes calculate, functions, return, mesh, related, contains NOT negates, condition NULL equates, null OR condition [] array, operator, element, map, index > greater, compares, evaluates, left, values, right >= compares, equal, values, greater, left, evaluates, right ^ power, values abs absolute acos angle, cosine, inverse, radians affine_transform affine, coordinate, operations, spatial, transformation, reference, offset, system, calculations, translation, rotation, order, added, present, scale age difference, needs, datetimes, order, extract, information, following, interval, dates, functions, yearmonthweekdayhourminutesecond aggregate aggregate, combine, features, calculated, merge, concatenate, sum, mean, median, count, quartile, minimum, maximum, minority, majority, standard, deviation, length, unique angle_at_vertex angles, specified, clockwise, angle, linestring, degrees, bisector, north, average, vertex apply_dash_pattern dash, stroked, multilinestring, input, ring, specified, applies, line, pattern, returning area planimetric, polygon, spatial, reference, system, calculations, area, project, settings, surface, ellipsoid, units array list, array, parameter, containing array_agg array, field, aggregated array_all array, contains, compare, search array_append array, added, end array_cat concatenated, arrays, containing array_distinct array, containing, distinct array_filter array, items, limit, evaluates array_find array, found, first, lowest, index array_first array, first array_foreach evaluated, array, iterate, item array_get array, position, index, last, nth, one, first array_insert array, added, position array_intersect array, element, exists, intersection, overlap array_last array, last array_length elements, array, count array_majority common, array, median array_max array, maximum array_mean array, ignored, mean, numeric, arithmetic array_median array, arithmetic, median, ignored array_min array, minimum array_minority common, array, median array_prepend array, added, beginning array_prioritize sorted, array, first, specified, missing, second, ordering, added, present, result, end array_remove_all array, entries, removed array_remove_at array, removed, index array_replace array, map, replaced, supplied array_reverse array, reversed, order array_slice array, defined, arguments, start, position, slice, portion, end, index array_sort sorted, array, elements, provided array_sum array, ignored, numeric, arithmetic, sum array_to_string concatenates, delimiter, join, aggregate ascii code, first, associated, character, unicode asin sine, inverse, angle, radians atan tangent, inverse, angle, radians atan2 tangent, arguments, signs, angle, inverse, quadrant attribute attribute attributes attributes, names, field, keys, containing, map azimuth measured, clockwise, points, angle, vertical, north, azimuth, radians base_file_name suffix, base, directory, name, file, folder, path boundary polygon, linestrings, instance, combinatorial, topological, points, collections, types, ring, boundary, closure bounds box, input, spatial, reference, calculations, system, represents, bounding bounds_height box, spatial, reference, calculations, system, height, bounding bounds_width width, box, spatial, reference, calculations, system, bounding buffer distance, equal, spatial, reference, calculations, system, points, segments, miter, join, cap, round buffer_by_m line, according, values, varies, vertices, buffer, diameter ceil rounds, number centroid geometric, center char associated, character, unicode, code clamp specified, restricts, input, range close_line first, point, closed, end, input, appending, result, line, multi closest_point closest, point, nearest coalesce list, first, arguments, null collect aggregated, multipart collect_geometries part, set, collects, object, multi color_cmyk cyan, color, black, yellow, representation, components color_cmyka cyan, alpha, color, black, yellow, representation, components color_grayscale_average filter, color, provided, applies, grayscale, representation color_hsl attributes, lightness, color, hue, representation, saturation color_hsla attributes, alpha, lightness, color, transparency, hue, representation, saturation color_hsv attributes, color, hue, representation, saturation color_hsva attributes, alpha, color, transparency, hue, representation, saturation color_mix_rgb green, blue, red, alpha, mixing, color, colors, provided, ratio color_part red, specific, color, component, alpha color_rgb green, blue, red, color, representation, components color_rgba green, blue, red, alpha, color, representation, components combine combination, union concat empty, converted, numbers, concatenates, null, strings, several, other, values concatenate aggregated, field, joined, delimiter, strings concatenate_unique aggregated, unique, field, joined, delimiter, strings contains lie, point, lies, tests, interior, exterior, within, points, contains convex_hull hull, convex, minimum, represents, encloses, set cos angle, cosine count aggregate, features, matching, count count_distinct aggregate, distinct, count count_missing aggregate, missing, count create_ramp map, gradient, steps, strings, ramp, color crosses common, supplied, crosses, tests, interior, points current_parent_value field, actual, unsaved, wrapped, retrieve, widget, current, relation, differ, edited, embedded, coalesce, attribute, form, filter, added, features, parent, context, usable current_value table, field, actual, unsaved, current, differ, edited, row, attribute, form, added, features darker darker, color, lighter datetime_from_epoch passed, datetime, localtime, msecs, date, coordinated, converted, universal, milliseconds, time day date, extracts, interval, days, number, day day_of_week week, day, specified, datetime, corresponds, ranges, date, saturday decode_uri depends, layer, data, dataprovider, provider, uri, underlying, decodes, available degrees converts, degrees, radians densify_by_count generates, layer, line, number, one, new, polygon, vertices, larger, original densify_by_distance maximum, edges, additional, generates, line, densified, adding, new, polygon, interval, layer, one, distance, vertices, specified difference part, represents, intersect, clip disjoint share, intersect, tests, space display_expression evaluated, arguments, details, display, default distance projected, reference, spatial, minimum, units distance_to_vertex distance, specified, vertex end_point last, node, vertex env operating, content, prefixes, gets, definition, found, drive, check, system, environment, path, variables, letters, inject, specific, configuration, depends, administrator, variable, documentation, handy, set epoch interval, date, milliseconds, epoch eval dynamic, fields, parameters, expression, expand, context, passed, variables, evaluates eval_template dynamic, fields, parameters, template, expand, context, passed, variables, evaluates exif exif, retrieves, tag, file, image, values exif_geotag geotags, exif, point, file, image exp exponential extend start, distances, line, last, linestring, amount, parts, bearing, lines, extends, reference, spatial, extended, first, segment, system, multilinestring, specified, end exterior_ring polygon, line, ring, exterior, result, representing extrude curve, version, extension, input, specified, extruded, linestring, multi file_exists path, exists, file file_name extension, name, directory, file, path file_path path, directory, name, folder, file file_size size, file, bytes file_suffix extension, path, suffix, file flip_coordinates latitude, longitude, reversed, swapped, coordinates, repairing, copy floor downwards, rounds, number force_polygon_ccw exterior, clockwise, respect, convention, rings, counter, interior, forces force_polygon_cw exterior, clockwise, respect, convention, rings, interior, counter, forces force_rhr contexts, clockwise, boundary, interior, rings, bounded, force_polygon_cw, explicit, polygon, area, exterior, inconsistency, right, use, hand, particular, respect, counter, forces, ring, recommended, oriented, direction, rule, definition format format, supplied, arguments format_date custom, type, uses, format, strings, time, date, formats, see, qdatetime, tostring format_number formatted, truncates, places, separator, decimal, default, thousands, locale, language from_base64 encoding, base, binary, decodes from_json json, loads, formatted generate_series sequence, containing, numbers, array geom_from_gml representation, conversion geom_from_wkb created, wkb, binary, known, representation, conversion geom_from_wkt text, known, wkt, representation, conversion geom_to_wkb wkb, binary, representation, known, conversion geom_to_wkt text, wkt, srid, representation, known, conversion geometry geometry_n part, input, multipart, collection, specific geometry_type describing, type, point, polygon, line get_feature attribute, first, matching, search, find get_feature_by_id hamming_distance distance, length, input, sensitive, different, strings, corresponding, hamming, equates, characters, case, same, comparison, positions hash hex, bytes, byte, digits, hash, method, given, represented, character, long, bits, produces hausdorff_distance distance, segment, dissimilar, densify, linestrings, parallel, other, matching, total, close, executed, specifying, occurs, equal, fraction, testing, method, discrete, linear, default, approximate, sets, length, large, lower, similar, similarity, parameter, measure, split, make, approach, closest, examples, provided, performs, insufficient, networks, specify, optional, decreasing, approximation, cases, densification, specified, computing, argument, subsegments, hausdorff, exact, indicating, subset, standard hour extracts, number, time, part, interval, hours, hour, datetime hstore_to_map formatted, hstore, map if tests, different, check, result, conditional, depending, condition inclination zenith, nadir, inclination, measured, points interior_ring_n interior, polygon, hole, ring intersection shared, represents, portion, overlap intersects share, space, intersects, tests, intersect, portion, overlaps intersects_bbox box, tests, overlaps, defined, intersect, bounding iqr field, quartile, range, inter, calculated, statistics, aggregates is_closed points, start, closed, end, coincident, result, false, line is_directory path, directory, folder is_empty empty, is_empty_or_null, see, coordinates, false is_empty_or_null empty, is_empty, coordinates, false is_file path, file is_layer_visible specified, visible is_multipart type, multi is_selected selected, arguments, details is_valid rules, valid, ogc, according, formed item_variables layout, item, variables, print, map layer_property property, matching, metadata left first, substring, leftmost, characters, contains, extracts length distance, linestring, length, count, characters, planimetric length3D planimetric, distance, length, spatial, reference, system, calculations, calculates, line, project, differs, object, match, settings, ellipsoid, units levenshtein distance, required, edit, indicate, sensitive, similarity, insertions, similar, mean, measure, different, character, change, substitutions, strings, edits, distances, larger, deletions, equates, case, minimum, levenshtein, smaller lighter darker, color, lighter line_interpolate_angle distance, angles, parallel, specified, clockwise, angle, linestring, degrees, north line_interpolate_point distance, interpolated, linestring, point, specified, along line_locate_point distance, point, specified, closest, linestring, position, corresponding, along line_merge passed, single, return, input, linestrings, merged, connected, linestring, multilinestring line_substring curve, start, specified, measured, falls, existing, interpolated, beginning, distances, line, end, portion ln natural, logarithm log base, logarithm log10 base, logarithm longest_common_substring longest, common, input, sensitive, case, substring, strings lower converts, letters, lower, case lpad length, padded, width, truncated, specified, target, fill, left, character, smaller m point, measure m_max maximum, measure m_min minimum, measure main_angle oriented, minimal, covers, clockwise, angle, long, north, degrees, rectangle, axis, bounding majority occurring, field, majority, aggregate make_circle circular, polygon make_date year, date, month, numbers, day make_datetime minute, month, numbers, day, year, second, hour, datetime make_ellipse polygon, elliptical make_interval minute, seconds, month, year, weeks, values, interval, hours, days make_line point, line, series make_point optional, point make_point_m point, coordinate make_polygon outer, ring, series, inner, optional, polygon make_rectangle_3points rectangle, points make_regular_polygon polygon, regular make_square square, diagonal make_time minute, hour, second, numbers, time make_triangle triangle, polygon map passed, keys, pair, containing, parameters, map map_akeys array, map, keys map_avals array, map map_concat containing, key, concatenate, contain, entries, maps, map map_credits list, rights, layers, layout, item, usage, credit, strings, map map_delete deleted, corresponding, map, key map_exist map, exists, key map_get map, exists, key map_insert map, added, exists, key, overridden map_prefix_keys prefixed, keys, map map_to_hstore formatted, hstore, elements, map, merge maptip evaluated, arguments, maptip, details, default, see max longest, biggest, most, largest, maximum max_length length, maximum, strings, characters, count, aggregate maximum maximum, aggregate md5 hash mean average, aggregate, mean median median, aggregate mime_type type, data, binary min least, smallest, minimum min_length length, characters, count, minimum, strings minimal_circle enclosing, minimal, minimum, represents, encloses, circle, smallest minimum minimum, aggregate minority least, occurring, field, minority, aggregate minute minutes, extracts, part, interval, number, time, datetime month date, extracts, months, part, interval, month, number nodes_to_points vertex, multipoint, node, input now static, evaluating, current, date, time nullif substitute, equals, condition, compare num_geometries collection, multipart, parts, count num_interior_rings rings, holes, count, polygon, collection, interior num_points vertices num_rings rings, holes, polygon, collection, exterior, including num_selected evaluated, selected, works, default, features offset_curve spatial, offsetting, reference, system, linestring, formed, distances, side order_parts criteria, multigeometry, orders, parts, given oriented_bbox oriented, box, minimal, represents, bounding overlaps share, tests, contained, overlaps, same, dimension, space overlay_contains least, predicate, current, contained, target, contains, array, geos, st_contains, postgis, described, underlying, features overlay_crosses predicate, st_crosses, crosses, current, target, array, geos, described, underlying, features, crossed overlay_disjoint predicate, st_disjoint, disjoint, current, target, array, geos, described, underlying, features overlay_equals predicate, current, equals, equal, target, array, geos, st_equals, described, underlying, features overlay_intersects intersected, least, predicate, current, target, array, geos, postgis, described, st_intersects, intersects, underlying, features overlay_nearest distance, layers, large, slow, current, target, array, lot, features overlay_touches least, predicate, touches, current, target, array, geos, described, underlying, touched, st_touches, features overlay_within predicate, current, contain, target, array, geos, described, underlying, features parameter algorithm, parameter, processing perimeter planimetric, distance, polygon, perimeter, spatial, reference, system, calculations, project, differs, object, match, settings, ellipsoid, units pi calculations, pi point_n specific, node, vertex point_on_surface point, surface, lie, centroid, overlay pole_of_inaccessibility inaccessibility, precise, tolerances, calculates, guaranteed, boundary, require, point, true, iterations, internal, uses, approximate, approach, polylabel, find, distant, calculate, pole, take, surface, specified, tolerance, iterative project distance, elevation, projected, start, point, azimuth, radians, bearing project_color scheme, project, color q1 field, quartile, first, calculated q3 third, field, quartile, calculated radians converts, degrees, radians ramp_color ramp, color, representing rand random, inclusive, specified, range, argument, seed, same, provided, minimum, maximum, integer, depending randf random, specified, range, argument, seed, same, provided, float, minimum, maximum, inclusive, depending range field, range, aggregate, minimum, maximum raster_statistic raster, statistics raster_value provided, point, raster, found regexp_match return, found, matching, unicode, regular, position, substring, first regexp_matches array, groups, capturing, captured, order, appear, supplied, regular, strings regexp_replace regular, supplied, replaced regexp_substr regular, matches, supplied, portion relate dimensional, relationship, extended, intersection, representation, model, tests relation_aggregate child, matching, aggregate, features, relation replace array, map, strings, supplied, replaced represent_attributes attributes, keys, arguments, representation, map, see, attribute, configured, names, type, details, depends, widget represent_value depends, configured, field, type, widgets, map, representation, widget reverse direction, order, vertices, reverses, line, reversing right last, substring, rightmost, characters, contains rotate version, spatial, reference, calculations, rotated, system round rounds, places, decimal, number roundness polygon, perfect, flat, close, shape, calculates, circle rpad length, right, padded, width, specified, truncated, target, fill, character, smaller scale version, scaled, spatial, reference, calculations, system scale_exp exponential, curve, ease, transforms, output, given, input, domain, range, specified, values scale_linear transforms, linear, output, given, input, domain, range, interpolation second extracts, part, seconds, interval, number, time, datetime segments_to_lines consisting, segment, input, multi, line set_color_part alpha, component, specific, red, color, sets sha256 hash shortest_line start, resultant, joining, end, shortest, line simplify straight, large, deviations, nodes, algorithm, reduces, simplifies, segments, number, threshold, distance, removing, vertices, based, preserves simplify_vw spikes, areas, straight, nodes, algorithm, area, simplifies, removes, narrow, segments, visvalingam, threshold, create, vertices, removing, based, small sin sine, angle single_sided_buffer buffering, spatial, reference, system, linestring, formed, distances, side sinuosity curve, distance, length, endpoints, sinuosity, ratio, straight smooth adding, corners, smoothed, dimensionality, round, output, contain, input, retain, extra, smooths, nodes, values, same soundex code, represented, similar, matching, algorithm, soundex, same, phonetic, representation, strings, sounds sqlite_fetch_and_increment attributes, children, applied, uncommitted, works, relations, prefetched, intended, creating, several, auto_increment, form, databases, transaction, parents, filter_value, mode, open, primary, evaluate, sidenote, add, require, impossible, default_values, table, insert, nice, formats, current, adding, get, target, work, specified, usage, columns, retrieved, autoincrementing, new, limitation, gpkg, parallel, database, additional, makes, postgres, modifies, sequence, cached, manage, key, same, id_field, acquire, filtered, default, filter_attribute, parent, option, unsafe, sqlite, separate, parameter, map, row, configurations, lifetime, processes, incremented, able, features, purpose sqrt root, square square_wave waves, rectangular, constructs, square, boundary square_wave_randomized waves, rectangular, constructs, square, boundary, randomized start_point first, node stdev deviation, field, standard, aggregate straight_distance_2d distance, curve, circularstring, first, last, direct, euclidean, linestring, vertex string_to_array split, convert, separate, delimiter, divides strpos substring, position, return, found, first, matching substr part sum field, summed, aggregate sym_difference portions, represents, intersect tan angle, tangent tapered_buffer varies, buffer, line, diameter, length title letter, words, lower, converts, leading, capital, title, case to_base64 encoding, base, binary, encodes to_date provided, additional, user, format_date, parse, qdate, converts, default, current, format, object, fromstring, date, optional, documentation, see to_datetime provided, additional, user, format_date, parse, qdate, converts, default, datetime, current, format, object, fromstring, optional, documentation, qtime, see to_decimal converts, minute, degree, equivalent, second, coordinate, decimal to_dm converts, minute, degree, coordinate to_dms converts, minute, degree, second, coordinate to_int converts, invalid, converted, integer to_interval type, month, converts, date, interval, take, hours, days to_json formatted, json, array, create, other, map to_real converts, precision, invalid, rounded, numbers, changes, real, result, converted, saving, conversion, smaller to_string converts, number to_time provided, additional, format, object, parse, time, converts, fromstring, optional, documentation, qtime, see touches point, common, touches, interiors, tests, intersect transform crs, source, transformed, destination, reprojection translate spatial, reference, calculations, system, translated, displace, move triangular_wave waves, boundary, constructs, triangular triangular_wave_randomized waves, boundary, constructs, randomized, triangular trim removes, leading, whitespace, spaces, tabs, trailing try return, tries, error, alternative, provided, exception union union, dissolve, point, represents, set upper converts, upper, letters, case url_encode encoded, producing, form, characters, query, plus, url, compliant, converted, map, sign, transforms uuid createuuid, generates, method, unique, quuid, identifier, row var stored, variable, specified wave waves, rounded, sine, boundary, constructs wave_randomized waves, sine, boundary, curved, constructs, randomized wedge_buffer buffer, wedge, point, originating, shaped week weeks, week, date, extracts, interval, number with_variable variable, argument, value, evaluation within tests, contains, completely wordwrap maximum, minimum, wrapped, characters, multiline x centroid, point, coordinate x_max coordinate, spatial, reference, calculations, system, maximum x_min coordinate, spatial, reference, calculations, system, minimum y centroid, point, coordinate y_max coordinate, spatial, reference, calculations, system, maximum y_min coordinate, spatial, reference, calculations, system, minimum year year, years, date, extracts, part, interval, number z point, coordinate z_max coordinate, maximum z_min coordinate, minimum || behavior, different, see, concat, null, joins, result, values ~ white, space, regular, performs, backslash, characters, escaped, character, expression, match"},{"location":"gr_funzioni/gruppo_funzioni/#tag-e-espressioni","title":"tag e espressioni","text":"tag espressioni geometry, get_feature_by_id absolute abs adding smooth, sqlite_fetch_and_increment, densify_by_distance corners smooth smoothed smooth dimensionality smooth round smooth, buffer output smooth, scale_exp, scale_linear contain smooth, map_concat, overlay_within input smooth, bounds, segments_to_lines, extrude, apply_dash_pattern, hamming_distance, scale_exp, close_line, longest_common_substring, geometry_n, line_merge, clamp, scale_linear, nodes_to_points retain smooth extra smooth smooths smooth nodes smooth, simplify_vw, simplify values smooth, +, same smooth, sqlite_fetch_and_increment, soundex, IS NOT, IS, hamming_distance, rand, randf, overlaps addition + null +, result +, affine affine_transform coordinate affine_transform, x, y, to_dm, to_decimal, to_dms, z_max, $vertex_x, $vertex_y, z_min, x_max, y_max, x_min, y_min, $x_at, $y_at, $x, $y, make_point_m, z operations affine_transform spatial affine_transform, bounds, bounds_height, single_sided_buffer, x_max, y_max, x_min, y_min, buffer, length3D, perimeter, area, distance, offset_curve, translate, extend, scale, rotate, bounds_width transformation affine_transform reference affine_transform, bounds, bounds_height, single_sided_buffer, x_max, y_max, x_min, y_min, buffer, length3D, perimeter, area, distance, offset_curve, translate, extend, scale, rotate, bounds_width offset affine_transform system affine_transform, bounds, bounds_height, single_sided_buffer, x_max, y_max, x_min, y_min, buffer, env, length3D, perimeter, area, offset_curve, translate, extend, scale, rotate, bounds_width calculations affine_transform, bounds, bounds_height, pi, x_max, y_max, x_min, y_min, buffer, length3D, perimeter, area, translate, scale, rotate, bounds_width translation affine_transform rotation affine_transform order affine_transform, regexp_matches, array_reverse, age, reverse added affine_transform, array_prepend, array_append, array_insert, current_parent_value, map_insert, array_prioritize, current_value present affine_transform, array_prioritize scale affine_transform, $scale aggregate aggregate, count_distinct, count, count_missing, mean, relation_aggregate, array_to_string, stdev, range, sum, minority, max_length, maximum, median, minimum, majority combine aggregate features aggregate, count, sqlite_fetch_and_increment, relation_aggregate, overlay_nearest, num_selected, current_parent_value, overlay_intersects, overlay_contains, overlay_touches, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint, current_value calculated aggregate, $length, $perimeter, q1, iqr, q3 merge aggregate, map_to_hstore concatenate aggregate, map_concat sum aggregate, array_sum mean aggregate, array_mean, mean, levenshtein median aggregate, array_median, array_majority, array_minority, median count aggregate, count_distinct, count, count_missing, num_geometries, length, array_length, min_length, max_length, num_interior_rings quartile aggregate, q1, iqr, q3 minimum aggregate, array_min, z_min, x_min, y_min, levenshtein, minimal_circle, range, convex_hull, min, min_length, wordwrap, minimum, m_min, distance, rand, randf maximum aggregate, array_max, z_max, x_max, y_max, range, max_length, max, maximum, densify_by_distance, m_max, wordwrap, rand, randf minority aggregate, minority majority aggregate, majority standard aggregate, stdev, hausdorff_distance deviation aggregate, stdev length aggregate, sinuosity, hamming_distance, length, $length, $perimeter, hausdorff_distance, min_length, max_length, lpad, rpad, length3D, tapered_buffer unique aggregate, concatenate_unique, uuid distinct count_distinct, array_distinct matching count, get_feature, relation_aggregate, soundex, hausdorff_distance, layer_property, regexp_match, strpos missing count_missing, array_prioritize aggregated concatenate, collect, concatenate_unique, array_agg field concatenate, concatenate_unique, array_agg, attributes, represent_value, stdev, current_parent_value, q1, iqr, range, sum, minority, majority, current_value, q3 joined concatenate, concatenate_unique delimiter concatenate, concatenate_unique, array_to_string, string_to_array strings concatenate, concatenate_unique, regexp_matches, replace, soundex, format_date, hamming_distance, levenshtein, concat, min_length, max_length, map_credits, longest_common_substring, create_ramp multipart collect, num_geometries, geometry_n algorithm parameter, soundex, simplify_vw, simplify parameter parameter, sqlite_fetch_and_increment, ILIKE, LIKE, hausdorff_distance, array processing parameter, $geometry alpha set_color_part, color_hsva, color_hsla, color_cmyka, color_rgba, color_mix_rgb, color_part component set_color_part, color_part specific set_color_part, env, geometry_n, color_part, point_n red set_color_part, color_rgba, color_mix_rgb, color_rgb, color_part color set_color_part, color_hsva, color_hsla, color_hsv, color_hsl, color_cmyka, color_cmyk, darker, lighter, color_grayscale_average, color_rgba, color_mix_rgb, color_rgb, create_ramp, ramp_color, color_part, project_color sets set_color_part, hausdorff_distance angle cos, acos, tan, angle_at_vertex, line_interpolate_angle, azimuth, main_angle, sin, asin, atan2, atan cosine cos, acos inverse acos, asin, atan2, atan radians acos, degrees, radians, project, azimuth, asin, atan tangent tan, atan2, atan angles angle_at_vertex, line_interpolate_angle specified angle_at_vertex, sqlite_fetch_and_increment, line_substring, extrude, apply_dash_pattern, line_interpolate_angle, line_interpolate_point, line_locate_point, hausdorff_distance, distance_to_vertex, scale_exp, pole_of_inaccessibility, lpad, rpad, densify_by_distance, rand, randf, array_prioritize, clamp, is_layer_visible, extend, var, day_of_week clockwise angle_at_vertex, force_rhr, line_interpolate_angle, force_polygon_ccw, force_polygon_cw, azimuth, main_angle linestring angle_at_vertex, single_sided_buffer, extrude, line_interpolate_angle, straight_distance_2d, line_interpolate_point, length, $length, line_locate_point, line_merge, offset_curve, extend degrees angle_at_vertex, degrees, radians, line_interpolate_angle, main_angle bisector angle_at_vertex north angle_at_vertex, line_interpolate_angle, azimuth, main_angle average angle_at_vertex, mean vertex angle_at_vertex, $vertex_x, $vertex_y, straight_distance_2d, distance_to_vertex, $vertex_index, end_point, $vertex_z, $vertex_as_point, point_n, nodes_to_points array array_prepend, array_append, array_insert, array_median, array_distinct, array_all, array_slice, array_intersect, array_remove_all, array_agg, array_first, array_find, regexp_matches, array_mean, array_sum, array_filter, array_last, map_avals, map_akeys, array_replace, replace, array_max, array_min, [], array_get, array_remove_at, array_reverse, array_majority, array_minority, overlay_nearest, array_length, array_foreach, to_json, overlay_intersects, overlay_contains, overlay_touches, array, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint, generate_series, array_sort, array_prioritize beginning array_prepend, line_substring end array_append, array_slice, CASE, line_substring, close_line, is_closed, array_prioritize, extend, shortest_line position array_insert, array_slice, array_get, line_locate_point, regexp_match, strpos arithmetic array_median, array_mean, array_sum ignored array_median, array_mean, array_sum containing array_distinct, attributes, array_cat, map_concat, array, map, generate_series contains array_all, Meshes, left, right, overlay_contains, contains, within compare array_all, ILIKE, IS NOT, IS, LIKE, nullif search array_all, get_feature defined array_slice, intersects_bbox arguments array_slice, represent_attributes, display_expression, maptip, format, coalesce, is_selected, atan2 start array_slice, line_substring, project, is_closed, extend, shortest_line slice array_slice portion array_slice, line_substring, regexp_substr, intersects, intersection index array_slice, array_find, [], array_get, array_remove_at, $vertex_index element array_intersect, [] exists array_intersect, map_insert, map_exist, map_get, file_exists intersection array_intersect, relate overlap array_intersect, intersection entries array_remove_all, map_concat removed array_remove_all, array_remove_at first array_first, array_find, array_get, get_feature, CASE, ascii, ILIKE, LIKE, straight_distance_2d, q1, start_point, close_line, $x, $y, $z, left, coalesce, regexp_match, array_prioritize, extend, strpos found array_find, IN, env, raster_value, regexp_match, strpos lowest array_find groups regexp_matches capturing regexp_matches captured regexp_matches appear regexp_matches supplied regexp_matches, array_replace, replace, crosses, ILIKE, LIKE, format, regexp_substr, regexp_replace regular regexp_matches, make_regular_polygon, regexp_substr, regexp_replace, regexp_match, ~ numeric array_mean, array_sum items array_filter limit array_filter evaluates array_filter, <=, >=, =, <>, eval, eval_template, >, < last array_last, array_get, straight_distance_2d, end_point, right, extend map map_avals, map_akeys, array_replace, replace, [], sqlite_fetch_and_increment, represent_attributes, attributes, map_concat, map_delete, $scale, represent_value, url_encode, map_to_hstore, hstore_to_map, to_json, $map, item_variables, map_credits, map_insert, map_exist, map_get, create_ramp, map, map_prefix_keys keys map_akeys, represent_attributes, attributes, map, map_prefix_keys replaced array_replace, replace, regexp_replace operator [] nth array_get one array_get, densify_by_count, densify_by_distance reversed array_reverse, flip_coordinates associated char, ascii character char, ascii, levenshtein, hash, lpad, rpad, ~ unicode char, ascii, regexp_match code char, ascii, soundex attribute attribute, get_feature, represent_attributes, current_parent_value, current_value find get_feature, pole_of_inaccessibility attributes color_hsva, color_hsla, sqlite_fetch_and_increment, color_hsv, represent_attributes, color_hsl, attributes transparency color_hsva, color_hsla hue color_hsva, color_hsla, color_hsv, color_hsl representation color_hsva, color_hsla, color_hsv, represent_attributes, color_hsl, soundex, geom_from_wkb, color_cmyka, color_cmyk, represent_value, relate, color_grayscale_average, color_rgba, color_rgb, geom_from_gml, geom_from_wkt, geom_to_wkt, geom_to_wkb saturation color_hsva, color_hsla, color_hsv, color_hsl lightness color_hsla, color_hsl children sqlite_fetch_and_increment applied sqlite_fetch_and_increment uncommitted sqlite_fetch_and_increment works sqlite_fetch_and_increment, LIKE, num_selected relations sqlite_fetch_and_increment prefetched sqlite_fetch_and_increment intended sqlite_fetch_and_increment creating sqlite_fetch_and_increment several sqlite_fetch_and_increment, concat auto_increment sqlite_fetch_and_increment form sqlite_fetch_and_increment, url_encode, current_parent_value, current_value databases sqlite_fetch_and_increment transaction sqlite_fetch_and_increment parents sqlite_fetch_and_increment filter_value sqlite_fetch_and_increment mode sqlite_fetch_and_increment open sqlite_fetch_and_increment primary sqlite_fetch_and_increment evaluate sqlite_fetch_and_increment, CASE sidenote sqlite_fetch_and_increment add sqlite_fetch_and_increment require sqlite_fetch_and_increment, pole_of_inaccessibility impossible sqlite_fetch_and_increment default_values sqlite_fetch_and_increment table sqlite_fetch_and_increment, current_value insert sqlite_fetch_and_increment nice sqlite_fetch_and_increment formats sqlite_fetch_and_increment, format_date current sqlite_fetch_and_increment, $vertex_x, $vertex_y, $geometry, $x_at, $y_at, $scale, overlay_nearest, $length, $perimeter, current_parent_value, $x, $y, $z, $vertex_index, overlay_intersects, $map, $page, overlay_contains, overlay_touches, $vertex_z, $vertex_as_point, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint, to_date, to_datetime, $id, $rownum, now, current_value get sqlite_fetch_and_increment target sqlite_fetch_and_increment, overlay_nearest, overlay_intersects, overlay_contains, overlay_touches, lpad, rpad, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint work sqlite_fetch_and_increment usage sqlite_fetch_and_increment, map_credits columns sqlite_fetch_and_increment retrieved sqlite_fetch_and_increment autoincrementing sqlite_fetch_and_increment new sqlite_fetch_and_increment, densify_by_count, densify_by_distance limitation sqlite_fetch_and_increment gpkg sqlite_fetch_and_increment parallel sqlite_fetch_and_increment, line_interpolate_angle, hausdorff_distance database sqlite_fetch_and_increment additional sqlite_fetch_and_increment, densify_by_distance, to_time, to_date, to_datetime makes sqlite_fetch_and_increment postgres sqlite_fetch_and_increment modifies sqlite_fetch_and_increment sequence sqlite_fetch_and_increment, generate_series cached sqlite_fetch_and_increment manage sqlite_fetch_and_increment key sqlite_fetch_and_increment, map_concat, map_delete, map_insert, map_exist, map_get id_field sqlite_fetch_and_increment acquire sqlite_fetch_and_increment filtered sqlite_fetch_and_increment default sqlite_fetch_and_increment, hausdorff_distance, display_expression, maptip, num_selected, format_number, to_date, to_datetime filter_attribute sqlite_fetch_and_increment parent sqlite_fetch_and_increment, current_parent_value option sqlite_fetch_and_increment unsafe sqlite_fetch_and_increment sqlite sqlite_fetch_and_increment separate sqlite_fetch_and_increment, string_to_array row sqlite_fetch_and_increment, uuid, $id, $rownum, current_value configurations sqlite_fetch_and_increment lifetime sqlite_fetch_and_increment processes sqlite_fetch_and_increment incremented sqlite_fetch_and_increment able sqlite_fetch_and_increment purpose sqlite_fetch_and_increment see represent_attributes, configured represent_attributes, represent_value names represent_attributes, attributes type represent_attributes, format_date, represent_value, geometry_type, mime_type, to_interval, is_multipart details represent_attributes, display_expression, maptip, is_selected depends represent_attributes, represent_value, decode_uri, env widget represent_attributes, represent_value, current_parent_value base log, log10, from_base64, to_base64, base_file_name logarithm log, log10, ln behavior different concat joins box bounds, bounds_height, intersects_bbox, oriented_bbox, bounds_width represents bounds, minimal_circle, convex_hull, oriented_bbox, difference, sym_difference, intersection, union bounding bounds, bounds_height, intersects_bbox, oriented_bbox, main_angle, bounds_width height bounds_height tests intersects_bbox, crosses, relate, contains, touches, disjoint, intersects, overlaps, within, if overlaps intersects_bbox, intersects, overlaps intersect intersects_bbox, difference, touches, sym_difference, disjoint, intersects buffer wedge_buffer, buffer_by_m, tapered_buffer wedge wedge_buffer point wedge_buffer, x, y, closest_point, geometry_type, project, line_interpolate_point, line_locate_point, close_line, $x, $y, $z, exif_geotag, pole_of_inaccessibility, contains, make_point, touches, make_point_m, z, make_line, m, $vertex_as_point, point_on_surface, raster_value, union originating wedge_buffer shaped wedge_buffer buffering single_sided_buffer formed single_sided_buffer, is_valid, offset_curve distances single_sided_buffer, line_substring, levenshtein, offset_curve, extend side single_sided_buffer, offset_curve calculate Meshes, pole_of_inaccessibility functions Meshes, $geometry, age return Meshes, CASE, line_merge, regexp_match, try, strpos mesh Meshes, $vertex_x, $vertex_y, $vertex_index, $vertex_z, $vertex_as_point related Meshes pi pi casewhen CASE clause CASE series CASE, make_polygon, make_line met CASE corresponding CASE, map_delete, hamming_distance, line_locate_point none CASE evaluated CASE, display_expression, maptip, array_foreach, num_selected components CASE, color_cmyka, color_cmyk, color_rgba, color_rgb conditions CASE optional CASE, hausdorff_distance, make_point, make_polygon, to_time, to_date, to_datetime marks CASE evaluation CASE, with_variable else CASE case CASE, ILIKE, lower, upper, hamming_distance, levenshtein, title, longest_common_substring stops CASE condition CASE, AND, OR, NOT, nullif, if set CASE, convex_hull, env, collect_geometries, union centroid x, y, point_on_surface child relation_aggregate relation relation_aggregate, current_parent_value circular make_circle polygon make_circle, force_rhr, geometry_type, $perimeter, densify_by_count, interior_ring_n, densify_by_distance, make_polygon, perimeter, area, make_ellipse, exterior_ring, boundary, roundness, make_regular_polygon, num_interior_rings, num_rings, make_triangle closest closest_point, line_locate_point, hausdorff_distance nearest closest_point represented soundex, hash similar soundex, levenshtein, hausdorff_distance soundex soundex phonetic soundex sounds soundex collection num_geometries, geometry_n, num_interior_rings, num_rings parts num_geometries, order_parts, extend combination combine union combine, union common array_majority, array_minority, crosses, longest_common_substring, touches crosses crosses, overlay_crosses interior crosses, force_rhr, force_polygon_ccw, force_polygon_cw, interior_ring_n, contains, num_interior_rings points crosses, buffer, contains, azimuth, is_closed, boundary, make_rectangle_3points, inclination numbers ILIKE, LIKE, to_real, concat, make_time, make_datetime, generate_series, make_date insensitive ILIKE match ILIKE, length3D, perimeter, ~ sensitive ILIKE, LIKE, hamming_distance, levenshtein, longest_common_substring matches ILIKE, LIKE, regexp_substr pattern ILIKE, LIKE, apply_dash_pattern equal IS, <=, >=, =, <>, buffer, hausdorff_distance, overlay_equals identical IS compares <=, >=, =, <>, >, < less <=, < left <=, >=, >, <, lpad right <=, >=, force_rhr, >, <, rpad greater >=, > concatenated array_cat arrays array_cat concatenates array_to_string, concat join array_to_string, buffer consisting segments_to_lines segment segments_to_lines, hausdorff_distance, extend multi segments_to_lines, extrude, close_line, collect_geometries, is_multipart line segments_to_lines, line_substring, apply_dash_pattern, geometry_type, reverse, close_line, densify_by_count, buffer_by_m, densify_by_distance, length3D, make_line, is_closed, exterior_ring, extend, shortest_line, tapered_buffer maps map_concat contexts force_rhr, $scale boundary force_rhr, pole_of_inaccessibility, boundary, triangular_wave_randomized, triangular_wave, square_wave, square_wave_randomized, wave, wave_randomized rings force_rhr, force_polygon_ccw, force_polygon_cw, num_interior_rings, num_rings bounded force_rhr force_polygon_cw force_rhr explicit force_rhr area force_rhr, area, simplify_vw exterior force_rhr, force_polygon_ccw, force_polygon_cw, contains, exterior_ring, num_rings inconsistency force_rhr use force_rhr hand force_rhr particular force_rhr respect force_rhr, force_polygon_ccw, force_polygon_cw counter force_rhr, force_polygon_ccw, force_polygon_cw forces force_rhr, force_polygon_ccw, force_polygon_cw ring force_rhr, apply_dash_pattern, interior_ring_n, make_polygon, exterior_ring, boundary recommended force_rhr oriented force_rhr, oriented_bbox, main_angle direction force_rhr, reverse rule force_rhr definition force_rhr, env converts degrees, radians, to_int, lower, to_dm, to_decimal, to_dms, to_string, to_real, upper, title, to_time, to_date, to_datetime, to_interval invalid to_int, to_real converted to_int, to_real, concat, url_encode, datetime_from_epoch integer to_int, rand letters lower, upper, env lower lower, hausdorff_distance, title minute to_dm, to_decimal, to_dms, make_time, make_datetime, make_interval degree to_dm, to_decimal, to_dms equivalent to_decimal second to_decimal, to_dms, make_time, make_datetime, array_prioritize decimal to_decimal, format_number, round number to_string, day, month, floor, hour, second, densify_by_count, minute, ceil, round, $rownum, simplify, week, year precision to_real rounded to_real, wave changes to_real real to_real saving to_real conversion to_real, geom_from_wkb, geom_from_gml, geom_from_wkt, geom_to_wkt, geom_to_wkb smaller to_real, levenshtein, lpad, rpad upper upper created geom_from_wkb wkb geom_from_wkb, geom_to_wkb binary geom_from_wkb, from_base64, to_base64, mime_type, geom_to_wkb known geom_from_wkb, geom_from_wkt, geom_to_wkt, geom_to_wkb createuuid uuid generates uuid, densify_by_count, densify_by_distance method uuid, hausdorff_distance, hash quuid uuid identifier uuid criteria order_parts multigeometry order_parts orders order_parts given order_parts, scale_exp, hash, scale_linear crs transform source transform transformed transform destination transform reprojection transform retrieves $x_at, $y_at, exif feature $x_at, $y_at curve sinuosity, line_substring, extrude, straight_distance_2d, scale_exp distance sinuosity, line_interpolate_angle, straight_distance_2d, project, buffer, line_interpolate_point, overlay_nearest, hamming_distance, length, $length, $perimeter, line_locate_point, levenshtein, hausdorff_distance, distance_to_vertex, densify_by_distance, length3D, perimeter, simplify endpoints sinuosity sinuosity sinuosity ratio sinuosity, color_mix_rgb straight sinuosity, simplify_vw, simplify measured line_substring, azimuth, inclination falls line_substring existing line_substring interpolated line_substring, line_interpolate_point version extrude, scale, rotate extension extrude, file_name, file_suffix extruded extrude custom format_date uses format_date, pole_of_inaccessibility format format_date, format, to_time, to_date, to_datetime time format_date, hour, second, make_time, minute, datetime_from_epoch, to_time, now date format_date, day, month, epoch, datetime_from_epoch, to_date, now, to_interval, day_of_week, week, make_date, year qdatetime format_date tostring format_date cyan color_cmyka, color_cmyk black color_cmyka, color_cmyk yellow color_cmyka, color_cmyk darker darker, lighter lighter darker, lighter dash apply_dash_pattern stroked apply_dash_pattern multilinestring apply_dash_pattern, line_merge, extend applies apply_dash_pattern, color_grayscale_average returning apply_dash_pattern extracts day, month, hour, second, left, minute, week, year interval day, month, age, hour, second, epoch, densify_by_distance, make_interval, minute, to_interval, week, year days day, make_interval, to_interval day day, make_datetime, day_of_week, make_date months month part month, hour, second, minute, substr, geometry_n, difference, collect_geometries, year month month, make_datetime, make_interval, to_interval, make_date deleted map_delete denominator $scale canvas $scale, $map widgets represent_value layer decode_uri, densify_by_count, densify_by_distance data decode_uri, mime_type dataprovider decode_uri provider decode_uri uri decode_uri underlying decode_uri, overlay_intersects, overlay_contains, overlay_touches, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint decodes decode_uri, from_base64 available decode_uri describing geometry_type difference age needs age datetimes age extract age information age following age dates age yearmonthweekdayhourminutesecond age dimensional relate relationship relate extended relate, extend model relate vertices reverse, densify_by_count, buffer_by_m, densify_by_distance, simplify_vw, simplify, num_points reverses reverse reversing reverse circularstring straight_distance_2d direct straight_distance_2d euclidean straight_distance_2d elevation project projected project, distance azimuth project, azimuth bearing project, extend segments buffer, simplify_vw, simplify miter buffer cap buffer along line_interpolate_point, line_locate_point layers overlay_nearest, map_credits large overlay_nearest, hausdorff_distance, simplify slow overlay_nearest lot overlay_nearest hamming hamming_distance equates hamming_distance, levenshtein, NULL characters hamming_distance, length, url_encode, left, right, min_length, max_length, wordwrap, ~ comparison hamming_distance positions hamming_distance planimetric length, $length, $perimeter, length3D, perimeter, area perimeter $length, $perimeter, perimeter project $length, $perimeter, length3D, perimeter, area, project_color settings $length, $perimeter, length3D, perimeter, area ellipsoid $length, $perimeter, length3D, perimeter, area border $length setting $length, $perimeter required levenshtein edit levenshtein indicate levenshtein similarity levenshtein, hausdorff_distance insertions levenshtein measure levenshtein, hausdorff_distance, m_max, m_min, m change levenshtein substitutions levenshtein edits levenshtein larger levenshtein, densify_by_count deletions levenshtein levenshtein levenshtein dissimilar hausdorff_distance densify hausdorff_distance linestrings hausdorff_distance, line_merge, boundary other hausdorff_distance, concat, to_json total hausdorff_distance close hausdorff_distance, roundness executed hausdorff_distance specifying hausdorff_distance occurs hausdorff_distance fraction hausdorff_distance testing hausdorff_distance discrete hausdorff_distance linear hausdorff_distance, scale_linear approximate hausdorff_distance, pole_of_inaccessibility split hausdorff_distance, string_to_array make hausdorff_distance approach hausdorff_distance, pole_of_inaccessibility examples hausdorff_distance provided hausdorff_distance, color_grayscale_average, color_mix_rgb, to_time, to_date, to_datetime, raster_value, rand, randf, try, array_sort performs hausdorff_distance, ~ insufficient hausdorff_distance networks hausdorff_distance specify hausdorff_distance decreasing hausdorff_distance approximation hausdorff_distance cases hausdorff_distance densification hausdorff_distance computing hausdorff_distance argument hausdorff_distance, rand, randf, with_variable subsegments hausdorff_distance hausdorff hausdorff_distance exact hausdorff_distance indicating hausdorff_distance subset hausdorff_distance division %, / remainder % downwards floor rounds floor, ceil, round dynamic eval, eval_template fields eval, eval_template parameters eval, eval_template, map expression eval, ~ expand eval, eval_template context eval, eval_template, current_parent_value passed eval, eval_template, datetime_from_epoch, map, line_merge variables eval, eval_template, item_variables, env template eval_template elements array_length, map_to_hstore, array_sort empty concat, is_empty_or_null, is_empty is_empty is_empty_or_null coordinates is_empty_or_null, is_empty, flip_coordinates false is_empty_or_null, is_empty, is_closed is_empty_or_null is_empty enclosing minimal_circle minimal minimal_circle, oriented_bbox, main_angle encloses minimal_circle, convex_hull circle minimal_circle, roundness smallest minimal_circle, min encoded url_encode producing url_encode query url_encode plus url_encode url url_encode compliant url_encode sign url_encode transforms url_encode, scale_exp, scale_linear encoding from_base64, to_base64 encodes to_base64 display display_expression maptip maptip iterate array_foreach item array_foreach, $map, item_variables, map_credits selected num_selected, is_selected exif exif, exif_geotag tag exif file exif, file_name, file_suffix, exif_geotag, file_path, file_exists, is_file, file_size, base_file_name image exif, exif_geotag exponential exp, scale_exp ease scale_exp domain scale_exp, scale_linear range scale_exp, iqr, range, rand, randf, clamp, scale_linear name file_name, file_path, base_file_name directory file_name, is_directory, file_path, base_file_name path file_name, file_suffix, env, is_directory, file_path, file_exists, is_file, base_file_name suffix file_suffix, base_file_name convention force_polygon_ccw, force_polygon_cw hours hour, make_interval, to_interval hour hour, make_time, make_datetime datetime hour, second, make_datetime, minute, datetime_from_epoch, to_datetime, day_of_week seconds second, make_interval actual current_parent_value, current_value unsaved current_parent_value, current_value wrapped current_parent_value, wordwrap retrieve current_parent_value differ current_parent_value, current_value edited current_parent_value, current_value embedded current_parent_value coalesce current_parent_value filter current_parent_value, color_grayscale_average usable current_parent_value inter iqr statistics iqr, raster_statistic aggregates iqr summed sum grayscale color_grayscale_average node start_point, end_point, point_n, nodes_to_points closed close_line, is_closed appending close_line multipoint $x, $y, $z, nodes_to_points altitude $z 3D $z substring left, right, longest_common_substring, regexp_match, strpos leftmost left formatted map_to_hstore, hstore_to_map, to_json, format_number, from_json hstore map_to_hstore, hstore_to_map json to_json, from_json create to_json, simplify_vw truncates format_number places format_number, round separator format_number thousands format_number locale format_number language format_number original densify_by_count geometric centroid center centroid geotags exif_geotag green color_rgba, color_mix_rgb, color_rgb blue color_rgba, color_mix_rgb, color_rgb mixing color_mix_rgb colors color_mix_rgb hash md5, sha256, hash hex hash bytes hash, file_size byte hash digits hash long hash, main_angle bits hash produces hash hull convex_hull convex convex_hull inaccessibility pole_of_inaccessibility precise pole_of_inaccessibility tolerances pole_of_inaccessibility calculates pole_of_inaccessibility, length3D, roundness guaranteed pole_of_inaccessibility true pole_of_inaccessibility iterations pole_of_inaccessibility internal pole_of_inaccessibility polylabel pole_of_inaccessibility distant pole_of_inaccessibility pole pole_of_inaccessibility take pole_of_inaccessibility, to_interval surface pole_of_inaccessibility, area, point_on_surface tolerance pole_of_inaccessibility iterative pole_of_inaccessibility hole interior_ring_n intersected overlay_intersects least overlay_intersects, minority, overlay_contains, overlay_touches, min predicate overlay_intersects, overlay_contains, overlay_touches, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint geos overlay_intersects, overlay_contains, overlay_touches, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint postgis overlay_intersects, overlay_contains described overlay_intersects, overlay_contains, overlay_touches, overlay_within, overlay_equals, overlay_crosses, overlay_disjoint st_intersects overlay_intersects intersects overlay_intersects, intersects milliseconds epoch, datetime_from_epoch epoch epoch loads from_json rightmost right latitude flip_coordinates longitude flip_coordinates swapped flip_coordinates repairing flip_coordinates copy flip_coordinates layout $map, item_variables, $page, map_credits drawn $map main $map print $map, item_variables, $page window $map overview $map page $page occurring minority, majority contained overlay_contains, IN, overlaps st_contains overlay_contains touches overlay_touches, touches touched overlay_touches st_touches overlay_touches padded lpad, rpad width lpad, rpad, bounds_width truncated lpad, rpad fill lpad, rpad letter title words title leading title, trim capital title title title lie contains, point_on_surface lies contains within contains according buffer_by_m, is_valid varies buffer_by_m, tapered_buffer diameter buffer_by_m, tapered_buffer list array, IN, coalesce, map_credits rights map_credits credit map_credits longest max, longest_common_substring biggest max most max largest max overridden map_insert gradient create_ramp steps create_ramp ramp create_ramp, ramp_color edges densify_by_distance densified densify_by_distance multiline wordwrap vertical azimuth year make_datetime, make_interval, make_date, year weeks make_interval, week minutes minute multiplication * natural ln negates NOT operating env content env prefixes env gets env drive env check env, if environment env inject env configuration env administrator env variable env, var, with_variable documentation env, to_time, to_date, to_datetime handy env covers main_angle rectangle main_angle, make_rectangle_3points axis main_angle outer make_polygon inner make_polygon clip difference collects collect_geometries object collect_geometries, length3D, perimeter, to_time, to_date, to_datetime localtime datetime_from_epoch msecs datetime_from_epoch coordinated datetime_from_epoch universal datetime_from_epoch pair map single line_merge merged line_merge connected line_merge folder is_directory, file_path, base_file_name differs length3D, perimeter units length3D, perimeter, area, distance interiors touches overlay point_on_surface coincident is_closed elliptical make_ellipse representing exterior_ring, ramp_color instance boundary combinatorial boundary topological boundary collections boundary types boundary closure boundary perfect roundness flat roundness shape roundness portions sym_difference power ^ equals overlay_equals, nullif st_equals overlay_equals st_crosses overlay_crosses crossed overlay_crosses st_disjoint overlay_disjoint disjoint overlay_disjoint prefixed map_prefix_keys property layer_property metadata layer_property parse to_time, to_date, to_datetime fromstring to_time, to_date, to_datetime qtime to_time, to_datetime user to_date, to_datetime format_date to_date, to_datetime qdate to_date, to_datetime raster raster_value, raster_statistic random rand, randf inclusive rand, randf seed rand, randf depending rand, randf, if float randf removes trim, simplify_vw whitespace trim spaces trim tabs trim trailing trim tries try error try alternative try exception try holes num_interior_rings, num_rings including num_rings root sqrt square sqrt, make_square, square_wave, square_wave_randomized rules is_valid valid is_valid ogc is_valid scheme project_color share disjoint, intersects, overlaps space disjoint, intersects, overlaps, ~ dimension overlaps shared intersection sine sin, asin, wave, wave_randomized size file_size sorted array_sort, array_prioritize ordering array_prioritize offsetting offset_curve translated translate displace translate move translate restricts clamp visible is_layer_visible spikes simplify_vw areas simplify_vw simplifies simplify_vw, simplify narrow simplify_vw visvalingam simplify_vw threshold simplify_vw, simplify removing simplify_vw, simplify based simplify_vw, simplify small simplify_vw convert string_to_array divides string_to_array diagonal make_square amount extend lines extend extends extend resultant shortest_line joining shortest_line shortest shortest_line static now evaluating now stored var deviations simplify reduces simplify preserves simplify substitute nullif subtraction - signs atan2 quadrant atan2 completely within conditional if text geom_from_wkt, geom_to_wkt wkt geom_from_wkt, geom_to_wkt srid geom_to_wkt third q3 interpolation scale_linear triangle make_triangle dissolve union value with_variable scaled scale rotated rotate waves triangular_wave_randomized, triangular_wave, square_wave, square_wave_randomized, wave, wave_randomized constructs triangular_wave_randomized, triangular_wave, square_wave, square_wave_randomized, wave, wave_randomized randomized triangular_wave_randomized, square_wave_randomized, wave_randomized triangular triangular_wave_randomized, triangular_wave rectangular square_wave, square_wave_randomized curved wave_randomized week day_of_week, week corresponds day_of_week ranges day_of_week saturday day_of_week white ~ backslash ~ escaped ~ years year zenith inclination nadir inclination inclination inclination
  1. >= QGIS 3.24 \u21a9

"},{"location":"gr_funzioni/aggrega/aggrega_unico/","title":"Gruppo Aggrega","text":"

Abstract

Contiene funzioni che aggregano valori nei livelli e campi.

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#aggregate","title":"aggregate","text":"

Restituisce un valore aggregato calcolato usando elementi da un altro vettore.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

aggregate(layer:='rail_stations',aggregate:='sum',expression:=\"passengers\") \u2192 somma tutti i valori per il campo passengers nel layer rail_stations\naggregate('rail_stations','sum', \"passengers\"/7) \u2192 calcola la media giornaliera di \"passengers\" dividendo il campo \"passengers\" per 7 prima di sommare i valori\naggregate(layer:='rail_stations',aggregate:='sum',expression:=\"passengers\",filter:=\"class\">3) \u2192 somma tutti i valori per il campo \"passengers\" soltanto dagli elementi geometrie dove l'attributo \"class\" \u00e8 maggiore di 3\naggregate(layer:='rail_stations',aggregate:='concatenate', expression:=\"name\", concatenator:=',') \u2192 elenco separato da virgole del campo name per tutti gli elementi nel vettore rail_stations\naggregate(layer:='countries', aggregate:='max', expression:=\"code\", filter:=intersects( $geometry, geometry(@parent) ) ) \u2192 Il codice Paese di un Paese di intersezione nel vettore 'countries'\naggregate(layer:='stazioni_rotaie',aggregate:='sum',expression:=\"viaggiatori\",filter:=contains( @atlas_geometry, $geometry ) ) \u2192 somma tutti i valori del campo viaggiatori in rail_stations all'interno dell'elemento atlante corrente\naggregate(layer:='rail_stations', aggregate:='collect', expression:=centroid($geometry), filter:=\"region_name\" = attribute(@parent,'name') ) \u2192 aggrega le geometrie dei centroidi delle stazioni ferroviarie della stessa regione dell'elemento corrente\n

Osservazioni

i nomi dei layer vanno scritti tra apici semplici ('nome_layer') mentre i nomi dei campi con doppi apici (\"nome_campo\")

Altri esempi:

Come realizzare una spatial-join con aggregazione usando solo il calcolatore di campi qui

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#array_agg","title":"array_agg","text":"

Restituisce un array di valori aggregati da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

array_agg( \"DEN_PCM\" ,group_by:= \"COD_REG\" ) \u2192 lista di valori del \"DEN_PCM\", ragguppata per il campo \"COD_REG\"\n

Nota bene

Per prendere un valore specifico dell'array:

- array_agg(\"z\")[0] \u2192 148,03 \u00e8 il primo valore dell'array, indice 0;\n- array_agg(\"z\")[1] \u2192 164,21 \u00e8 il secondo valore dell'array, indice 1;\n- ecc...\n

dove \"z\" \u00e8 un attributo

Osservazioni:

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#collect","title":"collect","text":"

Restituisce la geometria a parti multiple di geometrie aggregate da una espressione

Sintassi:

Argomenti:

Esempi:

collect( $geometry ) \u2192 geometria a parti multiple delle geometrie aggregate\ncollect( centroid($geometry), group_by:=\"region\", filter:= \"use\" = 'civilian' ) \u2192 centroidi aggregati degli elementi civili basati sul relativo valore regionale\n

--

estrae i bounding box, uno per ogni geometria:

estrae il bounding box, dopo aver unito tutte le geometrie:

estrae il perimetro (unico per tutte le geometrie), dopo aver unito tutte le geometrie:

buffer(collect($geometry),0)\n

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#concatenate","title":"concatenate","text":"

Restituisce tutte le stringhe aggregate da un campo o un'espressione unite da un separatore.

Sintassi:

Argomenti:

[ ] indica componenti opzionali

Esempi:

concatenate(\"town_name\",group_by:=\"state\",concatenator:=',') \u2192 lista separata da virgola di town_names, raggruppata per campo state\n

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#concatenate_unique","title":"concatenate_unique","text":"

Restituisce tutte le stringhe univoche di un campo o di un'espressione unite da un delimitatore.

Sintassi:

Argomenti:

[ ] indica componenti opzionali

Esempi:

concatenate_unique(\"town_name\",group_by:=\"state\",concatenator:=',') \u2192 lista separata da virgola di town_names univoci, raggruppata per campo state\n

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#count","title":"count","text":"

Restituisce il conteggio degli elementi corrispondenti.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

count(\"stations\",group_by:=\"state\") \u2192 conta le stazioni, raggruppate per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. count(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. count(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#count_distinct","title":"count_distinct","text":"

Restituisce il conteggio dei valori differenti.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

count_distinct(\"stations\",group_by:=\"state\") \u2192 conta i valori differenti delle stazioni, raggruppate per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. count_distinct(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. count_distinct(filter:= ,expression:= ,group_by:= )

--

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#count_missing","title":"count_missing","text":"

Restituisce il numero di valori nulli (NULL).

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

count_missing(\"stations\",group_by:=\"state\") \u2192 conta i valori mancanti (NULL) delle stazioni, raggruppati per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. count_missing(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. count_missing(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#iqr","title":"iqr","text":"

Restituisce lo scarto interquartile calcolato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

iqr(\"population\",group_by:=\"state\") \u2192 scarto interquartile del valore popolazione, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. iqr(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. iqr(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#majority","title":"majority","text":"

Restituisce la maggioranza aggregata di valori (valore pi\u00f9 comunemente presente) da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

majority(\"class\",group_by:=\"state\") \u2192 valore di classe pi\u00f9 comunemente presente, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. majority(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. majority(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#max_length","title":"max_length","text":"

Restituisce la lunghezza massima delle stringhe di un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

max_length(\"town_name\",group_by:=\"state\") \u2192 lunghezza massima di town_name, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. max_length(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. max_length(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#maximum","title":"maximum","text":"

Restituisce il valore massimo aggregato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

maximum(\"population\",group_by:=\"state\") \u2192 valore massimo di population, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. maximum(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. maximum(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#mean","title":"mean","text":"

Restituisce il valore medio aggregato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

mean(\"population\",group_by:=\"state\") \u2192 valore medio di population, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. mean(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. mean(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#median","title":"median","text":"

Restituisce il valore mediano aggregato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

median(\"population\",group_by:=\"state\") \u2192 mediana della popolazione, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. median(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. median(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#min_length","title":"min_length","text":"

Restituisce la lunghezza minima delle stringhe di un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

min_length(\"town_name\",group_by:=\"state\") \u2192 lunghezza minima di town_name, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. min_length(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. min_length(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#minimum","title":"minimum","text":"

Restituisce il valore minimo aggregato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

minimum(\"population\",group_by:=\"state\") \u2192 valore minimo di population, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. minimum(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. minimum(filter:= ,expression:= ,group_by:= )

Esempio:

Selezionare le Province con minor area per ogni Regione

$area = minimum(expression:=$area,group_by:=\"COD_REG\")

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#minority","title":"minority","text":"

Restituisce la minoranza aggregata di valori (valore meno comunemente presente) da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

minority(\"class\",group_by:=\"state\") \u2192 valore di classe meno presente, ragguppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. minority(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. minority(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#q1","title":"q1","text":"

Restituisce il primo quartile calcolato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

q1(\"population\",group_by:=\"state\") \u2192 primo quartile del valore popolazione, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. q1(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. q1(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#q3","title":"q3","text":"

Restituisce il terzo quartile calcolato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

q3(\"population\",group_by:=\"state\") \u2192 terzo quartile del valore popolazione, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. q3(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. q3(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#range","title":"range","text":"

Restituisce l'intervallo aggregato di valori (massimo - minimo) da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

range(\"population\",group_by:=\"state\") \u2192 intervallo di valori di popolazione, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. range(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. range(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#relation_aggregate","title":"relation_aggregate","text":"

Restituisce un valore aggregato calcolato usando tutti gli elementi figli corrispondenti da una relazione di layer.

Sintassi:

Argomenti:

Esempi:

relation_aggregate(relation:='my_relation',aggregate:='mean',expression:=\"passengers\") \u2192 valore medio di tutti gli elementi figli corrispondenti usando la relazione 'my_relation'\nrelation_aggregate('my_relation','sum', \"passengers\"/7) \u2192 somma del campo passengers diviso per 7 per tutti gli elementi figli corrispondenti usando la relazione 'my_relation' \nrelation_aggregate('my_relation','concatenate', \"towns\", concatenator:=',') \u2192 elenco separato da virgole del campo towns per tutte le geometrie figlie corrispondenti che usano la relation 'my_relation'\nrelation_aggregate('my_relation','array_agg', \"id\") \u2192 array del campo id derivato da tutti gli elementi figlio corrispondenti usando la relazione 'my_relation'\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. relation_aggregate(relation, aggregate, expression[,concatenator][,order_by])
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. relation_aggregate(filter:= ,expression:= ,group_by:= )

--

","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#stdev","title":"stdev","text":"

Restituisce il valore di deviazione standard aggregato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

stdev(\"population\",group_by:=\"state\") \u2192 deviazione standard di un valore popolazione, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. stdev(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. stdev(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/aggrega/aggrega_unico/#sum","title":"sum","text":"

Restituisce il valore sommato aggregato da un campo o espressione.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

sum(\"population\",group_by:=\"state\") \u2192 valore somma di population, raggruppato per il campo state\n

Nota bene:

La sintassi prevede due possibilit\u00e0:

  1. quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);

    1. stdev(expression, group_by, filter)
  2. con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):

    1. stdev(filter:= ,expression:= ,group_by:= )
","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/","title":"Gruppo Array","text":"

Abstract

Questo gruppo contiene funzioni espressione per la creazione e la manipolazione di array (noti anche come strutture dati ad elenco). L'ordine dei valori all'interno dell'array \u00e8 importante, al contrario della struttura dati 'a mappa', in cui l'ordine delle coppie chiave-valore \u00e8 irrilevante e i valori vengono identificati dalle loro chiavi.

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array","title":"array","text":"

Restituisce un array contenente tutti i valori passati come parametro.

Sintassi:

Argomenti:

Esempi:

array(2,10) \u2192 array: 2, 10\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_all","title":"array_all","text":"

Restituisce true se un array contiene tutti i valori di un determinato array.

Sintassi:

Argomenti:

Esempi:

array_all(array(1,2,3),array(2,3)) \u2192 vero\narray_all(array(1,2,3),array(1,2,4)) \u2192 falso\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_append","title":"array_append","text":"

Restituisce un array con il valore passato aggiunto alla fine.

Sintassi:

Argomenti:

Esempi:

array_append(array(1,2,3),4) \u2192 array: 1,2,3,4\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_cat","title":"array_cat","text":"

Restituisce un array contenente tutti gli arrays passati concatenati.

Sintassi:

Argomenti:

Esempi:

array_cat(array(1,2),array(2,3)) \u2192 array: 1,2,2,3\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_contains","title":"array_contains","text":"

Restituisce true se un array contiene il valore specificato.

Sintassi:

Argomenti:

Esempi:

array_contains(array(1,2,3),2) \u2192 true\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_count","title":"array_count","text":"

Conta il numero di occorrenze di un dato valore in un array.

Sintassi:

Argomenti:

Esempi:

array_count(array('a', 'b', 'c', 'b'), 'b') \u2192 2\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_distinct","title":"array_distinct","text":"

Restituisce un array contenente valori distinti dell'array dato.

Sintassi:

Argomenti:

Esempi:

array_distinct(array(1,2,3,2,1)) \u2192 array: 1,2,3\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_filter","title":"array_filter","text":"

Restituisce un array con solo gli elementi per i quali l'espressione restituisce true (vero).

Sintassi:

Argomenti:

Esempi:

array_filter(array(1,2,3),@element < 3) \u2192 [ 1, 2 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_find","title":"array_find","text":"

Restituisce l'indice (0 per il primo elemento) di un valore all'interno di un array. Restiuisce -1 se il valore non viene trovato

Sintassi:

Argomenti:

Esempi:

array_find(array(1,2,3),2) \u2192 1\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_first","title":"array_first","text":"

Restituisce il primo valore di un array.

Sintassi:

Argomenti:

Esempi:

array_first(array('a','b','c')) \u2192 'a'\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_foreach","title":"array_foreach","text":"

Restituisce una matrice con l'espressione data valutata su ciascun elemento.

Sintassi:

Argomenti:

Esempi:

array_foreach(array('a','b','c'),upper(@element)) \u2192 [ 'A', 'B', 'C' ]\narray_foreach(array(1,2,3),@element + 10) \u2192 [ 11, 12, 13 ]\n

Osservazioni

Funzione utile, assieme ad altre, nel compositore di stampe o nella decorazione copyright.

Tweet

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_get","title":"array_get","text":"

Restituisce l'ennesimo valore (0 per il primo) o l'ultimo -Nesimo valore (-1 per l'ultimo) di un array. Aggiornato a QGIS 3.18

Sintassi:

Argomenti:

Esempi:

array_get(array('a','b','c'),-1) \u2192 'c'\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_insert","title":"array_insert","text":"

Restituisce un array con il valore passato aggiunto nella posizione indicata.

Sintassi:

Argomenti:

Esempi:

array_insert(array(1,2,3),1,100) \u2192 [ 1, 100, 2, 3 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_intersect","title":"array_intersect","text":"

Restituisce true (vero) se almeno un elemento dell'array1 esiste in array2.

Sintassi:

Argomenti:

Esempi:

array_intersect(array(1,2,3,4),array(4,0,2,5)) \u2192 true\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_last","title":"array_last","text":"

Restituisce l'ultimo valore di un array.

Sintassi:

Argomenti:

Esempi:

array_last(array('a','b','c')) \u2192 'c'\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_length","title":"array_length","text":"

Restituisce il numero di elementi di un array.

Sintassi:

Argomenti:

Esempi:

array_length(array(1,2,3)) \u2192 3\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_majority","title":"array_majority","text":"

Restituisce i valori pi\u00f9 comuni in un array.

Sintassi:

Argomenti:

Esempi:

array_majority(array(0,1,42,42,43), 'all') \u2192 [ 42 ]\narray_majority(array(0,1,42,42,43,1), 'all') \u2192 [ 42, 1 ]\narray_majority(array(0,1,42,42,43,1), 'any') \u2192 1 or 42\narray_majority(array(0,1,1,2,2), 'median') \u2192 1.5\narray_majority(array(0,1,42,42,43), 'real_majority') \u2192 NULL\narray_majority(array(0,1,42,42,43,42), 'real_majority') \u2192 NULL\narray_majority(array(0,1,42,42,43,42,42), 'real_majority') \u2192 42\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_max","title":"array_max","text":"

Restituisce il valore massimo di un array.

Sintassi:

Argomenti:

Esempi:

array_max(array(0,42,4,2)) \u2192 42\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_mean","title":"array_mean","text":"

Restituisce la media dei valori aritmetici in un array. I valori non-numerici nell'array vengono ignorati.

Sintassi:

Argomenti:

Esempi:

array_mean(array(0,1,7,66.6,135.4)) \u2192 42.000000\narray_mean(array(0,84,'a','b','c')) \u2192 42\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_median","title":"array_median","text":"

Restituisce la mediana dei valori aritmetici in un array. I valori non-numerici nell'array vengono ignorati.

Sintassi:

Argomenti:

Esempi:

array_median(array(0,1,42,42,43)) \u2192 42\narray_median(array(0,1,2,42,'a','b')) \u2192 1.5`\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_min","title":"array_min","text":"

Restituisce il valore minimo di un array.

Sintassi:

Argomenti:

Esempi:

array_min(array(43,42,54)) \u2192 42\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_minority","title":"array_minority","text":"

Restituisce i valori meno comuni in un array.

Sintassi:

Argomenti:

Esempi:

array_minority(array(0,42,42), 'all') \u2192 [ 0 ]\narray_minority(array(0,1,42,42), 'all') \u2192 [ 0, 1 ]\narray_minority(array(0,1,42,42,43,1), 'any') \u2192 0 or 43\narray_minority(array(1,2,3,3), 'median') \u2192 1.5\narray_minority(array(0,1,42,42,43), 'real_minority') \u2192 [ 42, 43, 0, 1 ]\narray_minority(array(0,1,42,42,43,42), 'real_minority') \u2192 [ 42, 43, 0, 1 ]\narray_minority(array(0,1,42,42,43,42,42), 'real_minority') \u2192 [ 43, 0, 1 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_prepend","title":"array_prepend","text":"

Restituisce un array con il valore dato aggiunto all'inizio.

Sintassi:

Argomenti:

Esempi:

array_prepend(array(1,2,3),0) \u2192 [ 0, 1, 2, 3 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_prioritize","title":"array_prioritize","text":"

Restituisce un array ordinato usando l'ordine specificato in un altro array. I valori che sono presenti nel primo array ma assenti nel secondo array saranno aggiunti alla fine del risultato.

Sintassi:

Argomenti:

Esempi:

array_prioritize(array(1, 8, 2, 5), array(5, 4, 2, 1, 3, 8)) \u2192 [ 5, 2, 1, 8 ]\narray_prioritize(array(5, 4, 2, 1, 3, 8), array(1, 8, 6, 5)) \u2192 [ 1, 8, 5, 4, 2, 3 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_remove_all","title":"array_remove_all","text":"

Restituisce un array con tutti gli elementi del valore passato rimossi.

Sintassi:

Argomenti:

Esempi:

array_remove_all(array('a','b','c','b'),'b') \u2192 [ 'a', 'c' ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_remove_at","title":"array_remove_at","text":"

Restituisce un array con l'elemento in corrispondenza dell'indice dato rimosso. Supporta indice positivo (0 per il primo elemento) e negativo (l'ultimo -Nesimo valore, -1 per l'ultimo elemento) da >= QGIS 3.24.

Sintassi:

Argomenti:

Esempi:

array_remove_at(array(1,2,3),1) \u2192 [ 1, 3 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_replace","title":"array_replace","text":"

Restituisce un array con il valore, l'array o la mappa dei valori forniti sostituiti.

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#valore-variante-dellarray","title":"Valore & variante dell'array","text":"

Restituisce un array con il valore o con un array di valori forniti sostituito da un altro valore o da un altro array di valori.

Sintassi:

Argomenti:

Esempi:

array_replace(array('QGIS','SHOULD','ROCK'),'SHOULD','DOES') \u2192 [ 'QGIS', 'DOES', 'ROCK' ]\narray_replace(array(3,2,1),array(1,2,3),array(7,8,9)) \u2192 [ 9, 8, 7 ]\narray_replace(array('Q','G','I','S'),array('Q','S'),'-') \u2192 [ '-', 'G', 'I', '-' ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#variabile-mappa","title":"Variabile mappa","text":"

Restituisce un array con le chiavi della mappa fornite sostituite dai loro valori abbinati.

Sintassi:

Argomenti:

Esempi:

array_replace(array('APP', 'SHOULD', 'ROCK'),map('APP','QGIS','SHOULD','DOES')) \u2192 [ 'QGIS', 'DOES', 'ROCK' ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_reverse","title":"array_reverse","text":"

Restituisce l'array dato con valori dell'array in ordine inverso.

Sintassi:

Argomenti:

Esempi:

array_reverse(array(2,4,0,10)) \u2192 [ 10, 0, 4, 2 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_slice","title":"array_slice","text":"

Restituisce una porzione dell'array. Il taglio \u00e8 definito dagli argomenti start_pos e end_pos.

Sintassi:

Argomenti:

Esempi:

array_slice(array(1,2,3,4,5),0,3) \u2192 [ 1, 2, 3, 4 ]\narray_slice(array(1,2,3,4,5),0,-1) \u2192 [ 1, 2, 3, 4, 5 ]\narray_slice(array(1,2,3,4,5),-5,-1) \u2192 [ 1, 2, 3, 4, 5 ]\narray_slice(array(1,2,3,4,5),0,0) \u2192 [ 1 ]\narray_slice(array(1,2,3,4,5),-2,-1) \u2192 [ 4, 5 ]\narray_slice(array(1,2,3,4,5),-1,-1) \u2192 [ 5 ]\narray_slice(array('Dufour','Valmiera','Chugiak','Brighton'),1,2) \u2192 [ 'Valmiera', 'Chugiak' ]\narray_slice(array('Dufour','Valmiera','Chugiak','Brighton'),-2,-1) \u2192 [ 'Chugiak', 'Brighton' ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_sort","title":"array_sort","text":"

Ordina i valori in ordine crescente (usa array_reverse per desc).

Sintassi:

Argomenti:

Esempi:

array_sort(array(3,2,1)) \u2192 [ 1, 2, 3 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_sum","title":"array_sum","text":"

Restituisce la somma dei valori aritmetici in un array. I valori non-numerici nell'array vengono ignorati.

Sintassi:

Argomenti:

Esempi:

array_sum(array(0,1,39.4,1.6,'a')) \u2192 42.0\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#array_to_string","title":"array_to_string","text":"

Concatena gli elementi di un array in una stringa separata da un delimitatore usando una stringa opzionale per valori mancanti.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

array_to_string(array('1','2','3')) \u2192 '1,2,3'\narray_to_string(array(1,2,3),'-') \u2192 '1-2-3'\narray_to_string(array('1','','3'),',','0') \u2192 '1,0,3'\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#generate_series","title":"generate_series","text":"

La funzione crea una matrice contenente una sequenza di numeri, segue le stesse regole della funzione generate_series () di PostgreSQL.

Sintassi:

[ ] contrassegna componenti opzionali

Argomenti:

Esempi:

generate_series(1,5) \u2192 [ 1, 2, 3, 4, 5 ]\ngenerate_series(5,1,-1) \u2192 [ 5, 4, 3, 2, 1 ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#geometries_to_array","title":"geometries_to_array","text":"

Divide una geometria in geometrie pi\u00f9 semplici in un array.

Sintassi:

Argomenti:

Esempi:

- geometries_to_array(geom_from_wkt('GeometryCollection (Polygon ((5 8, 4 1, 3 2, 5 8)),LineString (3 2, 4 2))')) \u2192 un array di geometrie di poligoni e linee\n- geom_to_wkt(geometries_to_array(geom_from_wkt('GeometryCollection (Polygon ((5 8, 4 1, 3 2, 5 8)),LineString (3 2, 4 2))'))[0]) \u2192 'Polygon ((3 2, 3 4, 1 4, 1 2, 3 2))'\n- geometries_to_array(geom_from_wkt('MULTIPOLYGON(((5 5,0 0,0 10,5 5)),((5 5,10 10,10 0,5 5))')) \u2192 un array di due geometrie poligonali\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#regexp_matches","title":"regexp_matches","text":"

Restituisce un array di tutte le stringhe catturate dai gruppo, nell'ordine che i gruppi stessi compaiono con l'espressione regolare fornita con una stringa.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

regexp_matches('QGIS=>rocks','(.*)=>(.*)') \u2192 [ 'QGIS', 'rocks' ]\nregexp_matches('key=>','(.*)=>(.*)','empty value') \u2192 [ 'key', 'empty value' ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/array/array_unico/#string_to_array","title":"string_to_array","text":"

Divide la stringa in un array usando il delimitatore fornito e la stringa opzionale per valori mancanti.

Sintassi:

[ ] indica componenti opzionali

Argomenti:

Esempi:

string_to_array('1,2,3',',') \u2192 [ '1', '2', '3' ]\nstring_to_array('1,,3',',','0') \u2192 [ '1', '0', '3' ]\n

","tags":["gruppo"]},{"location":"gr_funzioni/campi_e_valori/campi_e_valori_unico/","title":"campi e valori","text":"

Abstract

**Contiene l'elenco dei campi del layer selezionato. Si possono ottenere valori campione con il click del tasto destro del mouse. Seleziona il nome del campo dall'elenco e fai click con il tasto destro per aprire il men\u00f9 con le opzioni per caricare un campione di valori dal campo selezionato.

Note Il caricamento dei valori dei campi da fonti online non \u00e8 supportato prima che il layer sia effettivamente inserito, ad esempio durante la creazione delle query note Il caricamento del valore del campo da layer WFS non \u00e9 supportato, prima che il layer venga inserito, ad esempio quando si costruiscono interrogazioni.

Nuove funzionalit\u00e0 introdotte in QGIS 3.28 Firenze:

","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/","title":"Gruppo Colore","text":"

Abstract

Questo gruppo contiene funzioni per manipolare i colori

","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_cmyk","title":"color_cmyk","text":"

Restituisce una rappresentazione stringa di un colore basato sui suoi componenti ciano, magenta, giallo e nero

Sintassi:

Argomenti:

Esempi:

color_cmyk(100,50,0,10) \u2192 0,115,230\n

osservazioni:

color_cmyk(100,50,0,10) = color_rgb( 0,115,230 )\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_cmyka","title":"color_cmyka","text":"

Restituisce una rappresentazione stringa di un colore basato sui suoi componenti ciano, magenta, giallo, nero e alfa (trasparenza)

Sintassi:

Argomenti:

Esempi:

color_cmyka(100,50,0,10,200) \u2192 '0,115,229,200'\n

osservazioni:

color_cmyka(100,50,0,10,200) = color_rgba(0,115,230,200)`\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_grayscale_average","title":"color_grayscale_average","text":"

Applica un filtro in scala di grigio e restituisce una rappresentazione di stringa da un colore fornito.

Sintassi:

Argomenti:

Esempi:

color_grayscale_average('255,100,50') \u2192 '135,135,135,255'\n

","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_hsl","title":"color_hsl","text":"

Restituisce una rappresentazione stringa di un colore basato sui suoi attributi tonalit\u00e0, saturazione e luminosit\u00e0.

Sintassi:

Argomenti: