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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","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 @@
array_foreach
, introdotta la variabile @counter
Aggiornata a QGIS 3.34 Prizren
Restituisce una matrice con l'espressione data valutata su ciascun elemento.
Sintassi:
@element
sarร sostituita dal valore corrente.@element
verrร sostituita dal valore corrente e la variabile @counter
dall'indice corrente (iniziando con 0).Esempi:
array_foreach(array('a','b','c'),upper(@element)) โ [ 'A', 'B', 'C' ]
array_foreach(array(1,2,3),@element + 10) โ [ 11, 12, 13 ]
+array_foreach(array(1,2,3),@elemento + @counter) โ [ 1, 3, 5 ]
Osservazioni
diff --git a/gr_funzioni/campi_e_valori/campi_e_valori_unico/index.html b/gr_funzioni/campi_e_valori/campi_e_valori_unico/index.html index 13b5ff7e6..f8bf3f539 100644 --- a/gr_funzioni/campi_e_valori/campi_e_valori_unico/index.html +++ b/gr_funzioni/campi_e_valori/campi_e_valori_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/colore/colore_unico/index.html b/gr_funzioni/colore/colore_unico/index.html index a60a56d07..0ad617e74 100644 --- a/gr_funzioni/colore/colore_unico/index.html +++ b/gr_funzioni/colore/colore_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/condizioni/condizioni_unico/index.html b/gr_funzioni/condizioni/condizioni_unico/index.html index 94cb933d3..3f5fa02f8 100644 --- a/gr_funzioni/condizioni/condizioni_unico/index.html +++ b/gr_funzioni/condizioni/condizioni_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/conversioni/conversioni_unico/index.html b/gr_funzioni/conversioni/conversioni_unico/index.html index b1fa8d23e..0109e12eb 100644 --- a/gr_funzioni/conversioni/conversioni_unico/index.html +++ b/gr_funzioni/conversioni/conversioni_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/index.html b/gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/index.html index 74ed65f3d..7c4d4e1ae 100644 --- a/gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/index.html +++ b/gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/custom/custom_unico/index.html b/gr_funzioni/custom/custom_unico/index.html index 9b04b48d5..5f5d21a44 100644 --- a/gr_funzioni/custom/custom_unico/index.html +++ b/gr_funzioni/custom/custom_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/da_documentare/index.html b/gr_funzioni/da_documentare/index.html index c0ec9c959..73ba7b181 100644 --- a/gr_funzioni/da_documentare/index.html +++ b/gr_funzioni/da_documentare/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/data_ora/data_ora_unico/index.html b/gr_funzioni/data_ora/data_ora_unico/index.html index 7e218c099..8b1f337f2 100644 --- a/gr_funzioni/data_ora/data_ora_unico/index.html +++ b/gr_funzioni/data_ora/data_ora_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/espressione_utente/espressione_utente_unico/index.html b/gr_funzioni/espressione_utente/espressione_utente_unico/index.html index dbf88b68a..d453d39a2 100644 --- a/gr_funzioni/espressione_utente/espressione_utente_unico/index.html +++ b/gr_funzioni/espressione_utente/espressione_utente_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/file_e_percorsi/file_e_percorsi_unico/index.html b/gr_funzioni/file_e_percorsi/file_e_percorsi_unico/index.html index 3e8a29e4f..0b10263bc 100644 --- a/gr_funzioni/file_e_percorsi/file_e_percorsi_unico/index.html +++ b/gr_funzioni/file_e_percorsi/file_e_percorsi_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/form/form_unico/index.html b/gr_funzioni/form/form_unico/index.html index bb8e287a1..d434c767c 100644 --- a/gr_funzioni/form/form_unico/index.html +++ b/gr_funzioni/form/form_unico/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/generale/generale_unico/index.html b/gr_funzioni/generale/generale_unico/index.html index 6e81afaf3..3e195c43d 100644 --- a/gr_funzioni/generale/generale_unico/index.html +++ b/gr_funzioni/generale/generale_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/geometria/geometria_unico/index.html b/gr_funzioni/geometria/geometria_unico/index.html index 7d498f8bc..18aa155ea 100644 --- a/gr_funzioni/geometria/geometria_unico/index.html +++ b/gr_funzioni/geometria/geometria_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/gruppo_funzioni/index.html b/gr_funzioni/gruppo_funzioni/index.html index b9087a475..78fd849aa 100644 --- a/gr_funzioni/gruppo_funzioni/index.html +++ b/gr_funzioni/gruppo_funzioni/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/lat_lon_tools/lat_lon_tools_unico/index.html b/gr_funzioni/lat_lon_tools/lat_lon_tools_unico/index.html index 9e6b0e31c..7db76ca5d 100644 --- a/gr_funzioni/lat_lon_tools/lat_lon_tools_unico/index.html +++ b/gr_funzioni/lat_lon_tools/lat_lon_tools_unico/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/layer_mappa/layer_mappa_unico/index.html b/gr_funzioni/layer_mappa/layer_mappa_unico/index.html index 92a0675c7..f82365674 100644 --- a/gr_funzioni/layer_mappa/layer_mappa_unico/index.html +++ b/gr_funzioni/layer_mappa/layer_mappa_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/layout/layout_unico/index.html b/gr_funzioni/layout/layout_unico/index.html index 7c0fb2bbc..bea56c020 100644 --- a/gr_funzioni/layout/layout_unico/index.html +++ b/gr_funzioni/layout/layout_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/maps/maps_unico/index.html b/gr_funzioni/maps/maps_unico/index.html index 2fce61b68..daad7df6f 100644 --- a/gr_funzioni/maps/maps_unico/index.html +++ b/gr_funzioni/maps/maps_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/matematica/matematica_unico/index.html b/gr_funzioni/matematica/matematica_unico/index.html index a521b1cb5..bb0e43f47 100644 --- a/gr_funzioni/matematica/matematica_unico/index.html +++ b/gr_funzioni/matematica/matematica_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/operatori/operatori_unico/index.html b/gr_funzioni/operatori/operatori_unico/index.html index 84cbd5b49..819c8a9f6 100644 --- a/gr_funzioni/operatori/operatori_unico/index.html +++ b/gr_funzioni/operatori/operatori_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/raster/raster_unico/index.html b/gr_funzioni/raster/raster_unico/index.html index 0258e3c3e..3fdc730bf 100644 --- a/gr_funzioni/raster/raster_unico/index.html +++ b/gr_funzioni/raster/raster_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/recente/recente/index.html b/gr_funzioni/recente/recente/index.html index fb63b3c6f..96dc9035c 100644 --- a/gr_funzioni/recente/recente/index.html +++ b/gr_funzioni/recente/recente/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/record_e_attributi/record_e_attributi_unico/index.html b/gr_funzioni/record_e_attributi/record_e_attributi_unico/index.html index cca8aba6d..8e555cb13 100644 --- a/gr_funzioni/record_e_attributi/record_e_attributi_unico/index.html +++ b/gr_funzioni/record_e_attributi/record_e_attributi_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/reference/dbquery/index.html b/gr_funzioni/reference/dbquery/index.html index 88fa627d2..cbac82b9c 100644 --- a/gr_funzioni/reference/dbquery/index.html +++ b/gr_funzioni/reference/dbquery/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/dbsql/index.html b/gr_funzioni/reference/dbsql/index.html index f1f7de25a..58f286b93 100644 --- a/gr_funzioni/reference/dbsql/index.html +++ b/gr_funzioni/reference/dbsql/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/dbvalue/index.html b/gr_funzioni/reference/dbvalue/index.html index 045fdfffa..4b37b6db7 100644 --- a/gr_funzioni/reference/dbvalue/index.html +++ b/gr_funzioni/reference/dbvalue/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/dbvaluebyid/index.html b/gr_funzioni/reference/dbvaluebyid/index.html index f5674eb0d..c5d022d44 100644 --- a/gr_funzioni/reference/dbvaluebyid/index.html +++ b/gr_funzioni/reference/dbvaluebyid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomcontains/index.html b/gr_funzioni/reference/geomcontains/index.html index cf3453cbf..9d0f1f8a6 100644 --- a/gr_funzioni/reference/geomcontains/index.html +++ b/gr_funzioni/reference/geomcontains/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomcrosses/index.html b/gr_funzioni/reference/geomcrosses/index.html index e25206d0c..fd2d5fa7e 100644 --- a/gr_funzioni/reference/geomcrosses/index.html +++ b/gr_funzioni/reference/geomcrosses/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomdisjoint/index.html b/gr_funzioni/reference/geomdisjoint/index.html index 623f6f71c..b1e8a6c82 100644 --- a/gr_funzioni/reference/geomdisjoint/index.html +++ b/gr_funzioni/reference/geomdisjoint/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomdistance/index.html b/gr_funzioni/reference/geomdistance/index.html index 84c660d3e..01218bd1f 100644 --- a/gr_funzioni/reference/geomdistance/index.html +++ b/gr_funzioni/reference/geomdistance/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomequals/index.html b/gr_funzioni/reference/geomequals/index.html index 0117bc190..e94068147 100644 --- a/gr_funzioni/reference/geomequals/index.html +++ b/gr_funzioni/reference/geomequals/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomintersects/index.html b/gr_funzioni/reference/geomintersects/index.html index 5114b5d7f..5fb3083e3 100644 --- a/gr_funzioni/reference/geomintersects/index.html +++ b/gr_funzioni/reference/geomintersects/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomnearest/index.html b/gr_funzioni/reference/geomnearest/index.html index 7580cac17..8777f3ea9 100644 --- a/gr_funzioni/reference/geomnearest/index.html +++ b/gr_funzioni/reference/geomnearest/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomoverlaps/index.html b/gr_funzioni/reference/geomoverlaps/index.html index 69a1f4f3a..be68b4831 100644 --- a/gr_funzioni/reference/geomoverlaps/index.html +++ b/gr_funzioni/reference/geomoverlaps/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomredef/index.html b/gr_funzioni/reference/geomredef/index.html index 650c1ff61..b039f2671 100644 --- a/gr_funzioni/reference/geomredef/index.html +++ b/gr_funzioni/reference/geomredef/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomtouches/index.html b/gr_funzioni/reference/geomtouches/index.html index a6f34b13c..7ca47fc44 100644 --- a/gr_funzioni/reference/geomtouches/index.html +++ b/gr_funzioni/reference/geomtouches/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/geomwithin/index.html b/gr_funzioni/reference/geomwithin/index.html index 9b2f2da7e..2406627b8 100644 --- a/gr_funzioni/reference/geomwithin/index.html +++ b/gr_funzioni/reference/geomwithin/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/intersecting_geom_count/index.html b/gr_funzioni/reference/intersecting_geom_count/index.html index fb467d17b..c7025ee50 100644 --- a/gr_funzioni/reference/intersecting_geom_count/index.html +++ b/gr_funzioni/reference/intersecting_geom_count/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/intersecting_geom_sum/index.html b/gr_funzioni/reference/intersecting_geom_sum/index.html index a95a1f6a4..81ce92609 100644 --- a/gr_funzioni/reference/intersecting_geom_sum/index.html +++ b/gr_funzioni/reference/intersecting_geom_sum/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/reference/index.html b/gr_funzioni/reference/reference/index.html index b1668505a..36dfd3480 100644 --- a/gr_funzioni/reference/reference/index.html +++ b/gr_funzioni/reference/reference/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/wktarea/index.html b/gr_funzioni/reference/wktarea/index.html index 76e8af054..931ca8dbb 100644 --- a/gr_funzioni/reference/wktarea/index.html +++ b/gr_funzioni/reference/wktarea/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/wktcentroid/index.html b/gr_funzioni/reference/wktcentroid/index.html index 96f916bab..e3db2716f 100644 --- a/gr_funzioni/reference/wktcentroid/index.html +++ b/gr_funzioni/reference/wktcentroid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/wktlenght/index.html b/gr_funzioni/reference/wktlenght/index.html index a00201f4c..328fe4737 100644 --- a/gr_funzioni/reference/wktlenght/index.html +++ b/gr_funzioni/reference/wktlenght/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/reference/wktpointonsurface/index.html b/gr_funzioni/reference/wktpointonsurface/index.html index e0deae58d..c5f3a3d0c 100644 --- a/gr_funzioni/reference/wktpointonsurface/index.html +++ b/gr_funzioni/reference/wktpointonsurface/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/relazioni/relazioni/index.html b/gr_funzioni/relazioni/relazioni/index.html index d33bbfb10..f9b083c59 100644 --- a/gr_funzioni/relazioni/relazioni/index.html +++ b/gr_funzioni/relazioni/relazioni/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/index.html b/gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/index.html index 067c27c6e..ab0ec1b5a 100644 --- a/gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/index.html +++ b/gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/variabili/_file_tipo/index.html b/gr_funzioni/variabili/_file_tipo/index.html index e3e2a31ad..fa8a343b2 100644 --- a/gr_funzioni/variabili/_file_tipo/index.html +++ b/gr_funzioni/variabili/_file_tipo/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/algorithm_id/index.html b/gr_funzioni/variabili/algorithm_id/index.html index 7740288c4..17e1311bc 100644 --- a/gr_funzioni/variabili/algorithm_id/index.html +++ b/gr_funzioni/variabili/algorithm_id/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/animation_end_time/index.html b/gr_funzioni/variabili/animation_end_time/index.html index 2e2486f45..8da7aabad 100644 --- a/gr_funzioni/variabili/animation_end_time/index.html +++ b/gr_funzioni/variabili/animation_end_time/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/animation_interval/index.html b/gr_funzioni/variabili/animation_interval/index.html index b42b316e7..ae8727618 100644 --- a/gr_funzioni/variabili/animation_interval/index.html +++ b/gr_funzioni/variabili/animation_interval/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/animation_start_time/index.html b/gr_funzioni/variabili/animation_start_time/index.html index ca78cb0cf..45b694abc 100644 --- a/gr_funzioni/variabili/animation_start_time/index.html +++ b/gr_funzioni/variabili/animation_start_time/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_feature/index.html b/gr_funzioni/variabili/atlas_feature/index.html index fb159dd5e..793f256d9 100644 --- a/gr_funzioni/variabili/atlas_feature/index.html +++ b/gr_funzioni/variabili/atlas_feature/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_featureid/index.html b/gr_funzioni/variabili/atlas_featureid/index.html index 7ca9bed44..66e8b6428 100644 --- a/gr_funzioni/variabili/atlas_featureid/index.html +++ b/gr_funzioni/variabili/atlas_featureid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_featurenumber/index.html b/gr_funzioni/variabili/atlas_featurenumber/index.html index 3f3bd86a7..cef250db5 100644 --- a/gr_funzioni/variabili/atlas_featurenumber/index.html +++ b/gr_funzioni/variabili/atlas_featurenumber/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_filename/index.html b/gr_funzioni/variabili/atlas_filename/index.html index b36c9273e..dfebface5 100644 --- a/gr_funzioni/variabili/atlas_filename/index.html +++ b/gr_funzioni/variabili/atlas_filename/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_geometry/index.html b/gr_funzioni/variabili/atlas_geometry/index.html index 8fece7174..bcf674389 100644 --- a/gr_funzioni/variabili/atlas_geometry/index.html +++ b/gr_funzioni/variabili/atlas_geometry/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_layerid/index.html b/gr_funzioni/variabili/atlas_layerid/index.html index 2e7f0511d..59709ee14 100644 --- a/gr_funzioni/variabili/atlas_layerid/index.html +++ b/gr_funzioni/variabili/atlas_layerid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_layername/index.html b/gr_funzioni/variabili/atlas_layername/index.html index ee53226ad..7f9640813 100644 --- a/gr_funzioni/variabili/atlas_layername/index.html +++ b/gr_funzioni/variabili/atlas_layername/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_pagename/index.html b/gr_funzioni/variabili/atlas_pagename/index.html index fae6be0a2..c5d67ae46 100644 --- a/gr_funzioni/variabili/atlas_pagename/index.html +++ b/gr_funzioni/variabili/atlas_pagename/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/atlas_totalfeatures/index.html b/gr_funzioni/variabili/atlas_totalfeatures/index.html index e14039b79..98579ea7a 100644 --- a/gr_funzioni/variabili/atlas_totalfeatures/index.html +++ b/gr_funzioni/variabili/atlas_totalfeatures/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/canvas_cursor_point/index.html b/gr_funzioni/variabili/canvas_cursor_point/index.html index 3db46cab2..8a95a2653 100644 --- a/gr_funzioni/variabili/canvas_cursor_point/index.html +++ b/gr_funzioni/variabili/canvas_cursor_point/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/cluster_color/index.html b/gr_funzioni/variabili/cluster_color/index.html index ec600618f..71ddc6863 100644 --- a/gr_funzioni/variabili/cluster_color/index.html +++ b/gr_funzioni/variabili/cluster_color/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/cluster_size/index.html b/gr_funzioni/variabili/cluster_size/index.html index 3cb30731e..9d74fe518 100644 --- a/gr_funzioni/variabili/cluster_size/index.html +++ b/gr_funzioni/variabili/cluster_size/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/current_feature/index.html b/gr_funzioni/variabili/current_feature/index.html index 186c88288..6aa2cea4e 100644 --- a/gr_funzioni/variabili/current_feature/index.html +++ b/gr_funzioni/variabili/current_feature/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/current_geometry/index.html b/gr_funzioni/variabili/current_geometry/index.html index 94546daa7..902a036fd 100644 --- a/gr_funzioni/variabili/current_geometry/index.html +++ b/gr_funzioni/variabili/current_geometry/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/current_parent_feature/index.html b/gr_funzioni/variabili/current_parent_feature/index.html index 2aaf13795..42a0275bd 100644 --- a/gr_funzioni/variabili/current_parent_feature/index.html +++ b/gr_funzioni/variabili/current_parent_feature/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/current_parent_geometry/index.html b/gr_funzioni/variabili/current_parent_geometry/index.html index c416577af..fa4847a10 100644 --- a/gr_funzioni/variabili/current_parent_geometry/index.html +++ b/gr_funzioni/variabili/current_parent_geometry/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/form_mode/index.html b/gr_funzioni/variabili/form_mode/index.html index 877589e33..6015607ae 100644 --- a/gr_funzioni/variabili/form_mode/index.html +++ b/gr_funzioni/variabili/form_mode/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/frame_duration/index.html b/gr_funzioni/variabili/frame_duration/index.html index 92828885b..26638918c 100644 --- a/gr_funzioni/variabili/frame_duration/index.html +++ b/gr_funzioni/variabili/frame_duration/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/frame_number/index.html b/gr_funzioni/variabili/frame_number/index.html index ce070ef3f..252c4d82e 100644 --- a/gr_funzioni/variabili/frame_number/index.html +++ b/gr_funzioni/variabili/frame_number/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/frame_rate/index.html b/gr_funzioni/variabili/frame_rate/index.html index 9612f61cb..5257a98aa 100644 --- a/gr_funzioni/variabili/frame_rate/index.html +++ b/gr_funzioni/variabili/frame_rate/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/fullextent_maxx/index.html b/gr_funzioni/variabili/fullextent_maxx/index.html index b73078ac4..63918f3f6 100644 --- a/gr_funzioni/variabili/fullextent_maxx/index.html +++ b/gr_funzioni/variabili/fullextent_maxx/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/fullextent_maxy/index.html b/gr_funzioni/variabili/fullextent_maxy/index.html index deea23ffe..f1a11959d 100644 --- a/gr_funzioni/variabili/fullextent_maxy/index.html +++ b/gr_funzioni/variabili/fullextent_maxy/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/fullextent_minx/index.html b/gr_funzioni/variabili/fullextent_minx/index.html index 675913969..7eeb76235 100644 --- a/gr_funzioni/variabili/fullextent_minx/index.html +++ b/gr_funzioni/variabili/fullextent_minx/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/fullextent_miny/index.html b/gr_funzioni/variabili/fullextent_miny/index.html index 4b610b618..bb6d37ee6 100644 --- a/gr_funzioni/variabili/fullextent_miny/index.html +++ b/gr_funzioni/variabili/fullextent_miny/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/geometry_part_count/index.html b/gr_funzioni/variabili/geometry_part_count/index.html index 35194f527..177d7f1c0 100644 --- a/gr_funzioni/variabili/geometry_part_count/index.html +++ b/gr_funzioni/variabili/geometry_part_count/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/geometry_part_num/index.html b/gr_funzioni/variabili/geometry_part_num/index.html index 6ad1a1d33..17a9903ce 100644 --- a/gr_funzioni/variabili/geometry_part_num/index.html +++ b/gr_funzioni/variabili/geometry_part_num/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/geometry_point_count/index.html b/gr_funzioni/variabili/geometry_point_count/index.html index 63826c1c4..05ed199f4 100644 --- a/gr_funzioni/variabili/geometry_point_count/index.html +++ b/gr_funzioni/variabili/geometry_point_count/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/geometry_point_num/index.html b/gr_funzioni/variabili/geometry_point_num/index.html index 55cf04428..1a2a56922 100644 --- a/gr_funzioni/variabili/geometry_point_num/index.html +++ b/gr_funzioni/variabili/geometry_point_num/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/geometry_ring_num/index.html b/gr_funzioni/variabili/geometry_ring_num/index.html index 5ed6697e8..9dc56079c 100644 --- a/gr_funzioni/variabili/geometry_ring_num/index.html +++ b/gr_funzioni/variabili/geometry_ring_num/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/grid_axis/index.html b/gr_funzioni/variabili/grid_axis/index.html index d30ff8bb4..44ab5289f 100644 --- a/gr_funzioni/variabili/grid_axis/index.html +++ b/gr_funzioni/variabili/grid_axis/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/grid_number/index.html b/gr_funzioni/variabili/grid_number/index.html index e5e1e7ff2..6ba57d1d7 100644 --- a/gr_funzioni/variabili/grid_number/index.html +++ b/gr_funzioni/variabili/grid_number/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/item_id/index.html b/gr_funzioni/variabili/item_id/index.html index 67165b147..5f5b1b4fa 100644 --- a/gr_funzioni/variabili/item_id/index.html +++ b/gr_funzioni/variabili/item_id/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/item_uuid/index.html b/gr_funzioni/variabili/item_uuid/index.html index ca2b5646e..9aeb48307 100644 --- a/gr_funzioni/variabili/item_uuid/index.html +++ b/gr_funzioni/variabili/item_uuid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layer/index.html b/gr_funzioni/variabili/layer/index.html index 68335b8f6..d983d9d06 100644 --- a/gr_funzioni/variabili/layer/index.html +++ b/gr_funzioni/variabili/layer/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layer_crs/index.html b/gr_funzioni/variabili/layer_crs/index.html index 8bfece37a..a309e8e98 100644 --- a/gr_funzioni/variabili/layer_crs/index.html +++ b/gr_funzioni/variabili/layer_crs/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layer_id/index.html b/gr_funzioni/variabili/layer_id/index.html index 1fa112124..f753eb48b 100644 --- a/gr_funzioni/variabili/layer_id/index.html +++ b/gr_funzioni/variabili/layer_id/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layer_ids/index.html b/gr_funzioni/variabili/layer_ids/index.html index 154e87fa2..e644d1390 100644 --- a/gr_funzioni/variabili/layer_ids/index.html +++ b/gr_funzioni/variabili/layer_ids/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layer_name/index.html b/gr_funzioni/variabili/layer_name/index.html index ea50ebd7e..8d717e1b9 100644 --- a/gr_funzioni/variabili/layer_name/index.html +++ b/gr_funzioni/variabili/layer_name/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layers/index.html b/gr_funzioni/variabili/layers/index.html index 4fe8053e6..6416489eb 100644 --- a/gr_funzioni/variabili/layers/index.html +++ b/gr_funzioni/variabili/layers/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layout_dpi/index.html b/gr_funzioni/variabili/layout_dpi/index.html index b6c645339..6d3569df9 100644 --- a/gr_funzioni/variabili/layout_dpi/index.html +++ b/gr_funzioni/variabili/layout_dpi/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layout_name/index.html b/gr_funzioni/variabili/layout_name/index.html index bc1243cc0..17bd4929c 100644 --- a/gr_funzioni/variabili/layout_name/index.html +++ b/gr_funzioni/variabili/layout_name/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layout_numpages/index.html b/gr_funzioni/variabili/layout_numpages/index.html index 80242dfe8..163f6fee4 100644 --- a/gr_funzioni/variabili/layout_numpages/index.html +++ b/gr_funzioni/variabili/layout_numpages/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layout_page/index.html b/gr_funzioni/variabili/layout_page/index.html index dc91bf67b..3c549836e 100644 --- a/gr_funzioni/variabili/layout_page/index.html +++ b/gr_funzioni/variabili/layout_page/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layout_pageheight/index.html b/gr_funzioni/variabili/layout_pageheight/index.html index c0789d991..2b073f7a4 100644 --- a/gr_funzioni/variabili/layout_pageheight/index.html +++ b/gr_funzioni/variabili/layout_pageheight/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layout_pageoffsets/index.html b/gr_funzioni/variabili/layout_pageoffsets/index.html index 99243ec1e..71069ecbe 100644 --- a/gr_funzioni/variabili/layout_pageoffsets/index.html +++ b/gr_funzioni/variabili/layout_pageoffsets/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/layout_pagewidth/index.html b/gr_funzioni/variabili/layout_pagewidth/index.html index 8d66ba99e..efbd24a0f 100644 --- a/gr_funzioni/variabili/layout_pagewidth/index.html +++ b/gr_funzioni/variabili/layout_pagewidth/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/legend_column_count/index.html b/gr_funzioni/variabili/legend_column_count/index.html index 372250e99..2c3066ec0 100644 --- a/gr_funzioni/variabili/legend_column_count/index.html +++ b/gr_funzioni/variabili/legend_column_count/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/legend_filter_by_map/index.html b/gr_funzioni/variabili/legend_filter_by_map/index.html index 2d55e400e..b6c6894a5 100644 --- a/gr_funzioni/variabili/legend_filter_by_map/index.html +++ b/gr_funzioni/variabili/legend_filter_by_map/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/legend_filter_out_atlas/index.html b/gr_funzioni/variabili/legend_filter_out_atlas/index.html index 448d3ed04..ba895b039 100644 --- a/gr_funzioni/variabili/legend_filter_out_atlas/index.html +++ b/gr_funzioni/variabili/legend_filter_out_atlas/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/legend_split_layers/index.html b/gr_funzioni/variabili/legend_split_layers/index.html index 378bb1d88..9ebb32b67 100644 --- a/gr_funzioni/variabili/legend_split_layers/index.html +++ b/gr_funzioni/variabili/legend_split_layers/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/legend_title/index.html b/gr_funzioni/variabili/legend_title/index.html index 8491eca0f..cdf2e7090 100644 --- a/gr_funzioni/variabili/legend_title/index.html +++ b/gr_funzioni/variabili/legend_title/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/legend_wrap_string/index.html b/gr_funzioni/variabili/legend_wrap_string/index.html index b1bb1ac1e..5f57ddac1 100644 --- a/gr_funzioni/variabili/legend_wrap_string/index.html +++ b/gr_funzioni/variabili/legend_wrap_string/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs/index.html b/gr_funzioni/variabili/map_crs/index.html index 1d733c593..91c2b96cc 100644 --- a/gr_funzioni/variabili/map_crs/index.html +++ b/gr_funzioni/variabili/map_crs/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs_acronym/index.html b/gr_funzioni/variabili/map_crs_acronym/index.html index 99cbc62ef..efd76121c 100644 --- a/gr_funzioni/variabili/map_crs_acronym/index.html +++ b/gr_funzioni/variabili/map_crs_acronym/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs_definition/index.html b/gr_funzioni/variabili/map_crs_definition/index.html index 70a075f18..f86c56e68 100644 --- a/gr_funzioni/variabili/map_crs_definition/index.html +++ b/gr_funzioni/variabili/map_crs_definition/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs_description/index.html b/gr_funzioni/variabili/map_crs_description/index.html index e6587edbc..bebacaf4b 100644 --- a/gr_funzioni/variabili/map_crs_description/index.html +++ b/gr_funzioni/variabili/map_crs_description/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs_ellipsoid/index.html b/gr_funzioni/variabili/map_crs_ellipsoid/index.html index 12ed6abdc..b253b851e 100644 --- a/gr_funzioni/variabili/map_crs_ellipsoid/index.html +++ b/gr_funzioni/variabili/map_crs_ellipsoid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs_proj4/index.html b/gr_funzioni/variabili/map_crs_proj4/index.html index c931238fa..78f5da17f 100644 --- a/gr_funzioni/variabili/map_crs_proj4/index.html +++ b/gr_funzioni/variabili/map_crs_proj4/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs_projection/index.html b/gr_funzioni/variabili/map_crs_projection/index.html index 6469c1d59..e9e973133 100644 --- a/gr_funzioni/variabili/map_crs_projection/index.html +++ b/gr_funzioni/variabili/map_crs_projection/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_crs_wkt/index.html b/gr_funzioni/variabili/map_crs_wkt/index.html index ac32fceeb..5f4a3700a 100644 --- a/gr_funzioni/variabili/map_crs_wkt/index.html +++ b/gr_funzioni/variabili/map_crs_wkt/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_end_time/index.html b/gr_funzioni/variabili/map_end_time/index.html index d38cc4d0b..a1b750d91 100644 --- a/gr_funzioni/variabili/map_end_time/index.html +++ b/gr_funzioni/variabili/map_end_time/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_extent/index.html b/gr_funzioni/variabili/map_extent/index.html index 17f0d8620..707270517 100644 --- a/gr_funzioni/variabili/map_extent/index.html +++ b/gr_funzioni/variabili/map_extent/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_extent_center/index.html b/gr_funzioni/variabili/map_extent_center/index.html index 4264a7214..83cd68762 100644 --- a/gr_funzioni/variabili/map_extent_center/index.html +++ b/gr_funzioni/variabili/map_extent_center/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_extent_height/index.html b/gr_funzioni/variabili/map_extent_height/index.html index 247e836f3..50379eaa4 100644 --- a/gr_funzioni/variabili/map_extent_height/index.html +++ b/gr_funzioni/variabili/map_extent_height/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_extent_width/index.html b/gr_funzioni/variabili/map_extent_width/index.html index 2542c58bd..a52a328b5 100644 --- a/gr_funzioni/variabili/map_extent_width/index.html +++ b/gr_funzioni/variabili/map_extent_width/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_id/index.html b/gr_funzioni/variabili/map_id/index.html index cb367b4f3..17d874944 100644 --- a/gr_funzioni/variabili/map_id/index.html +++ b/gr_funzioni/variabili/map_id/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_interval/index.html b/gr_funzioni/variabili/map_interval/index.html index 23a4c1c11..0d07192b1 100644 --- a/gr_funzioni/variabili/map_interval/index.html +++ b/gr_funzioni/variabili/map_interval/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_layer_ids/index.html b/gr_funzioni/variabili/map_layer_ids/index.html index db9faba2a..94293b2c8 100644 --- a/gr_funzioni/variabili/map_layer_ids/index.html +++ b/gr_funzioni/variabili/map_layer_ids/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_layers/index.html b/gr_funzioni/variabili/map_layers/index.html index fc2dd87da..e4b3098c2 100644 --- a/gr_funzioni/variabili/map_layers/index.html +++ b/gr_funzioni/variabili/map_layers/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_rotation/index.html b/gr_funzioni/variabili/map_rotation/index.html index 3868e1820..335feea3a 100644 --- a/gr_funzioni/variabili/map_rotation/index.html +++ b/gr_funzioni/variabili/map_rotation/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_scale/index.html b/gr_funzioni/variabili/map_scale/index.html index c5d0d8c8b..f472ad4e4 100644 --- a/gr_funzioni/variabili/map_scale/index.html +++ b/gr_funzioni/variabili/map_scale/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_start_time/index.html b/gr_funzioni/variabili/map_start_time/index.html index b8d7085c4..6f7098cf9 100644 --- a/gr_funzioni/variabili/map_start_time/index.html +++ b/gr_funzioni/variabili/map_start_time/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/map_units/index.html b/gr_funzioni/variabili/map_units/index.html index 9f2b8c048..9092cd8e8 100644 --- a/gr_funzioni/variabili/map_units/index.html +++ b/gr_funzioni/variabili/map_units/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/model_folder/index.html b/gr_funzioni/variabili/model_folder/index.html index 9c1c08ae3..382d7efb6 100644 --- a/gr_funzioni/variabili/model_folder/index.html +++ b/gr_funzioni/variabili/model_folder/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/model_group/index.html b/gr_funzioni/variabili/model_group/index.html index 624518d10..d51956f93 100644 --- a/gr_funzioni/variabili/model_group/index.html +++ b/gr_funzioni/variabili/model_group/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/model_name/index.html b/gr_funzioni/variabili/model_name/index.html index 63997ad36..07d5f29ec 100644 --- a/gr_funzioni/variabili/model_name/index.html +++ b/gr_funzioni/variabili/model_name/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/model_path/index.html b/gr_funzioni/variabili/model_path/index.html index d7fd3f319..6b905d354 100644 --- a/gr_funzioni/variabili/model_path/index.html +++ b/gr_funzioni/variabili/model_path/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/notification_message/index.html b/gr_funzioni/variabili/notification_message/index.html index 7d6782d68..246cff4c6 100644 --- a/gr_funzioni/variabili/notification_message/index.html +++ b/gr_funzioni/variabili/notification_message/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/parent/index.html b/gr_funzioni/variabili/parent/index.html index 92785ef74..c1ff8b70f 100644 --- a/gr_funzioni/variabili/parent/index.html +++ b/gr_funzioni/variabili/parent/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_abstract/index.html b/gr_funzioni/variabili/project_abstract/index.html index c09963e31..aa1021ceb 100644 --- a/gr_funzioni/variabili/project_abstract/index.html +++ b/gr_funzioni/variabili/project_abstract/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_area_units/index.html b/gr_funzioni/variabili/project_area_units/index.html index 94482aba1..8faa05170 100644 --- a/gr_funzioni/variabili/project_area_units/index.html +++ b/gr_funzioni/variabili/project_area_units/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_author/index.html b/gr_funzioni/variabili/project_author/index.html index 444b0b312..02352c434 100644 --- a/gr_funzioni/variabili/project_author/index.html +++ b/gr_funzioni/variabili/project_author/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_basename/index.html b/gr_funzioni/variabili/project_basename/index.html index 460dfb6eb..bb32176f2 100644 --- a/gr_funzioni/variabili/project_basename/index.html +++ b/gr_funzioni/variabili/project_basename/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_creation_date/index.html b/gr_funzioni/variabili/project_creation_date/index.html index 528d1bb22..45be49dfe 100644 --- a/gr_funzioni/variabili/project_creation_date/index.html +++ b/gr_funzioni/variabili/project_creation_date/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_crs/index.html b/gr_funzioni/variabili/project_crs/index.html index 1c60f6bc1..36e840dd2 100644 --- a/gr_funzioni/variabili/project_crs/index.html +++ b/gr_funzioni/variabili/project_crs/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_crs_arconym/index.html b/gr_funzioni/variabili/project_crs_arconym/index.html index a68eb361a..7c9778f02 100644 --- a/gr_funzioni/variabili/project_crs_arconym/index.html +++ b/gr_funzioni/variabili/project_crs_arconym/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_crs_definition/index.html b/gr_funzioni/variabili/project_crs_definition/index.html index f50eb4d22..65488cda2 100644 --- a/gr_funzioni/variabili/project_crs_definition/index.html +++ b/gr_funzioni/variabili/project_crs_definition/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_crs_description/index.html b/gr_funzioni/variabili/project_crs_description/index.html index 70eadf653..2c74e35e9 100644 --- a/gr_funzioni/variabili/project_crs_description/index.html +++ b/gr_funzioni/variabili/project_crs_description/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_crs_ellipsoid/index.html b/gr_funzioni/variabili/project_crs_ellipsoid/index.html index ab1285fcf..fc24113fe 100644 --- a/gr_funzioni/variabili/project_crs_ellipsoid/index.html +++ b/gr_funzioni/variabili/project_crs_ellipsoid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_crs_proj4/index.html b/gr_funzioni/variabili/project_crs_proj4/index.html index 8a8a4d808..e11b023b3 100644 --- a/gr_funzioni/variabili/project_crs_proj4/index.html +++ b/gr_funzioni/variabili/project_crs_proj4/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_crs_wkt/index.html b/gr_funzioni/variabili/project_crs_wkt/index.html index d653e64d0..5ec5849b5 100644 --- a/gr_funzioni/variabili/project_crs_wkt/index.html +++ b/gr_funzioni/variabili/project_crs_wkt/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_distance_units/index.html b/gr_funzioni/variabili/project_distance_units/index.html index 166117eb2..b1dcb4609 100644 --- a/gr_funzioni/variabili/project_distance_units/index.html +++ b/gr_funzioni/variabili/project_distance_units/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_ellipsoid/index.html b/gr_funzioni/variabili/project_ellipsoid/index.html index 945d80343..3187b4f8c 100644 --- a/gr_funzioni/variabili/project_ellipsoid/index.html +++ b/gr_funzioni/variabili/project_ellipsoid/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_filename/index.html b/gr_funzioni/variabili/project_filename/index.html index 7b82d37eb..5f4eb91b2 100644 --- a/gr_funzioni/variabili/project_filename/index.html +++ b/gr_funzioni/variabili/project_filename/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_folder/index.html b/gr_funzioni/variabili/project_folder/index.html index 28a14b620..befd76ccc 100644 --- a/gr_funzioni/variabili/project_folder/index.html +++ b/gr_funzioni/variabili/project_folder/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_home/index.html b/gr_funzioni/variabili/project_home/index.html index 4567a94f5..27225c62a 100644 --- a/gr_funzioni/variabili/project_home/index.html +++ b/gr_funzioni/variabili/project_home/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_identifier/index.html b/gr_funzioni/variabili/project_identifier/index.html index f7ca60f5f..ed362bb5c 100644 --- a/gr_funzioni/variabili/project_identifier/index.html +++ b/gr_funzioni/variabili/project_identifier/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_keywords/index.html b/gr_funzioni/variabili/project_keywords/index.html index a0e8f26f2..efd95d5fd 100644 --- a/gr_funzioni/variabili/project_keywords/index.html +++ b/gr_funzioni/variabili/project_keywords/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_last_saved/index.html b/gr_funzioni/variabili/project_last_saved/index.html index dcdb498cd..908559a97 100644 --- a/gr_funzioni/variabili/project_last_saved/index.html +++ b/gr_funzioni/variabili/project_last_saved/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_path/index.html b/gr_funzioni/variabili/project_path/index.html index df735ec56..b91dedba8 100644 --- a/gr_funzioni/variabili/project_path/index.html +++ b/gr_funzioni/variabili/project_path/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_title/index.html b/gr_funzioni/variabili/project_title/index.html index caa16cbb8..570c0f35b 100644 --- a/gr_funzioni/variabili/project_title/index.html +++ b/gr_funzioni/variabili/project_title/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/project_units/index.html b/gr_funzioni/variabili/project_units/index.html index b24a9c9db..e325b5bdc 100644 --- a/gr_funzioni/variabili/project_units/index.html +++ b/gr_funzioni/variabili/project_units/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/qgis_locale/index.html b/gr_funzioni/variabili/qgis_locale/index.html index 747319a33..d3bd86187 100644 --- a/gr_funzioni/variabili/qgis_locale/index.html +++ b/gr_funzioni/variabili/qgis_locale/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/qgis_os_name/index.html b/gr_funzioni/variabili/qgis_os_name/index.html index 77109cb3b..613959e59 100644 --- a/gr_funzioni/variabili/qgis_os_name/index.html +++ b/gr_funzioni/variabili/qgis_os_name/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/qgis_platform/index.html b/gr_funzioni/variabili/qgis_platform/index.html index 101d92fb3..c8df606f2 100644 --- a/gr_funzioni/variabili/qgis_platform/index.html +++ b/gr_funzioni/variabili/qgis_platform/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/qgis_release_name/index.html b/gr_funzioni/variabili/qgis_release_name/index.html index 86b331e3a..7aab2c62f 100644 --- a/gr_funzioni/variabili/qgis_release_name/index.html +++ b/gr_funzioni/variabili/qgis_release_name/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/qgis_short_version/index.html b/gr_funzioni/variabili/qgis_short_version/index.html index 69e6a7878..caf71b12c 100644 --- a/gr_funzioni/variabili/qgis_short_version/index.html +++ b/gr_funzioni/variabili/qgis_short_version/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/qgis_version/index.html b/gr_funzioni/variabili/qgis_version/index.html index 4dcefd8df..4a333bc69 100644 --- a/gr_funzioni/variabili/qgis_version/index.html +++ b/gr_funzioni/variabili/qgis_version/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/qgis_version_no/index.html b/gr_funzioni/variabili/qgis_version_no/index.html index cf40484f7..275371649 100644 --- a/gr_funzioni/variabili/qgis_version_no/index.html +++ b/gr_funzioni/variabili/qgis_version_no/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/row_number/index.html b/gr_funzioni/variabili/row_number/index.html index be0aa5ef1..b661f61f5 100644 --- a/gr_funzioni/variabili/row_number/index.html +++ b/gr_funzioni/variabili/row_number/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/scale_value/index.html b/gr_funzioni/variabili/scale_value/index.html index 18f8c4e22..e1632772c 100644 --- a/gr_funzioni/variabili/scale_value/index.html +++ b/gr_funzioni/variabili/scale_value/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/snapping_results/index.html b/gr_funzioni/variabili/snapping_results/index.html index 47e4a8481..ca41c029e 100644 --- a/gr_funzioni/variabili/snapping_results/index.html +++ b/gr_funzioni/variabili/snapping_results/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_angle/index.html b/gr_funzioni/variabili/symbol_angle/index.html index bc3516f56..f12a0354e 100644 --- a/gr_funzioni/variabili/symbol_angle/index.html +++ b/gr_funzioni/variabili/symbol_angle/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_color/index.html b/gr_funzioni/variabili/symbol_color/index.html index b50503336..5ae6f83b3 100644 --- a/gr_funzioni/variabili/symbol_color/index.html +++ b/gr_funzioni/variabili/symbol_color/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_count/index.html b/gr_funzioni/variabili/symbol_count/index.html index b6a2831f9..e7b7ed2a1 100644 --- a/gr_funzioni/variabili/symbol_count/index.html +++ b/gr_funzioni/variabili/symbol_count/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_id/index.html b/gr_funzioni/variabili/symbol_id/index.html index e21fd0ec4..fa9193c8d 100644 --- a/gr_funzioni/variabili/symbol_id/index.html +++ b/gr_funzioni/variabili/symbol_id/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_label/index.html b/gr_funzioni/variabili/symbol_label/index.html index 152af050a..e1f2b46bf 100644 --- a/gr_funzioni/variabili/symbol_label/index.html +++ b/gr_funzioni/variabili/symbol_label/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_layer_count/index.html b/gr_funzioni/variabili/symbol_layer_count/index.html index 6576c763e..260c9405d 100644 --- a/gr_funzioni/variabili/symbol_layer_count/index.html +++ b/gr_funzioni/variabili/symbol_layer_count/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_layer_index/index.html b/gr_funzioni/variabili/symbol_layer_index/index.html index e2deabd73..15078da89 100644 --- a/gr_funzioni/variabili/symbol_layer_index/index.html +++ b/gr_funzioni/variabili/symbol_layer_index/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_marker_column/index.html b/gr_funzioni/variabili/symbol_marker_column/index.html index 2b11b355b..9141dbf47 100644 --- a/gr_funzioni/variabili/symbol_marker_column/index.html +++ b/gr_funzioni/variabili/symbol_marker_column/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/symbol_marker_row/index.html b/gr_funzioni/variabili/symbol_marker_row/index.html index be8513180..b76fd7bef 100644 --- a/gr_funzioni/variabili/symbol_marker_row/index.html +++ b/gr_funzioni/variabili/symbol_marker_row/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/user_account_name/index.html b/gr_funzioni/variabili/user_account_name/index.html index 8eb8b3935..6bf7dd0c4 100644 --- a/gr_funzioni/variabili/user_account_name/index.html +++ b/gr_funzioni/variabili/user_account_name/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/user_full_name/index.html b/gr_funzioni/variabili/user_full_name/index.html index 23bb4bc1c..d6c5478c9 100644 --- a/gr_funzioni/variabili/user_full_name/index.html +++ b/gr_funzioni/variabili/user_full_name/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/value/index.html b/gr_funzioni/variabili/value/index.html index 99a4839d9..826906865 100644 --- a/gr_funzioni/variabili/value/index.html +++ b/gr_funzioni/variabili/value/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/variabili/index.html b/gr_funzioni/variabili/variabili/index.html index 2ac13886c..ce848e13f 100644 --- a/gr_funzioni/variabili/variabili/index.html +++ b/gr_funzioni/variabili/variabili/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/gr_funzioni/variabili/with_variable/index.html b/gr_funzioni/variabili/with_variable/index.html index 802b179b1..fa77d4f63 100644 --- a/gr_funzioni/variabili/with_variable/index.html +++ b/gr_funzioni/variabili/with_variable/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/gr_funzioni/variabili/zoom_level/index.html b/gr_funzioni/variabili/zoom_level/index.html index 9ea65586f..0823324b1 100644 --- a/gr_funzioni/variabili/zoom_level/index.html +++ b/gr_funzioni/variabili/zoom_level/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/img/index.html b/img/index.html index e0a9b2ab1..cd03eb368 100644 --- a/img/index.html +++ b/img/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/index.html b/index.html index 78199402b..4ecf651ef 100644 --- a/index.html +++ b/index.html @@ -24,7 +24,7 @@ - + @@ -32,7 +32,7 @@ - + diff --git a/mettiti_alla_prova/index.html b/mettiti_alla_prova/index.html index 5dfb89eb8..c05b0e380 100644 --- a/mettiti_alla_prova/index.html +++ b/mettiti_alla_prova/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/ods/index.html b/ods/index.html index 2b9932227..58d45b01e 100644 --- a/ods/index.html +++ b/ods/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/parlano_di_noi/index.html b/parlano_di_noi/index.html index 35a84d8f5..6f63dfdec 100644 --- a/parlano_di_noi/index.html +++ b/parlano_di_noi/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/privacy/index.html b/privacy/index.html index e98ba78a8..b7ab8c908 100644 --- a/privacy/index.html +++ b/privacy/index.html @@ -22,7 +22,7 @@ - + @@ -30,7 +30,7 @@ - + diff --git a/pull-request/index.html b/pull-request/index.html index ddcf4c4b7..948cc71bb 100644 --- a/pull-request/index.html +++ b/pull-request/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/index.html b/release/index.html index 6852ff1cb..ee1cba31d 100644 --- a/release/index.html +++ b/release/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/intro_novita/index.html b/release/intro_novita/index.html index 559361287..a0d9ecd4a 100644 --- a/release/intro_novita/index.html +++ b/release/intro_novita/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_30/index.html b/release/novita_30/index.html index 37c5532dd..320f36e2c 100644 --- a/release/novita_30/index.html +++ b/release/novita_30/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_310/index.html b/release/novita_310/index.html index 531ab9e5e..a9feb2fd6 100644 --- a/release/novita_310/index.html +++ b/release/novita_310/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_312/index.html b/release/novita_312/index.html index 8ee18458f..0171833d1 100644 --- a/release/novita_312/index.html +++ b/release/novita_312/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_314/index.html b/release/novita_314/index.html index 11508713e..808a5be7c 100644 --- a/release/novita_314/index.html +++ b/release/novita_314/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_316/index.html b/release/novita_316/index.html index dee96e720..c60c7d457 100644 --- a/release/novita_316/index.html +++ b/release/novita_316/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_318/index.html b/release/novita_318/index.html index 37d174f37..ba1876422 100644 --- a/release/novita_318/index.html +++ b/release/novita_318/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_32/index.html b/release/novita_32/index.html index c5646b965..62945de45 100644 --- a/release/novita_32/index.html +++ b/release/novita_32/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_320/index.html b/release/novita_320/index.html index e1d5fd6b6..d3a3c56a3 100644 --- a/release/novita_320/index.html +++ b/release/novita_320/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_322/index.html b/release/novita_322/index.html index da3319a30..346f6303c 100644 --- a/release/novita_322/index.html +++ b/release/novita_322/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_324/index.html b/release/novita_324/index.html index e8d9eaa77..5213ff60d 100644 --- a/release/novita_324/index.html +++ b/release/novita_324/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_326/index.html b/release/novita_326/index.html index b2cddc820..f4525572a 100644 --- a/release/novita_326/index.html +++ b/release/novita_326/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_328/index.html b/release/novita_328/index.html index 5143a400a..42157da80 100644 --- a/release/novita_328/index.html +++ b/release/novita_328/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_330/index.html b/release/novita_330/index.html index d250c765c..650f27331 100644 --- a/release/novita_330/index.html +++ b/release/novita_330/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_332/index.html b/release/novita_332/index.html index 97ab281aa..f04ad0f9b 100644 --- a/release/novita_332/index.html +++ b/release/novita_332/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + diff --git a/release/novita_334/index.html b/release/novita_334/index.html index ec5a561a1..c7edd19e5 100644 --- a/release/novita_334/index.html +++ b/release/novita_334/index.html @@ -26,7 +26,7 @@ - + @@ -34,7 +34,7 @@ - + @@ -4569,6 +4569,10 @@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.
FunzioniQuesta 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 formazioneIl 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...
SupporterPer 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 guidaQuesta 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:
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 aggiuntafunzioni 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:
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 Hannover40.\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:
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.06188803019758domanda 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.06188850.A cosa serve l'operatore '\\n'
?
Per chi volesse sapere l'esito degli esercizi svolti, inviare le risposte alla mail: pigrecoinfinito@gmail.com
con OGGETTO: Test #HfcQGIS
Sono 50 quesiti di difficolt\u00e0 variabile (media-alta
), sotto i consigli di Pigreco
Contatto : \u2709 pigrecoinfinito@gmail.com
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 BorrusoCoordinatore
Salvatore FiandacaAutore e curatore di HfcQGIS
Giovan Battista VitranoWebmaster
"},{"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
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:
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
>=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
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":"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":"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":"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":"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.
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":"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:
array_first(array('a','b','c')) = array('a','b','c')[0]
array_last(array('a','b','c')) = array('a','b','c')[-1]
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])
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 Millerqui 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
:
specie
\u00e8 stata usata la seguente espressione nelle propriet\u00e0 del layer, in particolare nel widget Predefiniti
:attribute(get_feature('matrice', 'specie', \"specie\" ), \"quadrante\")\n
quadrante
\u00e8 stata utilizzata la seguente espressione nelle propriet\u00e0 del layer puntuale, in particolare nel widget Predefiniti
: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":"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:
definizione della funzione:
sintassi:
argomenti:
esempi:
Alcune funzioni (per esempio length
) possono avere pi\u00f9 definizioni, pi\u00f9 sintassi, pi\u00f9 argomenti ed esempi, ovvero possono avere delle varianti.
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.
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).
sotto una breve lista di funzioni che dipendono dalle impostazioni dell'ellissoide di progetto:
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":"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):
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:
C:\\Users\\nomeUtente\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\python\\expressions
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
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.
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.
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.
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!!!
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
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
.
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":"with_variable
.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":"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.
$area
, $perimeter
ecc.. il $
davanti ad una funzione significa che riguarda la geometry corrente;Elemento
dalle propriet\u00e0 Suggerimenti del layer;Ctrl+rotellina
)in contrapposizione ai layer raster\u00a0\u21a9
non tutti i layer in QGIS sono editabili, come per esempio layer CSV\u00a0\u21a9
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
:
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
.
Editor delle funzioni
;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
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:
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:
nella versione QGIS 3.24\u00a0\u21a9
sono layer vettoriali e semplici tabelle editabili\u00a0\u21a9
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).
L'algoritmo \u00e8 molto utile in quanto:
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.
=
uguale;+
somma;-
differenza;/
divisione;*
moltiplicazione;^
potenza;||
unione stringhe (doppio pipe);()
parentesi;'\\n'
nuova riga;Mostra Guida
permette di abilitare l'area dell'Help;\u00c8 possibile aggiungere commenti alle espressioni nell'area dell'editor espressioni: 1. per riga intera /*commento*/
2. per commentare una riga --commento
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
Sul Field Calc QGIS 3.x - 30 video lezioni (23 ore)
Per maggiori Info contattatemi.
Ing. Salvatore Fiandaca
Mail
: pigrecoinfinito@gmail.comFacebook
: https://www.facebook.com/pigreco314Twitter
: https://twitter.com/totofiandacaTelegram
: https://t.me/pigreco71blog
: https://pigrecoinfinito.com/canale youtube
: http://www.youtube.com/c/Tot\u00f2FiandacaHfcQGIS
: https://hfcqgis.opendatasicilia.it/Tansignari
: https://tansignari.opendatasicilia.it/data.world
: https://data.world/pigrecoinfinitogithub
: https://github.com/pigrecogitlab
: https://gitlab.com/pigr3coCanale Telegram
: https://t.me/pigrecoinfinitoAlla 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
Il corso \u00e8 REGISTRATO e prevede ...
Per maggiori Info contattatemi.
Ing. Salvatore Fiandaca
Mail
: pigrecoinfinito@gmail.comFacebook
: https://www.facebook.com/pigreco314Twitter
: https://twitter.com/totofiandacaTelegram
: https://t.me/pigreco71blog
: https://pigrecoinfinito.com/canale youtube
: http://www.youtube.com/c/Tot\u00f2FiandacaHfcQGIS
: https://hfcqgis.opendatasicilia.it/Tansignari
: http://tansignari.opendatasicilia.it/it/latest/#data.world
: https://data.world/pigrecoinfinitogithub
: https://github.com/pigrecogitlab
: https://gitlab.com/pigr3coCanale Telegram
: https://t.me/pigrecoinfinitoL'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:
temp1
e popolarlo con array_agg(\"ID\", \"PortCluster_ID\")
, ovvero, aggrego tutti gli ID
ragguppandoli per PortCluster_ID
(per poterlo visualizzare devo usare anche la funzione array_to_string
, quindi: array_to_string(array_agg(\"ID\", \"PortCluster_ID\"))
);temp2
e lo popolo con l'indice che possiede il valore del campo ID
dentro l'array calcolato nel campo temp1
usando l'espressione array_find(array_agg(\"ID\", \"PortCluster_ID\"),\"ID\"))
;temp2
e il campo ID
;temp3
usando la funzione aggregate
(variabile cucu
);temp4
e lo popolo con l'indice che i valori del campo temp3
hanno nell'array creato nel quarto passo;group1
.dati di esempio
Funzioni e variabili utilizzate:
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 if
dovrebbe 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.
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:
cum
: \u00e8 relativo al primo esempio;cum_2
: \u00e8 relativo al secondo esempio;cum_3
: \u00e8 relativo al terzo esempio.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
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
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
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
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.
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.
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 zFunzioni e variabili utilizzate:
(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,10l'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).
-
\u00e8 il separatore dei civici, /
\u00e8 il separatore tra numero e lettera;/
e da caratteri;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":"Funzioni e variabili utilizzate:
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:
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:
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:
il GeoPackage \u00e8 qui
Funzioni e variabili utilizzate:
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:
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:
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:
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:
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.06188803019758vediamo come farlo usando il calcolatore di campi:
latitude
, tipo Real
con lunghezza 10 e precisione 7;regexp_matches( \"GPS\" , '(.+),(.+)')[0]
;longitude
, tipo Real
con lunghezza 10 e precisione 7;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:
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:
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.5esempio di cosa ottenere: se la colonna taxa
contenesse Calluna_vulgaris#Porpidia_crustulata#Micarea_erratica
la nuova colonna devobbe contenere 5 (1+2+2).
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.
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:
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:
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.
qui file di esempio
Funzioni e variabili utilizzate:
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:
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:
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:
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
count(expression:=\"nome\",group_by:=\"nome\")
\"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:
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 4Una 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:
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:
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:
buffer($geometry,-20)
: Crea un buffer del poligono utilizzando la funzione $geometry, con una profondit\u00e0 negativa di 20 metri (buffer interno)area
: Calcola l'area della geometria appena definita, in ettari (/10000)Il GeoPackage, con il vettore bosco, \u00e8 disponibile qui
Funzioni e variabili utilizzate:
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:
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:
Funzioni e variabili utilizzate:
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:
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.
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:
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":"Espressione filtro
nel primo campo della form: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
Espressione filtro
nel secondo campo della form: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:
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:
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:
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:
sort_D-A
integer
;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:
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.
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:
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:
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:
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:
'(\\\\d+)(.+)'
significa, crea due gruppi e nel primo metti solo i numeri iniziali;\\\\1
significa prendi e sostituisci il primo gruppoFunzioni e variabili utilizzate:
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:
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:
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:
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
.
line_locate_point
. Utilizzando poi la funzione array_get
, a ciascun nome dell\u2019elenco viene convertito in valore numerico corrispondente alla sua posizione nell\u2019elenco, cosi da poterlo associare alla serie di numeri precedentemente creata.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:
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:
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:
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:
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 arancionecome 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:
zona_fill
come testo, lunghezza 20;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:
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
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:
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:
$length > 25
: seleziona e visualizza solamente le linee di lunghezza maggiore di 25 m. Questo consente di eliminare piccoli oggetti areali.
simplify($geometry,10)
: semplifica una geometria rimuovendo alcuni dei nodi usando una soglia basata sulla distanza. Il valore 10 corrisponde alla tolleranza, ossia la deviazione massima dai segmenti rettilinei per i punti da rimuovere
smooth(simplify($geometry,10),21,0.2)
: smussa la geometria semplificata dall'espressione precedente. 21 corrisponde al numero di iterazioni di smussatura, mentre 0.2 \u00e9 il valore di offset che controlla che controlla quanto la geometria smussata seguir\u00e1 strettamente la geometria originale.
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:
geometry
.Il geopackage \u00e8 scaricabile qui
--
Realizzato da Valerio Pinna
Funzioni e variabili utilizzate:
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:
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:
Funzioni e variabili utilizzate:
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:
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
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:
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?
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:
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:
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
puntiA
e puntiB
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:
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
:
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:
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 condizioneid1
<> 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:
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:
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:
Il tema (la quotatura) \u00e8 scaricabile da qui: https://plugins.qgis.org/styles/5/
Funzioni e variabili utilizzate:
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:
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
media
)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:
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:
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
.
Funzioni e variabili utilizzate:
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:
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:
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:
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:
[^A-Za-z0-9\\\\s]
significa, evita (^
) l'insieme (cio\u00e8 dalla A alla Z maiuscolo e minuscolo e i numeri)\\\\s
significa spaziocreare 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:
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:
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:
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:
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:
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
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
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:
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:
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:
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:
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:
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:
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:
shapefile
($id inizia da 0) utilizzare limit:=valore +1
geopackage
($id inizia da 1) utilizzare limit:=valore
Funzioni e variabili utilizzate:
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:
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:
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:
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:
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:
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:
ecco la tabella attributi:
Tematizzo con i valori del nuovo campo:
OSSERVAZIONE:
Funzioni e variabili utilizzate:
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:
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:
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:
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:
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:
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:
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 430492Lo 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 SRCreao 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":"shapefile : https://github.com/pigreco/COVID19_Sicilia/raw/master/risorse/province.7z
Blog post su Pigrecoinfinito: https://pigrecoinfinito.com/2020/04/14/qgis-grafici-geoplot-usando-solo-il-geometry-generator/
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:
\"positive\"
\u00e8 il campo che contiene i dati da tracciare;200
\u00e8 un fattore di amplificazione dell'asse x (ma dipende dai dati);2
\u00e8 un fattore di amplificazione dell'asse y (ma dipende dai dati)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 080207Funzioni e variabili utilizzate:
Come tracciare dei punti su una linea a distanza prefissata a partire dall'origine della linea:
distanza
e popolere con le distanze desiderate (a partire dallo start_point
della linea); 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:
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:
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:
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):
Funzioni e variabili utilizzate:
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 contestoconteggio: https://gist.github.com/pigreco/2b2ad2eb12d17c4370b09635ae1470b4
* i numeri tra parentesi rappresentano: (numero funzioni documentate/numero funzioni nel gruppo)
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>= QGIS 3.24
\u21a9
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:
aggregate una stringa corrispondente all'aggregato da calcolare. Opzioni valide sono:
expression sotto-espressione o nome campo da aggregare
@parent
.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:
array_agg
permette di trasformare un attributo (colonna di una tabella) in un array!!!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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
--
","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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
Esempio:
Selezionare le Province con minor area per ogni Regione
$area = minimum(expression:=$area,group_by:=\"COD_REG\")
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
Restituisce un valore aggregato calcolato usando tutti gli elementi figli corrispondenti da una relazione di layer.
Sintassi:
Argomenti:
aggregate una stringa corrispondente all'aggregato da calcolare. Opzioni valide sono:
expression sotto espressione o nome campo da aggregare
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
--
","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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
@ element
sar\u00e0 sostituita dal valore corrente.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:
@element
sar\u00e0 sostituita dal valore corrente.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:
option='all' una stringa che specifica la gestione dei valori restituiti. Le opzioni valide sono:
all: Predefinito, tutti i valori pi\u00f9 comuni vengono restituiti in un array.
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:
option='all' una stringa che specifica la gestione dei valori restituiti. Le opzioni valide sono:
all: Predefinito, tutti i valori meno comuni vengono restituiti in un array.
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:
Esempi:
color_hsl(100,50,70) \u2192 166,217,140\n
osservazioni:
color_hsl(100,50,70) = color_rgb( 166,217,140)\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_hsla","title":"color_hsla","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi attributi tonalit\u00e0, saturazione, luminosit\u00e0 e alfa (trasparenza)
Sintassi:
Argomenti:
Esempi:
color_hsla(100,50,70,200) \u2192 '166,217,140,200'\n
osservazioni:
color_hsla(100,50,70,200) = color_rgba( 166,217,140,200)\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_hsv","title":"color_hsv","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi attributi tonalit\u00e0, saturazione e valore.
Sintassi:
Argomenti:
Esempi:
color_hsv(40,100,100) \u2192 '255,170,0'\n
osservazioni:
color_hsv(40,100,100) = color_rgb( 255,170,0 )\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_hsva","title":"color_hsva","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi attributi tonalit\u00e0, saturazione, valore e alfa (trasparenza).
Sintassi:
Argomenti:
Esempi:
color_hsva(40,100,100,200) \u2192 '255,170,0,200'\n
osservazioni:
color_hsva(40,100,100,200) = color_rgba( 255,170,0,200 )\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_mix_rgb","title":"color_mix_rgb","text":"Restituisce una stringa che rappresenta un colore che mescola i valori rosso, verde, blu e alfa di due colori forniti in base a un determinato rapporto.
Sintassi:
Argomenti:
Esempi:
color_mix_rgb('0,0,0','255,255,255',0.5) \u2192 127,127,127,255\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_part","title":"color_part","text":"Restituisce uno specifico componente colore da una stringa colore, es. la componente rosso o alfa.
Sintassi:
Argomenti:
component una stringa corrispondente al componente colore da restituire. Opzioni valide sono:
Esempi:
color_part('200,10,30','green') \u2192 10\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_rgb","title":"color_rgb","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi componenti rosso, verde e blu.
Sintassi:
Argomenti:
Esempi:
color_rgb(255,127,0) \u2192 255,127,0\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_rgba","title":"color_rgba","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi componenti rosso, verde, blue ed alpha (trasparenza).
Sintassi:
Argomenti:
Esempi:
color_rgba(255,127,0,200) \u2192 '255,127,0,200'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#create_ramp","title":"create_ramp","text":"Restituisce una scala di colori a gradiente per una mappa di colori e passi.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
ramp_color(create_ramp(map(0,'0,0,0',1,'255,0,0')),1) \u2192 '255,0,0,255'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#darker","title":"darker","text":"Restituisce una stringa di colore pi\u00f9 scuro (o pi\u00f9 chiaro)
Sintassi:
Argomenti:
Esempi:
darker('200,10,30',300) \u2192 '66,3,10,255'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#lighter","title":"lighter","text":"Restituisce una stringa di colore pi\u00f9 chiaro (o pi\u00f9 scuro)
Sintassi:
Argomenti:
Esempi:
lighter('200,10,30',200) \u2192 '255,158,168,255'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#project_color","title":"project_color","text":"Restituisce un colore dallo schema colore del progetto.
Sintassi:
Argomenti:
Esempi:
project_color('Logo color') \u2192 '20,140,50'\n
osservazioni
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#ramp_color","title":"ramp_color","text":"Restituisce una stringa rappresentante un colore ottenuto da una scala colore.
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#variante-di-scala-salvata","title":"Variante di scala salvata","text":"Restituisce una stringa che rappresenta un colore da una scala salvata
Sintassi:
Argomenti:
Esempi:
ramp_color('Spectral',0.3) \u2192 '253,190,115,255'\n
nota
Le scale di colore disponibili differiscono fra le varie installazioni di QGIS. Questa funzione potrebbe non restituire il risultato atteso se sposti i tuoi progetti QGIS fra le diverse installazioni.
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#variante-di-scala-creata-con-unespressione","title":"Variante di scala creata con un'espressione","text":"Restituisce una stringa che rappresenta un colore da una scala creata con un'espressione
Sintassi:
Argomenti:
Esempi:
ramp_color(create_ramp(map(0,'0,0,0',1,'255,0,0')),1) \u2192255,0,0,255\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#set_color_part","title":"set_color_part","text":"Imposta uno specifico componente colore per una stringa colore, es. la componente rosso o alpha.
Sintassi:
Argomenti:
component una stringa corrispondente al componente colore da impostare. Opzioni valide sono:
value nuovo valore per il componente colore, rispettando gli intervalli listati sopra
Esempi:
set_color_part('200,10,30','green',50) \u2192 200,50,30\n
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/","title":"Gruppo Condizioni","text":"Abstract
Questo gruppo contiene funzioni per gestire controlli condizionali nelle espressioni.
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#case","title":"CASE","text":"Valuta un'espressione e restituisce un risultato diverso, sia esso vero o falso. Puoi testare pi\u00f9 condizioni
Sintassi:
CASE\nWHEN condizione THEN risultato\n[ ...n ]\n[ ELSE risultato ]\nEND\n
[ ] indica componenti opzionali
Argomenti:
Esempi:
CASE\nWHEN \"column\" IS NULL THEN 'None'\nEND\n
CASE \nWHEN \"COD_REG\" =19 or \"COD_REG\" = 20\nTHEN \"DEN_REG\" \nELSE 'NON SONO ISOLE' \nEND\n
CASE \nWHEN length( \"DEN_REG\") >15 THEN 'LUNGO'\nWHEN length( \"DEN_REG\") <15 AND length( \"DEN_REG\") >10 THEN 'MEDIO'\nELSE 'CORTA' \nEND\n
Altri Esempi:
popolare un campo un funzione di un altro
CASE \nWHEN \"livello3\" ILIKE 'A%' THEN 'ciao'\nWHEN \"livello3\" ILIKE 'B%' THEN 'arrivederci'\nWHEN \"livello3\" ILIKE 'C%' THEN 'ciaone'\nELSE 'CUCU'\nEND\n
In questo Esempio viene popolato un campo (dove \u00e8 usata l'espressione) in funzione del campo livello3: se il campo contiene un valore che inizia per A allora scriver\u00e0 ciao, se contiene un valore che inizia con B scriver\u00e0 arrivederci; se contiene un valore che inizia per C scriver\u00e0 ciaone in tutti gli altri casi scriver\u00e0 CUCU
--
posizionamento etichetta
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#coalesce","title":"coalesce","text":"
Restituisce il primo valore non NULL dalla lista delle espressioni. Questa funzione pu\u00f2 usare qualsiasi numero di Argomenti:.
Sintassi:
Argomenti:
Esempi:
coalesce(NULL, 2) \u2192 2\ncoalesce(NULL, 2, 3) \u2192 2\ncoalesce(7, NULL, 3*2) \u2192 7\ncoalesce(\"fieldA\", \"fallbackField\", 'ERRORE') \u2192 valore di \"fieldA\" se non \u00e8 NULL, altrimenti il valore di \"fallbackField\" o la stringa 'ERRORE' se sono entrambi NULL\n
Osservazioni:
Questa funzione \u00e8 utile all'interno di una espressione che prevede l'uso di pi\u00f9 campi ed uno o pi\u00f9 di essi ha valore NULL, questo valore penalizza l'intera stringa e rende non visibile il risultato.
Esempio senza l'uso della funzione coalesce:
Esempio con l'uso della funzione coalesce:
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#if","title":"if","text":"Testa una condizione e restituisce un risultato diverso a seconda della verifica.
Sintassi:
Argomenti:
Esempi:
if( 1+1=2, 'S\u00ec', 'No' ) \u2192 'S\u00ec'\nif( 1+1=3, 'S\u00ec', 'No' ) \u2192 'No'\nif( 5 > 3, 1, 0) \u2192 1\nif( '', 'It is true (not empty)', 'It is false (empty)' ) \u2192 'It is false (empty)'\nif( ' ', 'It is true (not empty)', 'It is false (empty)' ) \u2192 'It is true (not empty)'\nif( 0, 'One', 'Zero' ) \u2192 'Zero'\nif( 10, 'One', 'Zero' ) \u2192 'One'\n
Osservazioni:
--
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#nullif","title":"nullif","text":"Restituisce un valore nullo se value1 \u00e8 uguale a value2; altrimenti restituisce value1. Questo pu\u00f2 essere usato per sostituire in modo condizionale i valori con NULL
.
Sintassi:
Argomenti:
NULL
.NULL
.Esempi:
nullif('(none)', '(none)') \u2192 NULL\nnullif('text', '(none)') \u2192 'text'\nnullif(\"name\", '') \u2192 NULL, se \"name\" \u00e8 una stringa vuota (o gi\u00e0 NULL), \"name\" in qualsiasi altro caso.\n
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#regexp_match","title":"regexp_match","text":"Restituisce la prima posizione di corrispondenza che soddisfa un'espressione regolare all'interno di una stringa, o 0 se la sottostringa non viene trovata.
Sintassi:
Argomenti:
Esempi:
regexp_match('QGIS ROCKS','\\\\sROCKS') \u2192 5\n
Osservazioni:
--
In questo Esempio la prima lettere di Fiandaca si trova alla posizione 10
regexp_match('Salvatore Fiandaca','\\\\sFiandaca') \u2192 10\n
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#try","title":"try","text":"Prova un'espressione e restituisce il suo valore se priva di errori. Se l'espressione restituisce un errore, verr\u00e0 restituito un valore alternativo se fornito altrimenti la funzione restituir\u00e0 null.
Sintassi:
[ ] contrassegna componenti opzionali
Argomenti:
Esempi:
try( to_int( '1' ), 0 ) \u2192 1\ntry( to_int( 'a' ), 0 ) \u2192 0\ntry( to_date( 'invalid_date' ) ) \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/","title":"Gruppo Conversioni","text":"Abstract
Questo gruppo contiene funzioni per convertire i dati da un tipo ad un altro, es. da stringa a intero, da intero a stringa.
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#from_base64","title":"from_base64","text":"Decodifica una stringa Base64 in un valore binario.
Sintassi:
Argomenti:
Esempi:
from_base64('UUdJUw==') \u2192 'QGIS'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#hash","title":"hash","text":"Crea un hash da una stringa con un determinato metodo.
Sintassi:
Argomenti:
Esempi:
hash('QGIS', 'md4') \u2192 'c0fc71c241cdebb6e888cbac0e2b68eb'\nhash('QGIS', 'md5') \u2192 '57470aaa9e22adaefac7f5f342f1c6da'\nhash('QGIS', 'sha1') \u2192 'f87cfb2b74cdd5867db913237024e7001e62b114'\nhash('QGIS', 'sha224') \u2192 '4093a619ada631c770f44bc643ead18fb393b93d6a6af1861fcfece0'\nhash('QGIS', 'sha256') \u2192 'eb045cba7a797aaa06ac58830846e40c8e8c780bc0676d3393605fae50c05309'\nhash('QGIS', 'sha384') \u2192 '91c1de038cc3d09fdd512e99f9dd9922efadc39ed21d3922e69a4305cc25506033aee388e554b78714c8734f9cd7e610'\nhash('QGIS', 'sha512') \u2192 'c2c092f2ab743bf8edbeb6d028a745f30fc720408465ed369421f0a4e20fa5e27f0c90ad72d3f1d836eaa5d25cd39897d4cf77e19984668ef58da6e3159f18ac'\nhash('QGIS', 'sha3_224') \u2192 '467f49a5039e7280d5d42fd433e80d203439e338eaabd701f0d6c17d'\nhash('QGIS', 'sha3_256') \u2192 '540f7354b6b8a6e735f2845250f15f4f3ba4f666c55574d9e9354575de0e980f'\nhash('QGIS', 'sha3_384') \u2192 '96052da1e77679e9a65f60d7ead961b287977823144786386eb43647b0901fd8516fa6f1b9d243fb3f28775e6dde6107'\nhash('QGIS', 'sha3_512') \u2192 '900d079dc69761da113980253aa8ac0414a8bd6d09879a916228f8743707c4758051c98445d6b8945ec854ff90655005e02aceb0a2ffc6a0ebf818745d665349'\nhash('QGIS', 'keccak_224') \u2192 '5b0ce6acef8b0a121d4ac4f3eaa8503c799ad4e26a3392d1fb201478'\nhash('QGIS', 'keccak_256') \u2192 '991c520aa6815392de24087f61b2ae0fd56abbfeee4a8ca019c1011d327c577e'\nhash('QGIS', 'keccak_384') \u2192 'c57a3aed9d856fa04e5eeee9b62b6e027cca81ba574116d3cc1f0d48a1ef9e5886ff463ea8d0fac772ee473bf92f810d'\nhash('QGIS', 'keccak_512') \u2192 '6f0f751776b505e317de222508fa5d3ed7099d8f07c74fed54ccee6e7cdc\u2026'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#md5","title":"md5","text":"Crea un hash md5 da una stringa.
Sintassi:
Argomenti:
Esempi:
md5('QGIS') \u2192 '57470aaa9e22adaefac7f5f342f1c6da'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#sha256","title":"sha256","text":"Crea un hash sha256 da una stringa.
Sintassi:
Argomenti:
Esempi:
sha256('QGIS') \u2192 'eb045cba7a797aaa06ac58830846e40c8e8c780bc0676d3393605fae50c05309'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_base64","title":"to_base64","text":"Decodifica una stringa Base64 in un valore binario.
Sintassi:
Argomenti:
Esempi:
to_base64('QGIS') \u2192 'UUdJUw=='\n
In un layer di un GeoPackage aggiungere un campo BLOB e popolarlo con delle immagini; per visualizzarle, per esempio come Simbolo Immagine Raster
, utilizzare l'espressione:
'base64:' || to_base64(\"fieldBLOB\")\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_date","title":"to_date","text":"Converte una stringa in un oggetto data.
Sintassi:
Argomenti:
Esempi:
to_date('2012-05-04') \u2192 2012-05-04\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_datetime","title":"to_datetime","text":"Converte una stringa in un oggetto datetime.
Sintassi:
Argomenti:
Esempi:
to_datetime( '2018-05-06 12:02:00') \u2192 2018-05-06T12:02:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_decimal","title":"to_decimal","text":"Converte una coordinata in gradi, minuti e secondi nel suo equivalente decimale.
Sintassi:
Argomenti:
Esempi:
to_decimal('6\u00b09\u203216.445\u2033')) \u2192 6.154568055555556\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_dm","title":"to_dm","text":"Converte una coordinata in gradi, minuti
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_dm(6.3545681, 'x', 3) \u2192 6\u00b021.274\u2032\nto_dm(6.3545681, 'y', 4, 'suffix') \u2192 6\u00b021.2741\u2032N\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_dms","title":"to_dms","text":"Converte una coordinata in gradi, minuti e secondi
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_dms(6.3545681, 'x', 3) \u2192 6\u00b021\u203216.445\u2033\nto_dms(6.3545681, 'y', 4, 'suffix') \u2192 6\u00b021\u203216.4452\u2033N\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_int","title":"to_int","text":"Converte una stringa in un numero intero. Non viene restituito nulla se un valore non pu\u00f2 essere convertito ad intero (es. '123asd' non \u00e8 valido)
Sintassi:
Argomenti:
Esempi:
to_int('123') \u2192 123\n
Nota bene:
un testo va scritto sempre tra apici semplici es: '123'
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_interval","title":"to_interval","text":"Converte una stringa in un tipo intervallo. Pu\u00f2 essere usata per estrarre giorni, ore, mese, etc. da una data.
Sintassi:
Argomenti:
Esempi:
to_datetime('2018-05-04 12:23:00') - to_interval('1 day 2 hours') \u2192 2018-05-03T10:23:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_real","title":"to_real","text":"Converte una stringa in un numero reale. Non viene restituito nulla se un valore non pu\u00f2 essere convertito a reale (es. '123.56asd' non \u00e8 valido). I numeri sono arrotondati dopo aver salvato le modifiche se la precisione \u00e8 minore del risultato della conversione.
Sintassi:
Argomenti:
Esempi:
to_real('123.45') \u2192 123.45\n
Nota bene:
Il punto (.
) \u00e8 il separatore decimale.
Converte una stringa in un numero reale. Non viene restituito nulla se un valore non pu\u00f2 essere convertito a reale (es. '123.56asd' non \u00e8 valido). I numeri sono arrotondati dopo aver salvato le modifiche se la precisione \u00e8 minore del risultato della conversione.
Sintassi:
Argomenti:
Esempi:
to_string(123.45) \u2192 '123.45'\nto_string(123) \u2192 '123'\n
Nota bene:
Il punto (.
) \u00e8 il separatore decimale; una stringa \u00e8 sempre tra apici semplici es: '123'.
Converti una stringa in un oggetto time.
Sintassi:
Argomenti:
Esempi:
to_time('12:30:01') \u2192 12:30:0\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/","title":"Gruppo corrispondenza fuzzy","text":"Abstract
Questo gruppo contiene funzioni per confronti fuzzy fra valori.
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#hamming_distance","title":"hamming_distance","text":"Restituisce la distanza di Hamming tra due stringhe. Questa equivale al numero di caratteri nelle corrispondenti posizioni delle stringhe in ingresso dove i caratteri sono diversi. Le stringhe in ingresso devono avere la stessa lunghezza, e il confronto \u00e8 sensibile alle lettere maiuscole.
Sintassi:
Argomenti:
Esempi:
hamming_distance('abc','xec') \u2192 2\nhamming_distance('abc','ABc') \u2192 2\nhamming_distance(upper('abc'),upper('ABC')) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#levenshtein","title":"levenshtein","text":"Restituisce la distanza di Levenshtein tra due stringhe. Questa equivale al minimo numero di modifiche di caratterere (inserimenti, cancellazioni o sostituzione) richieste per cambiare una stringa in un'altra. La distanza di Levenshtein \u00e8 una misura della somiglianza tra due stringhe. Distanze pi\u00f9 piccole corrispondono a stringhe pi\u00f9 simili, e distanze pi\u00f9 grandi corrispondono a stringhe pi\u00f9 differenti. La distanza \u00e8 sensibile alle lettere maiuscole.
Sintassi:
Argomenti:
Esempi:
levenshtein('kittens','mitten') \u2192 2\nlevenshtein('Kitten','kitten') \u2192 1\nlevenshtein(upper('Kitten'),upper('kitten')) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#longest_common_substring","title":"longest_common_substring","text":"Restituisce la sottostringa in comune pi\u00f9 lunga tra due stringhe. Questa sottostringa \u00e8 la stringa pi\u00f9 lunga che \u00e8 una sottostringa delle due stringhe in ingresso. Es: la sottostringa in comune pi\u00f9 lunga di \"ABABC\" e \"BABCA\" \u00e8 \"ABC\". La sottostringa \u00e8 sensibile alle lettere maiuscole
Sintassi:
Argomenti:
Esempi:
longest_common_substring('ABABC','BABCA') \u2192 'ABC'\nlongest_common_substring('abcDeF','abcdef') \u2192 'abc'\nlongest_common_substring(upper('abcDeF'),upper('abcdex')) \u2192 'ABCDE'\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#soundex","title":"soundex","text":"Restituisce la rappresentazione Soundex di una stringa. Soundex \u00e8 un algoritmo di abbinamento fonetico, per cui le stringhe con suoni simili dovrebbero essere rappresentate dallo stesso codice Soundex.
Sintassi:
Argomenti:
Esempi:
soundex('robert') \u2192 'R163'\nsoundex('rupert') \u2192 'R163'\nsoundex('rubin') \u2192 'R150'\n
secondo questo algoritmo Sicilia bedda e Sicilia bella hanno stesso suono
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/","title":"Gruppo Custom","text":"Abstract
Questo gruppo contiene funzioni Python create dall'utente. Le funzioni vanno salvate in file *.py nella cartella espression
presente nel profilo utente QGIS (C:\\Users\\nomeUtente\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\python\\expressions)
Un ringraziamento particolare a Giulio Fattori, autore di molte di queste funzioni personalizzate
Calcola il fattoriale di un numero definito come il prodotto di tutti i numeri tra 1 e n. Per convenzione il fattoriale di 0 = 1 la notazione matematica per fattoriale \u00e8 n! La funzione \u00e8 compresa nel modulo math NB: valore massimo memorizzabile in un campo numerico \u00e8 20! (2432902008176640000)
Sintassi:
Argomenti:
Esempio:
fact(10)\u2192 3628800\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\nimport math\n\n@qgsfunction(args='auto', group='Custom')\ndef fact(n, feature, parent):\n \"\"\"\n Calcola il fattoriale di un numero\n definito come il prodotto di tutti\n i numeri tra 1 e n.<ul> </ul>\n Per convenzione il fattoriale di 0 = 1\n la notazione matematica per fattoriale \u00e8 n!\n La funzione \u00e8 compresa nel modulo math\n NB: valore massimo memorizzabile 20!\n <ul> </ul>\n <h2>Example usage:</h2>\n <ul>\n <li>Fattoriale(5) -> 120</li>\n <li>in simboli 5! = 120</li>\n </ul>\n \"\"\"\n return math.factorial(n)\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#my_sum","title":"my_sum","text":"Calcola la somma dei due parametri valore1 e valore2.
Sintassi:
Argomenti:
my_sum(5, 8) -> 13\nmy_sum(\"fiel1\", \"field2\") -> 42\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom')\ndef my_sum(value1, value2, feature, parent):\n \"\"\"\n Calcola la somma dei due parametri valore1 e valore2.\n <h2>Esempio di utilizzo:</h2>\n <ul>\n <li>my_sum(5, 8) -> 13</li>\n <li>my_sum(\"fiel1\", \"field2\") -> 42</li>\n </ul>\n \"\"\"\n return value1 + value2\n
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#perimetro_km","title":"perimetro_km","text":"Questa funzione ritorna il valore del perimetro della geometria in km
Sintassi:
Argomenti:
Esempio:
perimetro_km() - > 25\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom')\ndef perimetro_km( feature, parent):\n \"\"\" \n Questa funzione ritorna il valore del perimetro della geometria in km\n <ul>\n <li>perimetro_km() - > 25</li>\n </ul>\n \"\"\"\n geom_perimetro_km = feature.geometry().length()/1000\n return geom_perimetro_km\n
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#reverse_string","title":"reverse_string","text":"Questa funzione ritorna il valore rovesciato di un testo
Sintassi:
Argomenti:
reverse_string('Pigrecoinfinito) - > 'otinifniocergiP' `\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom')\ndef reverse_string(string_to_reverse, feature, parent):\n \"\"\" \n Questa funzione ritorna il valore rovesciato di un testo\n <ul>\n <li>reverse_string('Pigrecoinfinito) - > 'otinifniocergiP'</li>\n </ul>\n \"\"\"\n return string_to_reverse[::-1]\n
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#get_parcel_info","title":"get_parcel_info","text":"WMS Catasto Agenzia delle Entrate CC BY 4.0:
La funzione, tramite una richiesta GetFeatureInfo, restituisce le informazioni utili sulla particella che ricade sotto il pixel di mio interesse:
Sintassi:
Argomenti:
Esempio:
get_parcel_info(355461.5,4222490.7) \u2192 'IT.AGE.PLA.G273_0033A0.673'\n
codice Python:
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n WMS Catasto Agenzia delle Entrate CC BY 4.0\n -------------------\n copyright : (C) 2020 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport requests\n\n\n\n@qgsfunction(args='auto', group='Custom')\ndef get_parcel_info(xx, yy, feature, parent):\n \"\"\"\n <h1>WMS Catasto Agenzia delle Entrate CC BY 4.0:</h1><br> \n La funzione, tramite una richiesta GetFeatureInfo, restituisce le informazioni utili sulla particella che ricade sotto il pixel di mio interesse:\n <h2>Esempio:</h2>\n <ul>\n <li>get_parcel_info(355461.5,4222490.7) -> 'IT.AGE.PLA.G273_0033A0.673'</li>\n <li>get_parcel_info(\"fieldX\", \"fieldY\") -> 'IT.AGE.PLA.G273_0033A0.673'</li>\n </ul>\n <h2>NB: le coordinate X e Y devono essere in EPSG 3045</h2>\n \"\"\"\n req = \"https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?REQUEST=GetFeatureInfo&SERVICE=WMS&SRS=EPSG:3045&STYLES=&VERSION=1.1&FORMAT=image/png&BBOX=\"+str(xx-1)+\",\"+str(yy-1)+\",\"+str(xx+1)+\",\"+str(yy+1)+\"&HEIGHT=9&WIDTH=9&LAYERS=CP.CadastralParcel&QUERY_LAYERS=CP.CadastralParcel&INFO_FORMAT=text/html&X=5&Y=5\"\n\n r = requests.get(req, auth=('user', 'pass'))\n a = r.text.partition(\"InspireId localId</th><td>\")[2]\n b = a.partition(\"</td>\")[0]\n return b\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#get_catastal_info","title":"get_catastal_info","text":"Catasto Agenzia delle Entrate CC BY 4.0:
La funzione, tramite una richiesta ajax.php, restituisce le informazioni disponibili su quel che ricade sotto il punto selezionato.
Sintassi:
Argomenti:
chiave per le Particelle:
Esempio:
get_catastal_info(12.567315,37.914197, 'TIPOLOGIA') -> 'ACQUA'\n
codice Python:
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n WMS Catasto Agenzia delle Entrate CC BY 4.0\n -------------------\n copyright : (C) 2020 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport requests, json\n\n@qgsfunction(args='auto', group='Custom')\ndef get_catastal_info(xx, yy, chiave, feature, parent):\n \"\"\"\n <h1>Catasto Agenzia delle Entrate CC BY 4.0:</h1> \n La funzione, tramite una richiesta ajax.php, restituisce le informazioni disponibili su quel che ricade sotto il punto selezionato.\n\n <p style=\"color:Olive\"><b>Sintassi</b></p>\n <p style=\"color:blue\"><b>get_catastal_info</b><mark style=\"color:black\">(</mark>\n <mark style=\"color:red\">x</mark>\n <mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">y</mark>\n <mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">chiave</mark>\n <mark style=\"color:black\">)</mark><br>\n\n <br><mark style=\"color:black\"><b>Le possibili chiavi sono:\n <ul>\n Per le particelle:\n <li>SIGLA_PROV</li>\n <li>COD_COMUNE</li>\n <li>DENOM</li>\n <li>SEZIONE</li>\n <li>FOGLIO</li>\n <li>ALLEGATO</li>\n <li>SVILUPPO</li>\n <li>NUM_PART</li>\n <li>TIPOLOGIA</li>\n </ul> \n <ul>Per Acque e Strade:\n <li>TIPOLOGIA</li>\n <li>COMUNI</li>\n </ul></b>\n\n <h2>Esempio:</h2>\n <ul>\n <li>get_catastal_info(12.567315,37.914197, 'TIPOLOGIA') -> 'ACQUA'</li>\n </ul>\n\n <h2><b>Le coordinate X e Y devono essere espresse nel sistema WGS84 (EPSG:4326)</h2>\n <h2><b>Il campo risultante deve essere di tipo string di adeguata lunghezza</h2>\n <h2><b>Se la chiave non \u00e8 presente risulter\u00e0 ND</h2>\n \"\"\"\n\n req = \"https://wms.cartografia.agenziaentrate.gov.it/inspire/ajax/ajax.php?op=getDatiOggetto&lon=\" + str(xx) + \"&lat=\" + str(yy)\n r = requests.get(req, auth=('user', 'pass'))\n res = json.loads(r.text)\n try:\n b = str(res[chiave])\n except:\n b = 'ND'\n\n return b\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#fill-down","title":"fill-down","text":"Restituisce un valore dal campo specificato, dove il valore del campo della riga precedente viene propagato ai campi con valori NULL
successivi. Opera in base all'id dei record.
Sintassi:
Argomenti:
Esempio:
fill-down(\"attributo\")\n
from qgis.core import *\nfrom qgis.gui import *\nmem = 'NULL'\n\n@qgsfunction(args='auto', group='Custom', handlesnull=True)\ndef fill_down(value1, feature, parent):\n \"\"\"\n Restituisce un valore dal campo specificato,\n dove il valore del campo della riga precedente\n viene propagato ai campi con valori Null successivi\n <p> \n Returns a value from the specified field,\n where the value of the field of the previous row\n it is propagated to subsequent null fields\n <h2>Example usage:</h2>\n <ul>\n <li>fill_down(\"Dato\") -> Fill_Data</li>\n <table>\n <thead>\n <tr>\n <th>Dato</th>\n <th>Fill_Data</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td style=\"text-align:right\">a</td>\n <td style=\"text-align:right\">a</td>\n </tr>\n <tr>\n <td> </td>\n <td style=\"text-align:right\">a</td>\n </tr>\n <tr>\n <td> </td>\n <td style=\"text-align:right\">a</td>\n </tr>\n <tr>\n <td style=\"text-align:right\">b</td>\n <td style=\"text-align:right\">b</td>\n </tr>\n <tr>\n <td></td>\n <td style=\"text-align:right\">b</td>\n </tr>\n </tbody>\n </table>\n </ul>\n\n Opera in base all'id dei record\n <p>\n Operate based on the ID of the records\n \"\"\"\n global mem\n res = str(value1)\n if res in ('NULL',''):\n res = mem\n else:\n mem = str(value1)\n return res\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#random_points_in_polygon","title":"random_points_in_polygon","text":"Genera 'n' di punti all'interno della geometria del poligono corrente.
Sintassi:
Argomenti:
from qgis.core import *\nfrom qgis.gui import *\n\nimport random # Needed for generating pseudo random numbers\n\n@qgsfunction(args='auto', group='Custom')\ndef random_points_in_polygon(number_of_points, feature, parent):\n \"\"\"\n <i>random_points_in_polygon( n )</i><br><br>\n Generates 'n' number of points inside the current polygon geometry.<br><br>\n <b>Requires</b><br>\n <i>n</i> (Integer)<br><br>\n <b>Example</b><br>\n <i>random_points_in_polygon( 25 )</i><br>\n <br>\n <geometry: MultiPoint> with 25 points\n \"\"\"\n points = list() # Create an empty list for the points\n\n\n # Until there's the required points in the list, loop (not the best way probably)\n while len(points) < number_of_points:\n # Create random x and y coordinates inside feature geometry bounding box\n rnd_x = random.uniform(feature.geometry().boundingBox().xMinimum(), feature.geometry().boundingBox().xMaximum())\n rnd_y = random.uniform(feature.geometry().boundingBox().yMinimum(), feature.geometry().boundingBox().yMaximum())\n # Use the coordinates to create a point\n rnd_point = QgsPointXY(rnd_x, rnd_y)\n\n # Test if the point is inside the feature geometry\n if QgsGeometry.fromPointXY(rnd_point).within(feature.geometry()):\n # If it is inside, add it to the list (increasing the length of the list)\n points.append(rnd_point)\n\n # Return a multipoint geometry\n return QgsGeometry.fromMultiPointXY(points)\n
Lo script Python \u00e8 stato realizzato da
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#randomize","title":"randomize","text":"Calcola un valore random intero univoco compreso tra start e stop.
ATTENZIONE A NON IMPOSTARE L'INTERVALLO MINORE DEL NUMERO DI FEATURE
Sintassi:
Argomenti:
Esempi:
randomize( 0, 1000 ) -> 13 \n
Osservazione:
La funzione \u00e8 particolarmente utile se si volessero generare, tra start e stop, enne valori casuali univoci (senza ripetizioni)
from qgis.core import *\nfrom qgis.gui import *\nimport random\n\nrandom_list = []\n\n@qgsfunction(args='auto', group='Custom')\n\ndef randomize(start, stop, feature, parent):\n \"\"\"\n Calcola un valore random intero univoco\n compreso tra start e stop\n <ul>ATTENZIONE A NON IMPOSTARE L'INTERVALLO MINORE DEL NUMERO DI FEATURE\n </ul>\n <h2>Example usage:</h2>\n <ul>\n <li>randomize( 0, 1000 ) -> 13</li>\n </ul>\n \"\"\"\n a = random.randint(start, stop)\n\n while a in random_list:\n a = random.randint(start, stop)\n\n random_list.append(a)\n\n return a\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#get_catg_color","title":"get_catg_color","text":"Restituisce il colore RGBA (stringa [r,g,b,a] come intero 0-255) dell'elemento categorizzato: il campo in input \u00e8 quello utilizzato per la categorizzazione. Per i campi della categorizzazione numerici formattatarli opportunamente e utilizzare la stessa espressione per catturarne il colore.
Sintassi:
Argomenti:
Esempi:
get_catg_color(\"nomeCampoCategoria\") \u2192 '228,52,199,255'\nget_catg_color(to_string(format_number(\"nomeCampoCategoria\",2))) \u2192 '228,52,199,255'\n
from qgis.core import *\nfrom qgis.gui import *\nfrom qgis.utils import iface\n\n@qgsfunction(args='auto', group='Custom')\ndef get_catg_color(value, feature, parent):\n \"\"\"\n Restituisce il colore RGBA (stringa [r,g,b,a] come intero 0-255) dell'elemento categorizzato:\n il campo in input \u00e8 quello utilizzato per la categorizzazione\n Per i campi della categorizzazione numerici formattatarli opportunamente e \n utilizzare la stessa espressione per catturarne il colore\n\n <h2>Example usage:</h2>\n <ul>\n <li>get_color(\"nomeCampoCategoria\") -> '228,52,199,255'</li>\n <li>get_color(to_string(format_number(\"nomeCampoCategoria\",2))) -> '228,52,199,255'</li>\n </ul>\n \"\"\"\n\n layer = iface.activeLayer()\n renderer = layer.renderer()\n\n if layer.renderer().type() == \"categorizedSymbol\":\n campo = renderer.legendClassificationAttribute()\n\n for cat in renderer.categories():\n if str(value) == cat.value():\n colorato = cat.symbol().symbolLayer(0).properties()['color']\n break\n\n return colorato\n
Osservazioni:
La funzione \u00e8 utile nel Plugin DataPlotly per associare i colori ai grafici.
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#svg_pie","title":"svg_pie","text":"Genera un grafico a torta inseribile in una cornice HTML nel compositore di stampe.
Sintassi:
Argomenti:
Esempi:
svg_Pie(array(.5,.1,.3),.8,array('red','cyan','gray'),array('uno','due','tre'),0)\n
La somma delle percentuali deve essere pari a 1 o inferiore Se la somma delle percentuali e' inferiore al 100% ci sara' un settore vuoto. Elenco dei colori desiderati, se vuoto o in numero insufficiente saranno utilizzati quelli di default. Elenco delle descrizioni, se vuoto o in numero insufficiente sara' utilizzato il carattere spazio.
Colori di default in ordine di utilizzo Red, Aquamarine, Orange, Cyan, Yellow, Green, Grey, Beige, Gold, DarkKhaki, Royalblue, Fucsia \u00e8 comunque possibile utilizzare qualsiasi colore CSS inserendone il nome.
#Korto19 2021\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport math\n\n@qgsfunction(args='auto', group='Custom')\ndef svg_pie(value, donut, pcol, flipper, legenda, feature, parent):\n \"\"\"\n Genera un grafico a torta inseribile in una cornice HTML nel compositore di stampe\n <p style=\"color:Olive\"><b>Sintassi</b></p>\n <p style=\"color:blue\"><b>svg_pie</b><mark style=\"color:black\">(</mark>\n <mark style=\"color:red\">array(values)</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">donut</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">array(colors)</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">array(descriptions)</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">legenda</mark><mark style=\"color:black\">)</mark>\n <p style=\"color:Olive\"><b>Argomenti</b></p>\n <p style=\"color:red\"><b>array(val)</b><mark style=\"color:black\"> - array percentuali </mark><br>\n <mark style=\"color:red\"><b>donut </b><mark style=\"color:black\"> - raggio del vuoto al centro [0-1]</mark><br>\n <mark style=\"color:red\"><b>array(colors) </b><mark style=\"color:black\"> - array colori</mark><br>\n <mark style=\"color:red\"><b>array(descriptions) </b><mark style=\"color:black\"> - array descrizioni</mark><br>\n <mark style=\"color:red\"><b>legenda</b><mark style=\"color:black\"> - legenda [-1] - percentuali interne[0] - legenda [1]</mark></p>\n <h2><strong>Example usage:</strong></h2>\n <ul>\n <li>svg_Pie(array(.5,.1,.3),.8,array('red','cyan','gray'),array('uno','due','tre'),0)<li>\n </ul> \n <br> \n <strong> La somma delle percentuali deve essere pari a 1 o inferiore</strong><br>\n <strong> Se la somma delle percentuali e' inferiore al 100% ci sara' un settore vuoto</strong><br>\n <strong> Elenco dei colori desiderati, se vuoto o in numero insufficiente saranno utilizzati quelli di default</strong><br>\n <strong> Elenco delle descrizioni, se vuoto o in numero insufficiente sara' utilizzato il carattere spazio</strong><br><br>\n Colori di default in ordine di utilizzo<br>\n Red, Aquamarine, Orange, Cyan, Yellow, Green, Grey, Beige, Gold, DarkKhaki, Royalblue, Fucsia<br>\n e' comunque possibile utilizzare qualsiasi colore CSS inserendone il nome\n \"\"\"\n dcol = ['red', 'Aquamarine', 'orange', 'cyan', 'yellow', 'green', 'grey', 'beige', 'Gold', 'DarkKhaki', 'royalblue', 'fucsia']\n\n #aggiunge colori mancanti\n if len(pcol) < len(value):\n for j in range (0, len(value)-len(pcol)+1):\n if dcol[j] not in pcol:\n pcol.append(dcol[j])\n\n #aggiunge vuoti se non ci son testi\n if len(flipper) < len(value):\n for j in range (0, len(value)-len(flipper)+1):\n flipper.append('')\n\n vc = 0.85\n vt = -0.81\n\n xi = '1'\n yi = '0'\n\n if legenda:\n riq = '''viewBox=\"-1.2 -1.2 4 4\"'''\n else:\n riq = '''viewBox=\"-1.1 -1.1 2.2 2.2\"'''\n\n svg_text = '''<svg width=\"100%\" heigth=\"100%\"'''+riq+'''\" >\n <style>\n #legend{\n text-anchor: middle;\n font-weight: bold;\n font-size: .008em;\n fill: purple;\n }\n text{\n font-weight: light;\n font-size: .006em;\n font-family: Arial;\n transform: rotate(90deg);\n }\n #perc{\n fill: black;\n font-weight: bold;\n font-size: .006em;\n font-family: Arial;\n text-anchor: middle;\n }\n path{\n stroke: white;\n stroke-width: 0.01;\n }\n </style>\n <g transform=\"translate(0,0) rotate(-90)\">'''\n\n if sum(value[0:])>1:\n svg_text = 'Somma valori maggiore del 100%'\n else:\n for i in range (0, len(value)):\n pr = sum(value[0:i+1])\n vx = str(math.cos(2*3.14*pr))\n vy = str(math.sin(2*3.14*pr))\n if value[i] > 0.5:\n larc = '1'\n else:\n larc = '0'\n svg_text = svg_text + '''<path d= \"M '''+ xi + ''' ''' + yi +''' A 1 1 0 ''' + larc + ''' 1 '''+ vx + ''' ''' + vy +''' L 0 0\" fill=\"''' + pcol[i] + '''\"/>'''\n xi = vx\n yi = vy\n\n if legenda == -1:\n svg_text = svg_text + '''<circle r=\"0.06\" cx=\"'''+ str(vc) +'''\" cy=\"1.4\" fill=\"''' + pcol[i] + '''\"/>\n <text x=\"1.5\" y=\"'''+ str(vt) +'''\" >'''+ \"{:.2%}\".format(value[i]) + \" \" + flipper[i] + '''</text>'''\n vc = vc - .2\n vt = vt + .2\n\n if legenda == 1:\n svg_text = svg_text + '''<circle r=\"0.06\" cx=\"'''+ str(vc) +'''\" cy=\"1.4\" fill=\"''' + pcol[i] + '''\"/>\n <text x=\"1.5\" y=\"'''+ str(vt) +'''\" >'''+ \" \" + flipper[i] + '''</text>'''\n vc = vc - .2\n vt = vt + .2\n\n if pr > 0.5:\n larc = '0'\n else:\n larc = '1'\n\n if donut:\n svg_text = svg_text + '''<circle r=\"''' + str(donut) + '''\" cx=\"0\" cy=\"0\" fill=\"white\" />'''\n\n if legenda:\n svg_text = svg_text + '''<text id=\"legend\" x=\"1.9\" y=\"-1\">Legenda</text>'''\n\n #scrive percentuali entro torta\n if legenda >= 0:\n pr = 0\n for i in range (0, len(value)):\n pr = sum(value[0:i+1]) - value[i]/2\n vx = 0.8*math.cos(2*3.14*(pr-.25))\n vy = 0.8*math.sin(2*3.14*(pr-.25))\n svg_text = svg_text + '''<text id=\"perc\" x=\"''' + str(vx) + '''\" y=\"''' + str(vy) + '''\">'''+\"{:.2%}\".format(value[i]) +'''</text>'''\n\n svg_text = svg_text + '''</g></svg>'''\n\n return svg_text\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#minmaxvaluefieldname","title":"MinMaxValueFieldName","text":"Restituisce il nome/valore della colonna col minimo o massimo valore nella riga.
Sintassi:
Argomenti:
Avvertenze:
La funzione va in errore se non esclusi tutti i campi testo.
Esempi:
MinMaxValueFieldName( attributes(),array('fid','PRO_COM','COMUNE'),'vmax','fname') -> '2012' \nMinMaxValueFieldName( attributes(),array( fid','PRO_COM','COMUNE'),'vmax','fval') -> '19250'\n
#Korto19 2021\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport json\n\n@qgsfunction(args='auto', group='Custom')\ndef MinMaxValueFieldName(attrmap, esclusion, minmax, vresult, feature, parent):\n \"\"\"\n Restituisce il nome della colonna col minimo o massimo valore nella riga<p>\n La funzione <b>MinMaxValueFieldName(attrmap, esclusion, minmax, vresult)</b> richiede quattro parametri:\n <ul>\n <li> <b>attrmap</b> deve essere la funzione <b>attributes()</b> che restituisce tutti i nomi dei campi</li>\n <li> <b>array()</b> contiene l'elenco dei campi da escludere delimitati da apici</li>\n <li> <b>minmax</b> per considerare il minimo <b>vmin</b> o massimo <b>vmax</b></li>\n <li> <b>vresult</b> per ottenere il nome <b>fname</b> o valore <b>fval</b> del campo</li>\n </ul>\n\n <h2>Esempi d'uso:</h2>\n <ul>\n <li>MinMaxValueFieldName( attributes(),array( 'fid' , 'PRO_COM' , 'COMUNE' ), 'vmax', 'fname') -> '2012'</li>\n <li>MinMaxValueFieldName( attributes(),array( 'fid' , 'PRO_COM' , 'COMUNE' ), 'vmax', 'fval') -> '19250'</li>\n </ul>\n\n <b><h2>AVVERTENZE:</h2>\n <ul>\n <li>La funzione va in errore se non esclusi tutti i campi testo</li>\n </ul></b>\n\n \"\"\"\n #Trasformo in array l'elenco dei campi\n esclusion = json.dumps(esclusion)\n #Recupero i valori numerici della riga\n _attrmap = {key: attrmap[key] for key in attrmap.keys() if key not in esclusion and attrmap[key] is not None} # exclude not needed fields\n #Discrimino per vmin o vmax\n if vresult == 'fname':\n if minmax == 'vmax':\n result = [k for k,v in _attrmap.items() if v==max(_attrmap.values())][0]\n elif minmax == 'vmin':\n result = [k for k,v in _attrmap.items() if v==min(_attrmap.values())][0]\n elif vresult == 'fval':\n if minmax == 'vmax':\n result = [v for k,v in _attrmap.items() if v==max(_attrmap.values())][0]\n elif minmax == 'vmin':\n result = [v for k,v in _attrmap.items() if v==min(_attrmap.values())][0]\n return result\n
Lo script \u00e8 stato riscritto da Giulio Fattori, la fonte \u00e8 qui, grazie Taras
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#ordina-array-alfanumerico-in-modo-numerico","title":"Ordina array alfanumerico in modo numerico","text":"# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Ordina array alfanumerico in modo numerico\n -------------------\n copyright : (C) 2021 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom', referenced_columns=[])\ndef array_sort_special(value1, feature, parent):\n \"\"\"\n Ordina un array alfanumerico numericamente\n <h2>Esempio:</h2>\n <ul>\n <li>array_sort_special('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']</li>\n </ul>\n \"\"\"\n\n data = value1.split('-')\n r = sorted(data, key=lambda item: (int(item.partition('/')[0])\n if item[0].isdigit() else float('inf'), item))\n #return (','.join(r))\n return r\n
Lo script \u00e8 stato riscritto da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#natural-sorting","title":"Natural sorting","text":"from qgis.core import *\nfrom qgis.gui import *\nimport re\n\ndef natural_sort_key(s):\n ns = re.compile('([0-9]+)')\n return [int(t) if t.isdigit() else t.lower() for t in re.split(ns, s)] \n\n@qgsfunction(args='auto', group='Custom', usesgeometry=False)\ndef sort_my_list(field, feature, parent):\n \"\"\"\n Ordina un array secondo la Natural sorting\n <h2>Esempio:</h2>\n <ul>\n <li>sort_my_list('field') -> 'elementi ordinati'</li>\n </ul>\n\n Nota: il nome del parametro del campo (field) per sort_my_addresses \n deve essere compreso tra virgolette singole ('), non virgolette doppie (\").\n Ad esempio 'field', non \"field\"\n <ul>\n by Kadir \u015eahbaz\n </ul>\n Commentare decomentare le ulti due righe per avere una array o una stringa\n \"\"\"\n\n _list = feature[field].split(\"-\")\n _list.sort(key=natural_sort_key)\n return _list\n #return ','.join(_list)\n
Lo script \u00e8 stato riscritto da Kadir \u015eahbaz
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#dimensioni-immagini","title":"Dimensioni immagini","text":"Estrae le dimensioni delle immagini in pixel nei casi di immagine con link assoluto o memorizzate come BLOB:
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Dimensioni immagini\n -------------------\n copyright : (C) 2022 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nfrom PyQt5.QtGui import QImage, QImageReader\n\n@qgsfunction(args='auto', group='Custom', referenced_columns=[])\ndef get_blob_sizes(img_blob, feature, parent):\n \"\"\"\n Calculate blob image dimension (W x H)\n <h2>Example usage:</h2>\n <ul>\n <li>get_blob_sizes(\"img_blob\") -> '1024 x 512 px'</li>\n </ul>\n \"\"\"\n\n image = QImage().fromData(img_blob)\n sizeOfImage = image.size()\n img_height = sizeOfImage.height()\n img_width = sizeOfImage.width()\n dim_blob = str(img_width)+ ' x ' + str(img_height) + ' px '\n\n return dim_blob\n\n@qgsfunction(args='auto', group='Custom', referenced_columns=[])\ndef get_image_sizes(img_shape, feature, parent):\n \"\"\"\n Calculate blob image size\n <h2>Example usage:</h2>\n <ul>\n <li>get_image_sizes(img_shape) -> '1024 x 512 px'</li>\n </ul>\n NEED ABSOLUTE IMAGE LINK\n \"\"\"\n\n reader = QImageReader(img_shape)\n sizeOfImage = reader.size()\n img_height = sizeOfImage.height()\n img_width = sizeOfImage.width()\n dim_image = str(img_width)+ ' x ' + str(img_height) + ' px '\n\n return dim_image\n
Lo script \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#ordina-i-punti-lungo-una-linea-orientata","title":"Ordina i punti lungo una linea orientata","text":"Restituisce l'ordinamento di elementi puntuali rispetto ad una linea orientata
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Ordina i punti lungo una linea orientata\n -------------------\n copyright : (C) 2022 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom', usesgeometry=True)\ndef order_point_along_line(r_layer, v_reverse, feature, parent, context):\n \"\"\"\n Restituisce l'ordinamento di elementi puntuali rispetto ad una linea orientata\n <p style=\"color:Red\">Va eseguita su di un layer puntuale aggiungendo un campo numerico</p>\n <p style=\"color:Red\">Il parametro v_layer \u00e8 il nome del vettore lineare</p>\n <p style=\"color:Red\">Il parametro v_reverse \u00e8 un booleano 0/1 permette l'inversione della linea</p>\n <p>\n <h2>Example usage:</h2>\n <ul>\n <li>order_point_along_line('r_layer', v_reverse)</li>\n <li>da come risultato il numero d'ordine progressivo del punto</li>\n </ul>\n <p>Tratto da:</p>\n <p style=\"color:blue\">https://pigrecoinfinito.com/2022/03/14/ordinare-i-punti-lungo-una-linea</p>\n \"\"\"\n if v_reverse == 0:\n expression = QgsExpression(\"with_variable ('nearest',\\\n overlay_nearest(\\'\" + r_layer + \"\\',$geometry)[0],\\\n array_find(\\\n array_sort(\\\n array_foreach(\\\n array_agg($geometry, group_by:=@nearest),\\\n line_locate_point(@nearest,@element))),\\\n line_locate_point(@nearest,$geometry))+1\\\n )\"\n )\n else:\n expression = QgsExpression(\"with_variable ('nearest',\\\n overlay_nearest(\\'\" + r_layer + \"\\',reverse($geometry))[0],\\\n array_find(\\\n array_sort(\\\n array_foreach(\\\n array_agg($geometry, group_by:=@nearest),\\\n line_locate_point(@nearest,@element))),\\\n line_locate_point(@nearest,$geometry))+1\\\n )\"\n )\n\n n_point = expression.evaluate(context)\n return n_point\n
Lo script \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#estrarre-testo-da-legenda-categorizzata","title":"Estrarre testo da legenda categorizzata","text":"Estrarre il testo decodifica dalla legenda
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Ordina i punti lungo una linea orientata\n -------------------\n copyright : (C) 2022 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nfrom qgis.utils import iface\n\n@qgsfunction(args='auto', group='Custom')\ndef get_catg_label(value_in, feature, parent):\n \"\"\"\n Restituisce il testo della legenda dell'elemento categorizzato:\n <br>\n <p><b>il campo in input e' quello utilizzato per la categorizzazione</b>\n <br>\n <h2>Example usage:</h2>\n <ul>\n <li>get_catg_label(\"Area\") -> 'Parcheggio'</li>\n </ul>\n \"\"\"\n\n layer = iface.activeLayer()\n renderer = layer.renderer()\n\n if layer.renderer().type() == \"categorizedSymbol\":\n for cat in renderer.categories():\n #print('val ', type(cat.value()), type(value_in))\n if str(value_in) == str(cat.value()):\n #print('res ',cat.value(), value_in)\n cat_label_out = cat.label()\n break\n else:\n cat_label_out = ''\n\n return cat_label_out\n
Lo script \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/","title":"Gruppo Data e Ora","text":"Abstract
Questo gruppo contiene funzioni per gestire dati con date e ore.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#age","title":"age","text":"Restituisce la differenza fra due date o datetimes. La differenza \u00e8 restituita come Interval e deve essere usata con una della seguenti funzioni per estrarre informazioni utili:
Sintassi:
Argomenti:
Esempi:
age('2012-05-12','2012-05-02') \u2192 intervallo (usa day per estrarre il numero di giorni)\nday(age('2012-05-12','2012-05-02')) \u2192 10\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#datetime_from_epoch","title":"datetime_from_epoch","text":"Restituisce un datetime il cui data e ora sono il numero di millisecondi, msec, che sono passati dal 1970-01-01T00: 00: 00.000, Coordinated Universal Time (Qt.UTC) e convertiti in Qt.LocalTime.
Sintassi:
Argomenti:
Esempi:
datetime_from_epoch(1483225200000) \u2192 2017-01-01T00:00:00\n
Feature introdotta a partire da QGIS 3.12
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#day","title":"day","text":"Estrae il giorno da una data, o il numero dei giorni da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data","title":"Variabile data","text":"Estrae il giorno da una data o un data/ora.
Sintassi:
Argomenti:
Calcola la lunghezza in giorni di un intervallo.
Sintassi:
Argomenti:
Esempi:
day(to_interval('3 days')) \u2192 3\nday(to_interval('3 weeks 2 days')) \u2192 23\nday(age('2012-01-01','2010-01-01')) \u2192 730\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#day_of_week","title":"day_of_week","text":"Restituisce il giorno della settimana per una data o un datetime. L'intervallo del valore restituito v\u00e0 da 0 a 6, dove 0 corrisponde a Domenica e 6 a Sabato.
Sintassi:
Argomenti:
Esempi:
day_of_week(todate('2018-05-09')) \u2192 3 (Mercoled\u00ec)\n
Osservazioni:
Restituisce l'intervallo in millisecondi fra l'epoca unix e la data inserita.
Sintassi:
Argomenti:
Esempi:
epoch(to_date('2017-01-01')) \u2192 1483203600000\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#format_date","title":"format_date","text":"Formatta un tipo di data o stringa in un formato stringa personalizzato. Usa stringhe nel formato data/ora Qt. Vedi QDateTime::toString.
Sintassi:
Argomenti:
Queste espressioni possono essere usate per la parte time della stringa da formattare:
Espressione In uscita h l'ora senza lo zero iniziale (da 0 a 23 o da 1 a 12 se visualizzi AM/PM) hh l'ora con lo zero iniziale (da 00 a 23 o da 01 a 12 se visualizzi AM/PM) H l'ora senza lo zero iniziale (da 0 a 23, anche se visualizzi AM/PM) HH l'ora con lo zero iniziale (da 00 a 23, anche se visualizzi AM/PM) m il minuto senza lo zero iniziale (da 0 a 59) mm il minuto con lo zero iniziale (da 00 a 59) s il secondo senza lo zero iniziale (da 0 a 59) ss il secondo con lo zero iniziale (da 00 a 59) z i millisecondi senza gli zeri iniziali (da 0 a 999) zzz i millisecondi con gli zeri iniziali (da 000 a 999) AP o A interpretato come un orario nel formato AM/PM. AP deve essere \"AM\" oppure \"PM\". ap o a interpretato come un orario nel formato AM/PM. ap deve essere \"am\" oppure \"pm\".Esempi:
format_date('2012-05-15','dd.MM.yyyy') \u2192 '15.05.2012'\nformat_date('2012-05-15','d MMMM yyyy','fr') \u2192 '15 mai 2012'\nformat_date('2012-05-15','dddd') \u2192 'Tuesday', se la lingua corrente \u00e8 una variante inglese\nformat_date('2012-05-15 13:54:20','dd.MM.yy') \u2192 '15.05.12'\nformat_date('13:54:20','hh:mm AP') \u2192 '01:54 PM'\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#hour","title":"hour","text":"Estrae la parte ore da una data/ora o orario, o il numero delle ore da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-ora","title":"Variabile ora","text":"Estrae la parte ore da un orario o data/ora.
Sintassi:
Argomenti:
Esempi:
hour(to_datetime('2018-05-09T11:58:57')) \u2192 11\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_1","title":"Variabile intervallo","text":"Calcola la lunghezza in ore di un intervallo.
Sintassi:
Argomenti:
Esempi:
hour(tointerval('3 hours')) \u2192 3\nhour(age('2012-07-22T13:00:00','2012-07-22T10:00:00')) \u2192 3\nhour(age('2012-01-01','2010-01-01')) \u2192 17520\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_date","title":"make_date","text":"Crea un valore di data dai numeri di anno, mese e giorno.
Sintassi:
Argomenti:
Esempi:
make_date(2020,5,4) \u2192 date value 2020-05-04`
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_datetime","title":"make_datetime","text":"Crea un valore datetime da anno, mese, giorno, ora, minuti e secondi numeri.
Sintassi:
Argomenti:
Esempi:
make_datetime(2020,5,4,13,45,30.5) \u2192 datetime value 2020-05-04 13:45:30.500\n
Osservazioni:
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_interval","title":"make_interval","text":"Crea un valore di intervallo dai valori di anno, mese, settimane, giorni, ore, minuti e secondi.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
make_interval(2020,5,4,13,45,30.5) \u2192 datetime value 2020-05-04 13:45:30.500\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_time","title":"make_time","text":"Crea un valore temporale da ore, minuti e secondi numeri.
Sintassi:
Argomenti:
Esempi:
make_time(13,45,30.5) \u2192 time value 13:45:30.500\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#minute","title":"minute","text":"Estrae la parte minuti da un data/ora o ora, o il numero dei minuti da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-ora_1","title":"Variabile ora","text":"Estrae la parte minuti da una time o una datetime.
Sintassi:
Argomenti:
Esempi:
minute('2012-07-22T13:24:57') \u2192 24\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_2","title":"Variabile intervallo","text":"Calcola la lunghezza in minuti di un intervallo.
Sintassi:
Argomenti:
Esempi:
minute(tointerval('3 minutes')) \u2192 3\nminute(age('2012-07-22T00:20:00','2012-07-22T00:00:00')) \u2192 20\nminute(age('2012-01-01','2010-01-01')) \u2192 1051200\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#month","title":"month","text":"Estrae la parte mese da una data, o il numero di mesi da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data_1","title":"Variabile data","text":"Estrae la parte mese da una data o datetime.
Sintassi:
Argomenti:
Esempi:
month('2012-05-12') \u2192 05\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_3","title":"Variabile intervallo","text":"Calcola la lunghezza in mesi di un intervallo.
Sintassi:
Argomenti:
Esempi:
month(to_interval('3 months')) \u2192 3\nmonth(age('2012-01-01','2010-01-01')) \u2192 24.3333\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#now","title":"now","text":"Restituisce la data e l'ora correnti. La funzione \u00e8 statica e restituir\u00e0 risultati coerenti durante la valutazione. Il tempo restituito \u00e8 il momento in cui viene preparata l'espressione.
Sintassi:
Esempi:
now() \u2192 2018-05-09 12:18:38`\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#second","title":"second","text":"Estrae la parte secondi da un datetime o time, o il numero dei secondi da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-ora_2","title":"Variabile ora","text":"Estrae la parte secondi da una time o una datetime.
Sintassi:
Argomenti:
Esempi:
second('2012-07-22T13:24:57') \u2192 57\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_4","title":"Variabile intervallo","text":"Calcola la lunghezza in secondi di un intervallo.
Sintassi:
Argomenti:
Esempi:
second(age('2012-07-22T00:20:00','2012-07-22T00:00:00')) \u2192 1200\nsecond(age('2012-01-01','2010-01-01')) \u2192 63072000\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_date","title":"to_date","text":"Converte una stringa in un oggetto data. \u00c8 possibile fornire una stringa di formato opzionale per analizzare la stringa; vedi QDate::fromString o la documentazione della funzione format_date per ulteriore documentazione sul formato. Per impostazione predefinita, viene utilizzata la locale dell'utente di QGIS corrente.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_date('2012-05-04') \u2192 2012-05-04\nto_date('June 29, 2019','MMMM d, yyyy') \u2192 2019-06-29, se la locale corrente utilizza il nome 'June' per il sesto mese, altrimenti si verifica un errore\nto_date('29 juin, 2019','d MMMM, yyyy','fr') \u2192 2019-06-29\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_datetime","title":"to_datetime","text":"Converte una stringa in un oggetto datetime. \u00c8 possibile fornire una stringa di formato opzionale per analizzare la stringa; vedi QDate::fromString, QTime::fromString o la documentazione della funzione format_date per ulteriore documentazione sul formato. Per impostazione predefinita, viene utilizzata la locale dell'utente di QGIS corrente.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_datetime('2012-05-04 12:50:00') \u2192 2012-05-04T12:50:00\nto_datetime('June 29, 2019 @ 12:34','MMMM d, yyyy @ HH:mm') \u2192 2019-06-29T12:34, se la locale corrente utilizza il nome 'June' per il sesto mese, altrimenti si verifica un errore\nto_datetime('29 juin, 2019 @ 12:34','d MMMM, yyyy @ HH:mm','fr') \u2192 2019-06-29T12:3\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_interval","title":"to_interval","text":"Converte una stringa in un tipo intervallo. Pu\u00f2 essere usata per estrarre giorni, ore, mese, etc. da una data.
Sintassi:
Argomenti:
Esempi:
to_interval('1 day 2 hours') \u2192 interval: 1.08333 days\nto_interval( '0.5 hours' ) \u2192 intervallo: 30 minuti\nto_datetime('2012-05-05 12:00:00') - to_interval('1 day 2 hours') \u2192 2012-05-04T10:00:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_time","title":"to_time","text":"Converte un stringa in un oggetto ora. Una stringa opzionale di formato pu\u00f2 essere fornita per valutare la stringa; Vedi QTime::fromString per documentazione aggiuntiva sul formato.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
to_time('12:30:01') \u2192 12:30:01\nto_time('12:34','HH:mm') \u2192 12:34:00\nto_time('12:34','HH:mm','fr') \u2192 12:34:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#week","title":"week","text":"Estrae il numero della settimana da una data, o il numero di settimane da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data_2","title":"Variabile data","text":"Estrae il numero della settimana da una data o un datetime.
Sintassi:
Argomenti:
Esempi:
week('2018-05-09') \u2192 19\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_5","title":"Variabile intervallo","text":"Calcola la lunghezza in settimane di un intervallo.
Sintassi:
Argomenti:
Esempi:
week(tointerval('3 weeks')) \u2192 3\nweek(age('2012-01-01','2010-01-01')) \u2192 104.285\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#year","title":"year","text":"Estrae la parte anno da una data, o il numero di anni da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data_3","title":"Variabile data","text":"Estrae la parte anno da una data o datetime.
Sintassi:
Argomenti:
Esempi:
week('2018-05-09') \u2192 19\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_6","title":"Variabile intervallo","text":"Calcola la lunghezza in anni di un intervallo.
Sintassi:
Argomenti:
Esempi:
year(to_interval('3 years')) \u2192 3\nyear(age('2012-01-01','2010-01-01')) \u2192 1.9986\n
","tags":["gruppo"]},{"location":"gr_funzioni/espressione_utente/espressione_utente_unico/","title":"Gruppo Espressione utente","text":"Abstract
Questo gruppo contiene espressioni personalizzate memorizzate nel profilo utente.
","tags":["gruppo"]},{"location":"gr_funzioni/espressione_utente/espressione_utente_unico/#espressioni-utente","title":"Espressioni Utente","text":"Per installarle nel proprio profilo cliccare su (1) e selezionare il file espressioni_pigreco.json
Abstract
Contiene funzioni che manipolano nomi di file e di percorsi.
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#base_file_name","title":"base_file_name","text":"Restituisce il nome del file senza la cartella o il suffisso del file.
Sintassi:
Argomenti:
Esempi:
base_file_name('/home/qgis/data/country_boundaries.shp') \u2192 'country_boundaries'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#exif","title":"exif","text":"Recupera i valori dei tag exif da un file immagine.
Sintassi:
[ ] indica componenti opzionali
Argomenti
elenco completo dei tag:
Exif.GPSInfo.GPSAltitude\nExif.GPSInfo.GPSAltitudeRef\nExif.GPSInfo.GPSDateStamp\nExif.GPSInfo.GPSLatitude\nExif.GPSInfo.GPSLatitudeRef\nExif.GPSInfo.GPSLongitude\nExif.GPSInfo.GPSLongitudeRef\nExif.GPSInfo.GPSProcessingMethod\nExif.GPSInfo.GPSTimeStamp\nExif.GPSInfo.GPSVersionID\nExif.Image.0xea1c\nExif.Image.Artist\nExif.Image.DateTime\nExif.Image.ExifTag\nExif.Image.GPSTag\nExif.Image.ImageLength\nExif.Image.ImageWidth\nExif.Image.Make\nExif.Image.Model\nExif.Image.ResolutionUnit\nExif.Image.Software\nExif.Image.XPKeywords\nExif.Image.XResolution\nExif.Image.YCbCrPositioning\nExif.Image.YResolution\nExif.Iop.InteroperabilityVersion\nExif.Iop.RelatedImageLength\nExif.Iop.RelatedImageWidth\nExif.Photo.0xea1c\nExif.Photo.ColorSpace\nExif.Photo.ComponentsConfiguration\nExif.Photo.Contrast\nExif.Photo.DateTimeDigitized\nExif.Photo.DateTimeOriginal\nExif.Photo.DigitalZoomRatio\nExif.Photo.ExifVersion\nExif.Photo.ExposureBiasValue\nExif.Photo.ExposureMode\nExif.Photo.ExposureProgram\nExif.Photo.ExposureTime\nExif.Photo.FNumber\nExif.Photo.Flash\nExif.Photo.FlashpixVersion\nExif.Photo.FocalLength\nExif.Photo.GainControl\nExif.Photo.ISOSpeedRatings\nExif.Photo.ImageUniqueID\nExif.Photo.InteroperabilityTag\nExif.Photo.LightSource\nExif.Photo.MaxApertureValue\nExif.Photo.MeteringMode\nExif.Photo.PixelXDimension\nExif.Photo.PixelYDimension\nExif.Photo.Saturation\nExif.Photo.SceneCaptureType\nExif.Photo.Sharpness\nExif.Photo.UserComment\nExif.Photo.WhiteBalance\nExif.Thumbnail.Compression\nExif.Thumbnail.JPEGInterchangeFormat\nExif.Thumbnail.JPEGInterchangeFormatLength\nExif.Thumbnail.ResolutionUnit\nExif.Thumbnail.XResolution\nExif.Thumbnail.YResolution\n
Esempi exif('/my/photo.jpg','Exif.Image.Orientation') \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_exists","title":"file_exists","text":"Restituisce vero se un percorso del file esiste.
Sintassi:
Argomenti:
Esempi:
file_exists('/home/qgis/data/country_boundaries.shp') \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_name","title":"file_name","text":"Restituisce il nome di un file (compresa l'estensione del file), esclusa la directory.
Sintassi:
Argomenti:
Esempi:
file_name('/home/qgis/data/country_boundaries.shp') \u2192 'country_boundaries.shp'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_path","title":"file_path","text":"Restituisce il componente della cartella del un percorso di un file. Questo non include il nome del file.
Sintassi:
Argomenti:
Esempi:
file_path('/home/qgis/data/country_boundaries.shp') \u2192 '/home/qgis/data'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_size","title":"file_size","text":"Restituisce la dimensione (in bites) di un file.
Sintassi:
Argomenti:
Esempi:
file_size('/home/qgis/data/country_boundaries.geojson') \u2192 5674\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_suffix","title":"file_suffix","text":"Restituisce il suffisso (estensione) dal percorso di un file.
Sintassi:
Argomenti:
Esempi:
file_suffix('/home/qgis/data/country_boundaries.shp') \u2192 'shp'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#is_directory","title":"is_directory","text":"Restituisce vero se un percorso corrisponde ad una directory.
Sintassi:
Argomenti:
Esempi:
is_directory('/home/qgis/data/country_boundaries.shp') \u2192 falso\nis_directory('/home/qgis/data/') \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#is_file","title":"is_file","text":"Restituisce vero se un percorso corrisponde ad un file.
Sintassi:
Argomenti:
Esempi:
is_file('/home/qgis/data/country_boundaries.shp') \u2192 vero\nis_file('/home/qgis/data/') \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/form/form_unico/","title":"Form","text":"Questo gruppo contiene funzioni che sono disponibili nel contesto modulo attributi. Per esempio, in impostazioni campo widget.
Il gruppo \u00e8 visibile solo per il Filtro
del Tipo Widget Relazione Valore
.
a partire da >= QGIS 3.14
a partire da >= QGIS 3.2
WIDGET Value Relation (Relazione valore):
consente l'implementazione di filtri complessi e dinamici all'interno di moduli di attributo QGIS. La funzionalit\u00e0 pu\u00f2 essere utilizzata per implementare moduli \"drill-down\" all'interno di QGIS, in cui i valori disponibili in un campo dipendono dai valori di altri campi:
Questa funzionalit\u00e0 consente agli utenti di creare espressioni \"value-relation\" basate sul valore corrente di un altro campo nella stessa form. Quando l'utente modifica il valore di un campo, le scelte disponibili in tutti i campi correlati vengono filtrate in modo che corrispondano al nuovo valore, consentendo una strategia di filtraggio gerarchica (drill down o cascading) all'interno di un modulo o nella tabella degli attributi.
qui un video di Alessandro Pasotti
Le espressioni implementate per realizzare quanto descritto sopra sono tre, una funzione e due variabili:
intersects( buffer(@current_geometry ,1000),$geometry)
NB: nella cartella esempi trovate un geopackage con i dati e un progetto esempio
video:
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/","title":"Gruppo Generale","text":"Abstract
Questo gruppo contiene un assortimento di funzioni generiche.
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#env","title":"env","text":"Ottiene una variabile di ambiente e restituisce il suo contenuto come stringa. Se non \u00e8 possibile trovare la variabile, sar\u00e0 restituito NULL
. Questo \u00e8 utile per specifiche configurazioni di sistema come lettere del disco o prefissi di percorso. La definizione di variabili di ambiente dipende dal sistema operativo, per favore verifica con il tuo amministratore di sistema o con la documentazione del sistema operativo come ci\u00f2 possa essere impostato.
Sintassi:
Argomento:
Esempi:
env( 'LANG' ) \u2192 'en_US.UTF-8'\nenv( 'MIO_PREFISSO_VARIABILE' ) \u2192 'Z:'\nenv( 'I_DO_NOT_EXIST' ) \u2192 NULL\nenv( 'COMPUTERNAME') \u2192 LENOVO_PC (\u00e8 il mio notebook)\nenv('home') \u2192 'C:\\Users\\Salvatore'\n
alcune varibili li trovate qui: Impostazioni | Opzioni | Sistema
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#eval","title":"eval","text":"Valuta una espressione che viene passata in una stringa. Molto utile per espandere parametri dinamici passati come variabili contestuali o campi.
Sintassi:
Argomento:
Esempi:
eval(''nice'') \u2192 'nice'\neval(@expression_var) \u2192 [qualsiasi risultato che dalla valutazione di @expression_var potrebbe assumere...]\neval( '@row_number +10') \u2192 11\n
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#eval_template","title":"eval_template","text":"Valuta un modello che viene passato in una stringa. Molto utile per espandere parametri dinamici passati come variabili contestuali o campi.
Sintassi:
Argomento:
Esempi:
eval_template('QGIS [% upper(\\'rocks\\') %]') \u2192 QGIS ROCKS\n
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#mime_type","title":"mime_type","text":"Restituisce il tipo mime dei dati binari.
Sintassi:
Argomento:
Esempi:
mime_type('<html><body></body></html>') \u2192 text/html\nmime_type(from_base64('R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAIAOw==')) \u2192 image/gif\n
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#var","title":"var","text":"Restituisce il valore memorizzato in una variabile specificata.
Sintassi:
Argomento:
Esempi:
var('qgis_version') \u2192 '3.0.2-Girona'\nvar('user_account_name') \u2192 'Salvatore'\n
Osservazioni
Come argomento va usato il nome della variabile senza la chioccila altrimenti non funziona.
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#with_variable","title":"with_variable","text":"Questa funzione imposta una variabile per qualunque codice di espressione che sar\u00e0 fornita come argomento terzo. Questo \u00e8 utile solamente per espressioni complicate, in cui lo stesso valore calcolato deve essere usato in posti differenti.
Sintassi:
Argomento:
Esempi:
with_variable('my_sum', 1 + 2 + 3, @my_sum * 2 + @my_sum * 5) \u2192 42\nwith_variable('duepigreco',2*3.1415, @duepigreco * 2 +@duepigreco*5 ) \u2192 43.981\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/","title":"Gruppo Geometria","text":"Abstract
Questo gruppo contiene funzioni che operano sugli oggetti geometrici es: lunghezza, area.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#affine_transform","title":"affine_transform","text":"Restituisce la geometria dopo una trasformazione affine. I calcoli sono nel sistema di riferimento spaziale di questa geometria. Le operazioni vengono eseguite in un ordine di scala, rotazione, traslazione. Se c'\u00e8 un offset Z o M ma la coordinata non \u00e8 presente nella geometria, verr\u00e0 aggiunta.
Sintassi
[ ] indica componenti opzionali
Argomenti
Esempi
geom_to_wkt(affine_transform(geom_from_wkt('LINESTRING(1 1, 2 2)'), 2, 2, 0, 1, 1)) \u2192 'LineString (3 3, 4 4)'\ngeom_to_wkt(affine_transform(geom_from_wkt('POLYGON((0 0, 0 3, 2 2, 0 0))'), 0, 0, -90, 1, 2)) \u2192 'Polygon ((0 0, 6 0, 4 -2, 0 0))'\ngeom_to_wkt(affine_transform(geom_from_wkt('POINT(3 1)'), 0, 0, 0, 1, 1, 5, 0)) \u2192 'PointZ (3 1 5)'\n
Osservazione
La funzione trasforma le geometrie a partire dall'origine delle coordinate del sistema di riferimento del layer, sotto un esempio:
affine_transform( \n geometry:= $geometry,\n deltaX:=0,\n deltaY:=0,\n rotationZ:=45,\n scaleX:=1,\n scaleY:=1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#area","title":"$area","text":"Restituisce l'area della geometria corrente. L'area calcolata da questa funzione rispetta sia le impostazioni dell'ellissoide del progetto corrente sia delle unit\u00e0 di misura. Per esempio, se \u00e8 stato impostato un ellissoide per il progetto allora l'area calcolata sar\u00e0 ellisoidica altrimenti se non \u00e8 stato impostato alcun ellissoide l'area calcolata sar\u00e0 planimetrica.
Sintassi:
Esempi:
$area \u2192 131196498,619546\n
Nota bene:
Se il SR del progetto in cui si sta calcolando l'area ($area) fosse un sistema proiettato (es:EPSG 3003/4; 32632/33/34 ecc..) allora l'unit\u00e0 di misura sarebbe il metro, invece se il SR del progetto fosse EPSG 4326, cio\u00e8 un sistema geografico, allora l'unit\u00e0 di misura dell'area sarebbe gradi e quindi poco comprensibile e valori piccoli (0.00001).
Osservazione:
$area
e $length
, utilizzano lo stesso metodo di PostGIS (le routine GeographicLib) quindi le misure risulteranno pi\u00f9 'precise' rispetto alle versioni precedenti di QGIS. (vedi: discussione, feature request, pull request).Restituisce la geometria dell'elemento attuale. Pu\u00f2 essere usato per il processamento con altre funzioni. ATTENZIONE: Questa funzione \u00e8 deprecata (a partire da QGIS 3.28.0 Firenze). Si consiglia di utilizzare la variabile sostitutiva @geometry
NB: $geometry
richiama l'attributo geometria!!!
Sintassi:
Esempi:
geomToWKT( $geometry ) \u2192 POINT(6 50)\narea($geoamtry) \u2192 1234567.89\nperimeter($geometry) \u2192 25689.25\narea(@geoamtry) \u2192 1234567.89\n
Osservazioni:
il $
indica che \u00e8 relativo all'elemento corrente e non ha bisogno di argomenti.
Restituisce la lunghezza di una linestring. Se hai bisogno della lunghezza del bordo di un poligono, utilizza invece $perimeter. La lunghezza calcolata da questa funzione rispetta le impostazioni sia dell'ellissoide sia delle unit\u00e0 di misura del progetto corrente. Per esempio, se \u00e8 stato impostato un ellissoide per il progetto allora la lunghezza calcolata sar\u00e0 ellisoidica altrimenti se non \u00e8 stato impostato alcun ellissoide la lunghezza calcolata sar\u00e0 planimetrica.
Sintassi:
Esempi:
$length \u2192 42.4711 \n
Osservazione:
Occorre cambiare entrambe le impostazioni, sia quelle dell'ellissoide \u2192 'None/Planimetric' sia le Unit\u00e0 di misura per le distanze' \u2192 Gradi
Queste modofiche non valgono per l'etichettatura, la lunghezza sar\u00e0 quella relativa alla geometria e quindi al suo SR.
$area
e $length
, utilizzano lo stesso metodo di PostGIS (le routine GeographicLib) quindi le misure risulteranno pi\u00f9 'precise' rispetto alle versioni precedenti di QGIS. (vedi: discussione, feature request, pull request).Nota:
il $
indica che \u00e8 relativo all'elemento corrente e non ha bisogno di argomenti.
Restituisce la lunghezza del perimetro della geometria corrente. Il perimetro calcolato da questa funzione rispetta le impostazioni sia dell'ellissoide sia delle unit\u00e0 di misura del progetto corrente. Per esempio, se \u00e8 stato impostato un ellissoide per il progetto allora il perimetro calcolato sar\u00e0 ellisoidico altrimenti se non \u00e8 stato impostato alcun ellissoide il perimetro calcolato sar\u00e0 planimetrico.
Sintassi:
Esempi:
$perimeter \u2192 2545897.26\n
Osservazione:
$area
e $length
, utilizzano lo stesso metodo di PostGIS (le routine GeographicLib) quindi le misure risulteranno pi\u00f9 'precise' rispetto alle versioni precedenti di QGIS. (vedi: discussione, feature request, pull request).Nota:
il $
indica che \u00e8 relativo all'elemento corrente e non ha bisogno di argomenti.
Restituisce la coordinata x della geometria corrente.
Sintassi:
Esempi:
$x \u2192 12.2568971\n
Osservazione:
x
della geometria corrente purch\u00e8 sia un POINT altrimenti restituisce NULL (vedi screenshot)x
o y
occorre utilizzare una combinazione di funzioni ed: x($geometry)
che vale per qualunque tipologia di geometria (point, linestring, polygon)Recupera una coordinata x per la geometria dell'elemento corrente. ATTENZIONE: Questa funzione \u00e8 deprecata (>= QGIS 3.30). Si raccomanda di utilizzare la funzione sostitutiva x_at con la variabile @geometry.
Sintassi:
Argomenti:
Esempi:
$x_at(1) \u2192 12.6882843\n
Osservazioni:
Le lineastring hanno un verso e quindi l'indice 0 indica il primo vertice mentre indici negativi significano che la conta inizia dalla l'ultimo vertice: -10 significa il 10-mo vertice partendo dall'ultimo vertice.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_at_1","title":"x_at","text":"(>= QGIS 3.30)
Recupera una coordinata x della geometria.
Sintassi:
Argomenti:
Esempi:
x_at( geom_from_wkt( 'POINT(4 5)' ), 0 ) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y","title":"$y","text":"Restituisce la coordinata y della geometria corrente.
Sintassi:
Esempi:
$y \u2192 12.2568971\n
Osservazione:
y
della geometria corrente purch\u00e8 sia un POINT altrimenti restituisce NULL (vedi screenshot)Recupera una coordinata y per la geometria dell'elemento corrente. ATTENZIONE: Questa funzione \u00e8 deprecata (>= QGIS 3.30). Si raccomanda di utilizzare la funzione sostitutiva x_at con la variabile @geometry.
Sintassi:
Argomenti:
Esempi:
$y_at(1) \u2192 2\n
Osservazioni:
Le lineastring hanno un verso e quindi l'indice 0 indica il primo vertice mentre indici negativi significano che la conta inizia dalla l'ultimo vertice: -10 significa il 10-mo vertice partendo dall'ultimo vertice.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_at_1","title":"y_at","text":"(>= QGIS 3.30)
Recupera una coordinata y della geometria.
Sintassi:
Argomenti:
Esempi:
y_at( geom_from_wkt( 'POINT(4 5)' ), 0 ) \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#angle_at_vertex","title":"angle_at_vertex","text":"Restituisce l'angolo della bisettrice (angolo medio) della geometria per un vertice specifico di una geometria di tipo linestring. Gli angoli sono in gradi in senso orario dal nord.
Sintassi:
Argomenti:
Esempi:
angle_at_vertex(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),vertex:=1) \u2192 45.0\n
Osservazione:
Il primo ed ultimo vertice di una lineastring aperta la funzione restituisce il valore dell'angolo e non la bisettrice.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#apply_dash_pattern","title":"apply_dash_pattern","text":"Applica un modello di trattino ad una geometria, restituendo una geometria MultiLineString che \u00e8 la geometria di input rappresentata lungo ogni linea/anello con il modello specificato.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(apply_dash_pattern(geom_from_wkt('LINESTRING(1 1, 10 1)'), array(3, 1))) \u2192 MultiLineString ((1 1, 4 1),(5 1, 8 1),(9 1, 10 1, 10 1))\ngeom_to_wkt(apply_dash_pattern(geom_from_wkt('LINESTRING(1 1, 10 1)'), array(3, 1), start_rule:='half_dash')) \u2192 MultiLineString ((1 1, 2.5 1),(3.5 1, 6.5 1),(7.5 1, 10 1, 10 1))\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#area_1","title":"area","text":"Restituisce l'area di un oggetto a geometria poligonale. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura dell'area restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $area, la quale esegue calcoli ellisoidici basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di misura dell'area.
Sintassi:
Argomenti:
Esempi:
area($geometry) \u2192 1234.567\n
Nota bene:
Se il SR del layer in cui si sta calcolando l'area (area()) fosse un sistema proiettato (es:EPSG 3003/4; 32632/33/34 ecc..) l'unit\u00e0 di misura sarebbe il metro, invece se il SR del layer fosse EPSG 4326, cio\u00e8 un sistema geografico, allora l'unit\u00e0 di misura dell'area sarebbe in gradi e quindi poco comprensibile e valori piccoli.
Osservazioni:
in generale area($geometry) <> $area
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#azimuth","title":"Azimuth","text":"Restituisce l'azimut dal nord quale angolo in radianti misurato in senso orario dalla verticale del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
degrees( azimuth( make_point(25, 45), make_point(75, 100) ) ) \u2192 42.273689\ndegrees( azimuth( make_point(75, 100), make_point(25,45) ) ) \u2192 222.273689\n
Osservazione:
Azimuth per definizione restituisce un angolo in radianti, per trasformarlo in gradi usare la funzione degrees()
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bearing","title":"Bearing","text":"Introdotta in >= QGIS 3.34
Restituisce la direzione basata sul nord come l'angolo in radianti misurato in senso orario sull'ellissoide dalla verticale dal punto_a al punto_b. (funzione per calcolare l'azimut geodetico sull'ellissoide.)
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
- degrees( bearing( make_point(16198544, -4534850), make_point(18736872, -1877769), 'EPSG:3857', 'EPSG:7030') ) \u2192 49.980071\n- degrees( bearing( make_point(18736872, -1877769), make_point(16198544, -4534850), 'EPSG:3857', 'WGS84') ) \u2192 219.282386\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#boundary","title":"boundary","text":"Restituisce l'area minima della combinazione dei confini della geometria (cio\u00e8 il confine topologico della geometria). Per esempio, una geometria poligonale avr\u00e0 un confine costituito dalle linee di ogni anello nel poligono. Alcuni tipi di geometrie non hanno confini, es collezioni di punti o geometrie e pertanto verr\u00e0 restituito NULL
.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(boundary(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))'))) \u2192 'LineString(1 1,0 0,-1 1,1 1)'\ngeom_to_wkt(boundary(geom_from_wkt('LineString(1 1,0 0,-1 1)'))) \u2192 'MultiPoint ((1 1),(-1 1))'\n
Osservazioni:
funzione molto utile per la tematizzazione aggiungendo un nuovo layer con geometry generator
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bounds","title":"bounds","text":"Restituisce la geometria che rappresenta il perimetro di delimitazione di una geometria in ingresso. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
bounds($geometry) \u2192 perimetro di delimitazione dell'elemento geometrico corrente\ngeom_to_wkt(bounds(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))'))) \u2192 'Polygon ((-1 0, 1 0, 1 1, -1 1, -1 0))'\n
Osservazioni:
funzione molto utile per la tematizzazione aggiungendo un nuovo layer con geometry generator
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bounds_height","title":"bounds_height","text":"Restituisce l'altezza del perimetro di delimitazione di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
bounds_height($geometry) \u2192 altezza del perimetro di delimitazione dell'elemento geometrico corrente\nbounds_height(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))')) \u2192 1\n
Osservazioni:
La funzione restituisce un numero che corrisponde all'altezza del rettangolo di ingombro di una geometria.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bounds_width","title":"bounds_width","text":"Restituisce la larghezza del perimetro di delimitazione di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
bounds_width($geometry) \u2192 larghezza del perimetro di delimitazione di $geometry\n
Osservazioni:
La funzione restituisce un numero che corrisponde alla larghezza del rettangolo di ingombro di una geometria.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#buffer","title":"buffer","text":"Restituisce una geometria che rappresenta tutti i punti la cui distanza dalla geometria \u00e8 minore o uguale alla distanza inserita. I calcoli vengono effettuati nel sistema di riferimento spaziale della geometria.
Sintassi:
Argomenti:
Esempi:
buffer($geometry, 10.5) \u2192 poligono di $geometry bufferizzato di 10.5 unit\u00e0\n
Danger
Utilizzando SR proiettati l'unit\u00e0 di misura \u00e8 il metro, mentre, per SR geografici \u00e8 il grado, quindi attenzione al valore della distanza.
Nota bene:
La Funzione restituisce SEMPRE un poligono sia per geometry POINT, LINESTRING o **POLYGON
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#buffer_by_m","title":"buffer_by_m","text":"Crea un buffer lungo una geometria linestring in cui il diametro del buffer varia in base ai valori m nei vertici della linea.
Sintassi:
Argomenti:
Esempi:
buffer_by_m(geometry:=geom_from_wkt('LINESTRINGM(1 2 0.5, 4 2 0.2)'),segments:=8) \u2192 Un buffer di larghezza variabile che inizia con un diametro di 0,5 e termina con un diametro di 0,2 lungo la linea.\n
relativa all'esempio di sopra:
Osservazioni:
QGIS - feature
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#centroid","title":"centroid","text":"Restituisce il centro geometrico di una geometria.
Sintassi:
Argomenti:
Esempi:
centroid($geometry) \u2192 una geometria punto\n
Osservazioni:
La Funzione restituisce SEMPRE una geometry **POINT
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#close_line","title":"close_line","text":"Restituisce una linestring chiusa della linestring di input aggiungendo il primo punto alla fine della linea, se non \u00e8 gi\u00e0 chiusa. Se la geometria non \u00e8 una linestring o una MultiLinestring, il risultato sar\u00e0 NULL.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(close_line(geom_from_wkt('LINESTRING(0 0, 1 0, 1 1)'))) \u2192 LineString (0 0, 1 0, 1 1, 0 0)\ngeom_to_wkt(close_line(geom_from_wkt('LINESTRING(0 0, 1 0, 1 1, 0 0)'))) \u2192 LineString (0 0, 1 0, 1 1, 0 0)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#closest_point","title":"closest_point","text":"Restituisce il punto sulla geometria1 che \u00e8 pi\u00f9 vicino alla geometria2.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(closest_point(geom_from_wkt('LINESTRING (20 80, 98 190, 110 180, 50 75 )'),geom_from_wkt('POINT(100 100)'))) \u2192 Point(73.0769 115.384)\n
Osservazioni:
Utilizzando il geometry generator per i temi (il layer strade \u00e8 una unica feature):
closest_point( geometry(get_feature('strade', 'reg',19)),$geometry)
Gif animata: geometry 1 \u00e8 la rete stradale; geometry 2 sono i punti; in rosso i closestpoint
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#collect_geometries","title":"collect_geometries","text":"Raccoglie un set di geometrie in un oggetto geometria multiparte.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variante-geometry","title":"Variante geometry","text":"Sintassi:
Argomenti:
Esempi:
geom_to_wkt(collect_geometries(make_point(1,2), make_point(3,4), make_point(5,6))) \u2192 'MultiPoint ((1 2),(3 4),(5 6))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variante-con-array","title":"Variante con array","text":"Sintassi:
Argomenti:
Esempi:
geom_to_wkt(collect_geometries(array(make_point(1,2), make_point(3,4), make_point(5,6)))) \u2192 'MultiPoint ((1 2),(3 4),(5 6))'\n
Osservazioni:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#combine","title":"combine","text":"Restituisce la combinazione di due geometrie.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( combine( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 2 1)' ) ) ) \u2192 MULTILINESTRING((4 4, 2 1), (3 3, 4 4), (4 4, 5 5))\ngeom_to_wkt( combine( geom_from_wkt( 'LINESTRING(3 3, 4 4)' ), geom_from_wkt( 'LINESTRING(3 3, 6 6, 2 1)' ) ) ) \u2192 LINESTRING(3 3, 4 4, 6 6, 2 1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#concave_hull","title":"concave_hull","text":">= QGIS 3.18 Firenze e Geos 3.11+
Restituisce un poligono possibilmente concavo che contiene tutti i punti della geometria
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(concave_hull(geom_from_wkt('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94,130 62,122 40,156 32,162 76,172 88),(132 178,134 148,128 136,96 128,132 108,150 130,170 142,174 110,156 96,158 90,158 88),(22 64,66 28,94 38,94 68,114 76,112 30,132 10,168 18,178 34,186 52,184 74,190 100,190 122,182 148,178 170,176 184,156 164,146 178,132 186,92 182,56 158,36 150,62 150,76 128,88 118))'), 0.99)) \u2192 'Polygon ((30 112, 36 150, 92 182, 132 186, 176 184, 190 122, 190 100, 186 52, 178 34, 168 18, 132 10, 112 30, 66 28, 22 64, 30 112))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#_1","title":"Geometria","text":"","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#contains","title":"contains","text":"Verifica se una geometria ne contiene un'altra. Restituisce vero se e solo se nessun punto di geometry2 giace all'esterno di geometry1 e almeno un punto dell'interno di geometry2 si trova all'interno di geometry1.
Sintassi:
Argomenti:
Esempi:
contains( geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))' ), geom_from_wkt( 'POINT(0.5 0.5 )' ) ) \u2192 vero\ncontains( geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 falso\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
contains(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)\n
dove:
geometry(get_feature( 'province_rt_rt','pk_uid','46'))
$geometry
seleziono tutti i comuni contains
(contenuti) nella provincia con pk_uid
46 (Lucca)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli contenuti nella provincia di Lucca).
NOT contains(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)
Restituisce il poligono convesso di una geometria. Rappresenta la minima geometria convessa che racchiude tutte le geometria contenute nell'insieme.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( convex_hull( geom_from_wkt( 'LINESTRING(3 3, 4 4, 4 10)' ) ) ) \u2192 POLYGON((3 3,4 10,4 4,3 3))\n
Osservazioni:
La funzione restituisce sempre un poligono.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#crosses","title":"crosses","text":"Verifica se una geometria interseca un'altra. Restituisce vero (1) se le geometrie interessate hanno qualche, ma non tutti, punto interno in comune.
Sintassi:
Argomenti:
Esempi:
crosses( geom_from_wkt( 'LINESTRING(3 5, 4 4, 5 3)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\ncrosses( geom_from_wkt( 'POINT(4 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 falso\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
crosses(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)\n
dove: geometry(get_feature( 'fiume_arno','nome','ARNO'))
$geometry
seleziono tutti i comuni crosses
(attraversati) dal fiume ARNO
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli attraversati dal fiume ARNO).
NOT crosses(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)
Prende una geometria di un livello poligonale o lineare e ne genera una nuova in cui le geometrie hanno un numero di vertici maggiore di quella originale.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(densify_by_count(geom_from_wkt('LINESTRING(1 1, 10 1)'), 3)) \u2192 LineString (1 1, 3.25 1, 5.5 1, 7.75 1, 10 1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#densify_by_distance","title":"densify_by_distance","text":"Prende una geometria di un livello poligono o lineare e ne genera una nuova in cui le geometrie sono densificate aggiungendo ulteriori vertici sui bordi che hanno una distanza massima dell'intervallo di distanza specificato.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(densify_by_distance(geom_from_wkt('LINESTRING(1 1, 10 1)'), 4)) \u2192 LineString (1 1, 4 1, 7 1, 10 1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#difference","title":"difference","text":"Restituisce una geometria che rappresenta la porzione della geometry_a che non interseca la geometry_b.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( difference( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4)' ) ) ) \u2192 LINESTRING(4 4, 5 5)\n
Espressione:
Espressione
-- differenza linea a - linea b\n difference( \n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0)))),\n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry))\n )\n -- NB: -- \u00e8 importante ordine delle geometrie\n -- a - b \u00e8 diverso da b - a\n
Espressione
-- differenza linea b - linea a\n difference( \n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry)),\n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0))))\n )\n -- NB: -- \u00e8 importante ordine delle geometrie\n -- a - b \u00e8 diverso da b - a\n
Prova tu
Dati e progetto qgz
Esempio di sopra:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#disjoint","title":"disjoint","text":"Controlla qualora una geometria non ne interseca spazialmente un'altra. Restituisce true (1) se le geometrie non condividono nessuno spazio comune.
Sintassi:
Argomenti:
Esempi:
disjoint( geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0 ))' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\ndisjoint( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'POINT(4 4)' )) \u2192 falso\n
Osservazione:
Vero = 1; Falso= 0
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
disjoint(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)\n
dove:
geometry(get_feature( 'fiume_arno','nome','ARNO'))
$geometry
seleziono tutti i comuni disjoint
(disgiunti) dal fiume ARNO
Restituisce la distanza minima (basata su riferimento spaziale) tra due geometrie in unit\u00e0 proiettate.
Sintassi:
Argomenti:
Esempi:
distance( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'POINT(4 8)' ) ) \u2192 4\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#distance_to_vertex","title":"distance_to_vertex","text":"Restituisce la distanza lungo una geometria ad un vertice specificato.
Sintassi:
Argomenti:
Esempi:
distance_to_vertex(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),vertex:=1) \u2192 10.0\n
--
esempio di sopra:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#end_point","title":"end_point","text":"Restituisce l'ultimo nodo di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(end_point(geom_from_wkt('LINESTRING(4 0, 4 2, 0 2)'))) \u2192 'Point (0 2)'\n
--
End_point di geometria poligonale:
End_point di geometria lineare:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#exif_geotag","title":"exif_geotag","text":"Crea una geometria puntuale dai geotag dell'exif di un file di immagine.
Sintassi
Descrizione
Esempi
geom_to_wkt(exif_geotag('/my/photo.jpg')) \u2192 'Point (2 4)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#extend","title":"extend","text":"Estende l'inizio e la fine di una geometria di tipo linestring di una quantit\u00e0 specificata. Le linee sono estese usando la direzione di immersione del primo e dell'ultimo segmento nella linea. Le distanze sono espresse nel SR di tale geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(extend(geom_from_wkt('LineString(0 0, 1 0, 1 1)'),1,2)) \u2192 'LineString (-1 0, 1 0, 1 3)'\ngeom_to_wkt(extend(geom_from_wkt('MultiLineString((0 0, 1 0, 1 1), (2 2, 0 2, 0 5))'),1,2)) \u2192 'MultiLineString ((-1 0, 1 0, 1 3),(3 2, 0 2, 0 7))'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#exterior_ring","title":"exterior_ring","text":"Restituisce una linestring che rappresenta l'anello esterno di una geometria poligonale. Se la geometria non \u00e8 un poligono, il risultato sar\u00e0 NULL.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(exterior_ring(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),( 0.1 0.1, 0.1 0.2, 0.2 0.2, 0.2, 0.1, 0.1 0.1))'))) \u2192 'LineString (-1 -1, 4 0, 4 2, 0 2, -1 -1)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#extrude","title":"extrude","text":"Restituisce una versione estrusa della geometria (Multi-)Curve o (Multi-)Linestring in ingresso, con un'estensione specificata da x e y.
Sintassi:
Argomenti:
Esempi:
extrude(geom_from_wkt('LineString(1 2, 3 2, 4 3)'), 1, 2) \u2192 Polygon ((1 2, 3 2, 4 3, 5 5, 4 4, 2 4, 1 2))\nextrude(geom_from_wkt('MultiLineString((1 2, 3 2), (4 3, 8 3)'), 1, 2) \u2192 MultiPolygon (((1 2, 3 2, 4 4, 2 4, 1 2)),((4 3, 8 3, 9 5, 5 5, 4 3)))\n
Osservazioni:
Nell'esempio ho utilizzato la funzione [boundary()](boundary.md) perch\u00e9 la geometria di ingresso deve essere lineare.\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#flip_coordinates","title":"flip_coordinates","text":"Restituisce una copia della geometria con le coordinate x e y scambiate. Utile per riparare le geometrie che hanno invertito i valori di latitudine e longitudine.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(flip_coordinates(make_point(1, 2))) \u2192 Point (2 1)\n
--
Esempio con vettore poligonale (aggiorno la geometry):
il flip \u00e8 da usare con cautela perch\u00e9 cambia radicalemnte la posizione del vettore
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#force_polygon_ccw","title":"force_polygon_ccw","text":"Forza una geometria a rispettare la convenzione per cui gli anelli esterni sono in senso antiorario, quelli interni in senso orario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(force_polygon_ccw(geometry:=geom_from_wkt('Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1)))'))) \u2192 'Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#force_polygon_cw","title":"force_polygon_cw","text":"Forza una geometria a rispettare la convenzione per cui gli anelli esterni sono in senso orario, quelli interni in senso antiorario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(force_polygon_cw(geometry:=geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))'))) \u2192 'Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#force_rhr","title":"force_rhr","text":"Forza una geometria a rispettare la regola della mano destra, in cui l'area delimitata da un poligono si trova a destra del limite. In particolare, l'anello esterno \u00e8 orientato in senso orario e l'interno in senso antiorario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(force_rhr(geometry:=geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))'))) \u2192 Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1))\n
Osservazioni:
Ecco un esempio pratico della funzione (presente anche nelgli strumenti fi processing) ovvero un poligono disegnato in senso antiorario viene forzato in senso orario e l'etichettature \u00e8 visibile correttamente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_from_gml","title":"geom_from_gml","text":"Restituisce una geometria da una rappresentazione GML di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(geom_from_gml('<gml:LineString srsName=\"EPSG:4326\"><gml:coordinates>4,4 5,5 6,6</gml:coordinates></gml:LineString>') ) \u2192 'LineString (4 4, 5 5, 6 6)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_from_wkb","title":"geom_from_wkb","text":"Restituisce una geometria creata da una rappresentazione binaria ben nota (WKB).
Sintassi:
Argomenti:
Esempi:
geom_from_wkb( geom_to_wkb( make_point(4,5) ) ) \u2192 un oggetto geometria punto\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_from_wkt","title":"geom_from_wkt","text":"Restituisce una geometria creata da una rappresentazione Well-Known Text (WKT).
Sintassi:
Argomenti:
Esempi:
geom_from_wkt( 'POINT(4 5)' ) \u2192 un oggetto geometria\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_to_wkb","title":"geom_to_wkb","text":"Restituisce la rappresentazione binaria ben nota (WKB) di una geometria come BLOB binario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkb( $geometry ) \u2192 BLOB binario contenente un oggetto geometria\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_to_wkt","title":"geom_to_wkt","text":"Restituisce la rappresentazione Well-Known Text (WKT) della geometria senza metadati del SR
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( make_point(6, 50) ) \u2192 'POINT(6 50)'\ngeom_to_wkt(centroid(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))'))) \u2192 'POINT(0 0.66666667)'\ngeom_to_wkt(centroid(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))')), 2) \u2192 'POINT(0 0.67)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geometry_1","title":"geometry","text":"Restituisce la geometria di un elemento con geometria
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( geometry( get_feature( layer, attributeField, value ) ) ) \u2192 'POINT(6 50)'`\nintersects( $geometry, geometry( get_feature( layer, attributeField, value ) ) ) \u2192 vero`\n
--
Usando il Select by Expression: selezionare le feature di un layer (quartieri) in funzione di altro layer (test):
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geometry_n","title":"geometry_n","text":"Restituisce una geometria specifica da una collezione di geometrie, o NULL se la geometria in ingresso non \u00e8 una collezione. Restituisce anche una parte da una geometria a pi\u00f9 parti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(geometry_n(geom_from_wkt('GEOMETRYCOLLECTION(POINT(0 1), POINT(0 0), POINT(1 0), POINT(1 1))'),3)) \u2192 'Point (1 0)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geometry_type","title":"geometry_type","text":"Restituisce un valore stringa che descrive il tipo di una geometria (Punto, Linea o Poligono)
Sintassi:
Argomenti:
Esempi:
geometry_type( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 'Line'\ngeometry_type( geom_from_wkt( 'MULTILINESTRING((2 5, 3 6, 4 8), (1 1, 0 0))') ) \u2192 'Line'\ngeometry_type( geom_from_wkt( 'POINT(2 5)') ) \u2192 'Point'\ngeometry_type( geom_from_wkt( 'POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))') ) \u2192 'Polygon'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#hausdorff_distance","title":"hausdorff_distance","text":"Restituisce la distanza di Hausdorff tra due geometrie. Questa \u00e8 in sostanza una misura di come le 2 geometrie sono simili o dissimili: una distanza pi\u00f9 bassa indica geometrie pi\u00f9 simili. La funzione pu\u00f2 essere eseguita con un argomento opzionale di densificazione della frazione. Se non viene specificato, viene utilizzata una approssimazione alla distanza standard di Hausdorff. Questa approssimazione \u00e8 esatta o abbastanza vicina per un grande sottoinsieme di casi utili. Esempi di questi sono:
Se l'approssimazione predefinita fornita da questo metodo \u00e8 insufficiente, specifica l'argomento opzionale di densificazione della frazione. Specificando questo argomento si esegue una densificazione del segmento prima di calcolare la distanza Hausdorff discreta. Il parametro imposta la frazione con cui densificare ogni segmento. Ogni segmento sar\u00e0 suddiviso in un numero di subsegmenti di uguale lunghezza, la cui frazione della lunghezza totale \u00e8 la pi\u00f9 vicina alla frazione data. Riducendo il parametro di densificazione della frazione, la distanza restituita si avviciner\u00e0 alla vera distanza Hausdorff per le geometrie.
Sintassi:
Argomenti:
Esempi:
hausdorff_distance( geometry1:= geom_from_wkt('LINESTRING (0 0, 2 1)'),geometry2:=geom_from_wkt('LINESTRING (0 0, 2 0)')) \u2192 2\nhausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)')) \u2192 14.142135623\nhausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)'),0.5) \u2192 70.0\n
--
Nel caso di geometrie puntuali la hausdorff_distance coincide con la funzione distance, segue un esempio:
Espressione
format_number(\n hausdorff_distance( \n transform($geometry,'EPSG:4326','EPSG:3004'), \n transform(geometry(get_feature('fontanelle','n',1)),'EPSG:4326','EPSG:3004'))/1000,4) || ' km' \n || '\\n'|| \n format_number(\n distance( \n transform($geometry,'EPSG:4326','EPSG:3004'), \n transform(geometry(get_feature('fontanelle','n',1)),'EPSG:4326','EPSG:3004'))/1000,4) || ' km'\n
--
In questo esempio confronto due layer: il numero pi\u00f9 piccolo indica il poligono pi\u00f9 simile a al poligono pi\u00f9 grande.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#inclination","title":"inclination","text":"Restituisce l'inclinazione misurata dallo zenit (0) al nadir (180) del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
inclination( make_point( 5, 10, 0 ), make_point( 5, 10, 5 ) ) \u2192 0.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 50, 100, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, -5 ) ) \u2192 180.0\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#interior_ring_n","title":"interior_ring_n","text":"Restituisce un anello interno specifico da una geometria poligonale, o null se la geometria non \u00e8 un poligono.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(interior_ring_n(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),(-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1),(-1 -1, 4 0, 4 2, 0 2, -1 -1))'),1)) \u2192 'LineString (-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1))'\n
Osservazioni:
Restituisce una lineastring!!!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#intersection","title":"intersection","text":"Restituisce una geometria che rappresenta la porzione condivisa fra le due geometrie.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( intersection( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4)' ) ) ) \u2192 'LINESTRING(3 3, 4 4)'\ngeom_to_wkt( intersection( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'MULTIPOINT(3.5 3.5, 4 5)' ) ) ) \u2192 'POINT(3.5 3.5)'\n
Espressione
-- intersezione tra le due linee\n intersection( \n make_line( -- linea a\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry)),\n make_line( -- linea b\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0))))\n )\n -- NB: -- l' ordine delle geometrie \u00e8 indifferente\n
Prova tu
Dati e progetto qgz
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#intersects","title":"intersects","text":"Controlla qualora una geometria ne interseca un'altra. Restituisce true (1) se la geometrie si intersecano spazialmente (condividono una porzione di spazio) altrimenti da false (0).
Sintassi:
Argomenti:
Esempi:
intersects( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\nintersects( geom_from_wkt( 'POINT(4 5)' ), geom_from_wkt( 'POINT(5 5)' ) ) \u2192 falso\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
intersects(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)\n
dove:
geometry(get_feature( 'province_rt_rt','pk_uid','46'))
$geometry
seleziono tutti i comuni intersects
(interseca) nella provincia con pk_uid
46 (Lucca)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli intersecati con la provincia di Lucca).
NOT intersects(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)
Controlla se il perimetro di delimitazione della geometria si sovrappone a quello di un'altra geometria. Restituisce vero (1) se le geometrie intersecano spazialmente il perimetro di delimitazione definito e falso (0) se non lo intersecano.
Sintassi:
Argomenti:
Esempi:
intersects_bbox( geom_from_wkt( 'POINT(4 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\nintersects_bbox( geom_from_wkt( 'POINT(6 5)' ), geom_from_wkt( 'POLYGON((3 3, 4 4, 5 5, 3 3))' ) ) \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_closed","title":"is_closed","text":"Restituisce vero (true) se una linestring \u00e8 chiusa (i punti di inizio e di fine coincidono), o falso (false) se una linestring non \u00e8 chiusa. Se la geometria non \u00e8 una linestring, il risultato sar\u00e0 NULL.
Sintassi:
Argomenti:
Esempi:
is_closed(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)')) \u2192 falso\nis_closed(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2, 0 0)')) \u2192 vero\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_empty","title":"is_empty","text":"
Restituisce vero se una geometria \u00e8 vuota (senza coordinate), falso se la geometria non \u00e8 vuota e NULL se non c'\u00e8 geometria. Vedi anche is_empty_or_null
.
Sintassi:
Argomenti:
Esempi:
is_empty(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)')) \u2192 falso\nis_empty(geom_from_wkt('LINESTRING EMPTY')) \u2192 vero\nis_empty(geom_from_wkt('POINT(7 4)')) \u2192 falso\nis_empty(geom_from_wkt('POINT EMPTY')) \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_empty_or_null","title":"is_empty_or_null","text":"Restituisce vero se una geometria \u00e8 vuota (senza coordinate), falso se la geometria non \u00e8 vuota e NULL se non c'\u00e8 geometria. Vedi anche is_empty
.
Sintassi:
Argomenti:
Esempi:
is_empty_or_null(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)')) \u2192 falso\niis_empty_or_null(geom_from_wkt('POINT(7 4)')) \u2192 falso\nis_empty_or_null(geom_from_wkt('POINT EMPTY')) \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_multipart","title":"is_multipart","text":"Restituisce vero se la geometria \u00e8 di tipo Multi.
Sintassi:
Argomenti:
Esempi:
is_multipart(geom_from_wkt('MULTIPOINT ((0 0),(1 1),(2 2))')) \u2192 vero\nis_multipart(geom_from_wkt('POINT (0 0)')) \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_valid","title":"is_valid","text":"Restituisce vero se una geometria \u00e8 valida; se \u00e8 ben formato in 2D secondo le regole OGC
Sintassi:
Argomenti:
Esempi:
is_valid(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2, 0 0)')) \u2192 vero\nis_valid(geom_from_wkt('LINESTRING(0 0)')) \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#length_1","title":"length","text":"Restituisce il numero di caratteri in una stringa o la lunghezza di una geometria di tipo linestring.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-stringa","title":"Variabile stringa","text":"Restituisce il numero di caratteri contenuti in una stringa.
Sintassi:
Argomenti:
Esempi:
length('hello') \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-geometria","title":"Variabile geometria","text":"Calcola la lunghezza di un oggetto a geometria lineare. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura della lunghezza restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $length, la quale esegue calcoli ellissoidici basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di distanza.
Sintassi:
Argomenti:
Esempi:
length(geom_from_wkt('LINESTRING(0 0, 4 0)')) \u2192 4.0
Calcola la lunghezza 3D di un oggetto linea geometrica. Se la geometria non \u00e8 un oggetto linea 3D, restituisce la sua lunghezza 2D. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di questa geometria, e le unit\u00e0 della lunghezza restituita corrisponderanno alle unit\u00e0 per l'SR. Questo differisce dai calcoli eseguiti dalla funzione $length, che eseguir\u00e0 calcoli ellissoidali basati sulle impostazioni dell'ellissoide e dell'unit\u00e0 di distanza del progetto.
Sintassi:
Argomenti:
Esempi:
length3D(geom_from_wkt('LINESTRINGZ(0 0 0, 3 0 4)')) \u2192 5.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_interpolate_angle","title":"line_interpolate_angle","text":"Restituisce l'angolo parallelo alla geometria ad una distanza specifica lungo una geometria di tipo linestring. Gli angoli sono in gradi in senso orario dal nord.
Sintassi:
Argomenti:
Esempi:
line_interpolate_angle(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=5) \u2192 90.0\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_interpolate_point","title":"line_interpolate_point","text":"Restituisce il punto interpolato ad una specifica distanza lungo una geometria di tipo linestring.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(line_interpolate_point(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=5)) \u2192 'Point (4 0)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_locate_point","title":"line_locate_point","text":"Restituisce la distanza lungo una linestring corrispondente alla posizione pi\u00f9 vicina alla linestring di una geometria puntuale specificata.
Sintassi:
Argomenti:
Esempi:
line_locate_point(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),point:=geom_from_wkt('Point(5 1)')) \u2192 5.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_merge","title":"line_merge","text":"Restituisce una geometria di tipo LineString o MultiLineString, dove qualsiasi LineString connessa dalla geometria in ingresso \u00e8 stata fusa (merge) in una linestring singola. Questa funzione restituir\u00e0 NULL
se la geometria considerata non \u00e8 una LineString/MultiLineString.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(line_merge(geom_from_wkt('MULTILINESTRING((0 0, 1 1),(1 1, 2 2))'))) \u2192 'LineString(0 0,1 1,2 2)'\ngeom_to_wkt(line_merge(geom_from_wkt('MULTILINESTRING((0 0, 1 1),(11 1, 21 2))'))) \u2192 'MultiLineString((0 0, 1 1),(11 1, 21 2)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_substring","title":"line_substring","text":"Restituisce la porzione di una geometria di linea (o curva) che rientra tra le distanze iniziale e finale specificate (misurata dall'inizio della linea). I valori Z e M sono linearmente interpolati dai valori esistenti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(line_substring(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),start_distance:=2,end_distance:=6)) \u2192 'LineString (2 0,6 0)'\nline_substring( $geometry, $length *.1,$length *.6) \u2192 <geometria: LineString>\n
--
Funzione utile per la tematizzazione
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m","title":"m","text":"Restituisce il valore m di una geometria puntuale.
Sintassi:
Argomenti:
Esempi:
( geom_from_wkt( 'POINTM(2 5 4)' ) ) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m_at","title":"m_at","text":"(>= QGIS 3.30)
Recupera una coordinata m della geometria, o un NULL se la geometria non ha valore m.
Sintassi:
Argomenti:
Esempi:
m_at(geom_from_wkt('LineStringZM(0 0 0 0, 10 10 0 5, 10 10 0 0)'), 1) \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m_max","title":"m_max","text":"Restituisce il valore minimo m (misura) di una geometria.
Sintassi:
Argomenti:
Esempi:
m_max( make_point_m( 0,0,1 ) ) \u2192 1\nm_max(make_line( make_point_m( 0,0,1 ), make_point_m( -1,-1,2 ), make_point_m( -2,-2,0 ) ) ) \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m_min","title":"m_min","text":"Restituisce il valore minimo m (misura) di una geometria.
Sintassi:
Argomenti:
Esempi:
m_min( make_point_m( 0,0,1 ) ) \u2192 1\nm_min(make_line( make_point_m( 0,0,1 ), make_point_m( -1,-1,2 ), make_point_m( -2,-2,0 ) ) ) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#main_angle","title":"main_angle","text":"Restituisce l'angolo principale di una geometria (senso orario, in gradi dal Nord), il quale rappresenta l'angolo dell'orientamento del rettangolo minimo che copre completamente la geometria.
Sintassi:
Argomenti:
Esempi:
main_angle(geom_from_wkt('Polygon ((321577 129614, 321581 129618, 321585 129615, 321581 129610, 321577 129614))')) \u2192 38.66\n
Osservazioni:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_circle","title":"make_circle","text":"Crea un poligono circolare.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(make_circle(make_point(10,10), 5, 4)) \u2192 'Polygon ((10 15, 15 10, 10 5, 5 10, 10 15))'\ngeom_to_wkt(make_circle(make_point(10,10,5), 5, 4)) \u2192 'PolygonZ ((10 15 5, 15 10 5, 10 5 5, 5 10 5, 10 15 5))''\ngeom_to_wkt(make_circle(make_point(10,10,5,30), 5, 4)) \u2192 'PolygonZM ((10 15 5 30, 15 10 5 30, 10 5 5 30, 5 10 5 30, 10 15 5 30))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_ellipse","title":"make_ellipse","text":"Crea un poligono ellittico.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_ellipse(make_point(10,10), 5, 2, 90, 4)) \u2192 'Polygon ((15 10, 10 8, 5 10, 10 12, 15 10))\ngeom_to_wkt(make_ellipse(make_point(10,10,5), 5, 2, 90, 4)) \u2192 'PolygonZ ((15 10 5, 10 8 5, 5 10 5, 10 12 5, 15 10 5))'\ngeom_to_wkt(make_circle(make_point(10,10,5,30), 5, 2, 90, 4)) \u2192 'PolygonZM ((15 10 5 30, 10 8 5 30, 5 10 5 30, 10 12 5 30, 15 10 5 30))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_line","title":"make_line","text":"Crea una geometria linea da una serie di geometrie punto.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_line(make_point(2,4),make_point(3,5))) \u2192 'LineString (2 4, 3 5)'\ngeom_to_wkt(make_line(make_point(2,4),make_point(3,5),make_point(9,7))) \u2192 'LineString (2 4, 3 5, 9 7)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#array-variant","title":"Array variant","text":"I vertici di linea sono specificati come una matrice di punti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_line(array(make_point(2,4),make_point(3,5),make_point(9,7)))) \u2192 'LineString (2 4, 3 5, 9 7)'\n
Espressione
make_line(\n array(geometry(\n get_feature_by_id('fontanelle_Palermo',$id))),\n array(geometry(\n get_feature_by_id('fontanelle_Palermo',not $id%2)))\n ) \n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_point","title":"make_point","text":"Crea una geometria punto da valori x ed y (e opzionalmente z ed m).
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_point(2,4,6,8)) \u2192 'PointZM (2 4 6 8)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_point_m","title":"make_point_m","text":"Crea una geometria punto da una coordinata x, y ed un valore m.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_point_m(2,4,6)) \u2192 'PointM (2 4 6)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_polygon","title":"make_polygon","text":"Crea una geometria poligono da un'anello esterno e opzionalmente da geometrie ad anello interne.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(make_polygon(geom_from_wkt('LINESTRING( 0 0, 0 1, 1 1, 1 0, 0 0 )'))) \u2192 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0))'\ngeom_to_wkt(make_polygon(geom_from_wkt('LINESTRING( 0 0, 0 1, 1 1, 1 0, 0 0 )'),geom_from_wkt('LINESTRING( 0.1 0.1, 0.1 0.2, 0.2 0.2, 0.2 0.1, 0.1 0.1 )'),geom_from_wkt('LINESTRING( 0.8 0.8, 0.8 0.9, 0.9 0.9, 0.9 0.8, 0.8 0.8 )'))) \u2192 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0),(0.1 0.1, 0.1 0.2, 0.2 0.2, 0.2 0.1, 0.1 0.1),(0.8 0.8, 0.8 0.9, 0.9 0.9, 0.9 0.8, 0.8 0.8))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_rectangle_3points","title":"make_rectangle_3points","text":"Crea un rettangolo da 3 punti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_rectangle_3points(make_point(0, 0), make_point(0,5), make_point(5, 5), 0))) \u2192 'Polygon ((0 0, 0 5, 5 5, 5 0, 0 0))'\ngeom_to_wkt(make_rectangle_3points(make_point(0, 0), make_point(0,5),make_point(5, 3), 1))) \u2192 'Polygon ((0 0, 0 5, 5 5, 5 0, 0 0))'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_regular_polygon","title":"make_regular_polygon","text":"Crea un poligono regolare.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(make_regular_polygon(make_point(0,0), make_point(0,5), 5)) \u2192 'Polygon ((0 5, 4.76 1.55, 2.94 -4.05, -2.94 -4.05, -4.76 1.55, 0 5))'\ngeom_to_wkt(make_regular_polygon(make_point(0,0), project(make_point(0,0), 4.0451, radians(36)), 5)) \u2192 'Polygon ((0 5, 4.76 1.55, 2.94 -4.05, -2.94 -4.05, -4.76 1.55, 0 5))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_square","title":"make_square","text":"Crea un quadrato da una diagonale.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_square( make_point(0,0), make_point(5,5))) \u2192 'Polygon ((0 0, -0 5, 5 5, 5 0, 0 0))'\ngeom_to_wkt(make_square( make_point(5,0), make_point(5,5))) \u2192 'Polygon ((5 0, 2.5 2.5, 5 5, 7.5 2.5, 5 0))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_triangle","title":"make_triangle","text":"Crea un poligono triangolare
Sintassi:
Argomenti:
geom_to_wkt(make_triangle(make_point(0,0), make_point(5,5), make_point(0,10))) \u2192 'Triangle ((0 0, 5 5, 0 10, 0 0))'\ngeom_to_wkt(boundary(make_triangle(make_point(0,0), make_point(5,5), make_point(0,10)))) \u2192 'LineString (0 0, 5 5, 0 10, 0 0)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_valid","title":"make_valid","text":">=QGIS 3.28 Firenze
Restituisce una geometria valida o una geometria vuota se non \u00e8 stato possibile renderla valida.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
- geom_to_wkt(make_valid(geom_from_wkt('POLYGON((3 2, 4 1, 5 8, 3 2, 4 2))'))) \u2192 'Polygon ((3 2, 3 4, 1 4, 1 2, 3 2))'\n- geom_to_wkt(make_valid(geom_from_wkt('POLYGON((3 2, 4 1, 5 8, 3 2, 4 2))'), 'linework')) \u2192 'GeometryCollection (Polygon ((5 8, 4 1, 3 2, 5 8)),LineString (3 2, 4 2))'\n- geom_to_wkt(make_valid(geom_from_wkt('POLYGON((3 2, 4 1, 5 8))'), method:='linework')) \u2192 'Polygon ((3 2, 3 4, 1 4, 1 2, 3 2))'\n- make_valid(geom_from_wkt('LINESTRING(0 0)')) \u2192 Una geometria vuota\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#_2","title":"Geometria","text":"","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#minimal_circle","title":"minimal_circle","text":"Restituisce la circonferenza circoscritta minima di una geometria. Rappresenta il cerchio minimo che circoscrive tutte le geometrie presenti in un dataset.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt( minimal_circle( geom_from_wkt( 'LINESTRING(0 5, 0 -5, 2 1)' ), 4 ) ) \u2192 Polygon ((0 5, 5 -0, -0 -5, -5 0, 0 5))\ngeom_to_wkt( minimal_circle( geom_from_wkt( 'MULTIPOINT(1 2, 3 4, 3 2)' ), 4 ) ) \u2192 Polygon ((3 4, 3 2, 1 2, 1 4, 3 4))\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#nodes_to_points","title":"nodes_to_points","text":"Restituisce una geometria multi-punti costituita da ogni nodo della geometria in ingresso.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(nodes_to_points(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)'))) \u2192 'MultiPoint ((0 0),(1 1),(2 2))'\ngeom_to_wkt(nodes_to_points(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))'),true)) \u2192 'MultiPoint ((-1 -1),(4 0),(4 2),(0 2))'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_geometries","title":"num_geometries","text":"Restituisce il numero di geometrie in una raccolta di geometrie, o il numero di parti in una geometria multiparte. La funzione restituisce NULL se la geometria di input non \u00e8 una raccolta.
Sintassi:
Argomenti:
Esempi:
num_geometries(geom_from_wkt('GEOMETRYCOLLECTION(POINT(0 1), POINT(0 0), POINT(1 0), POINT(1 1))')) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_interior_rings","title":"num_interior_rings","text":"Restituisce il numero di anelli interni in un poligono o in una raccolta di geometrie, o null se la geometria in ingresso non \u00e8 un poligono o una raccolta.
Sintassi:
Argomenti:
Esempi:
num_interior_rings(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),(-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1))')) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_points","title":"num_points","text":"Restituisce il numero di vertici in una geometria.
Sintassi:
Argomenti:
Esempi:
num_points($geometry) \u2192 numero di vertici in $geometry\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_rings","title":"num_rings","text":"Restituisce il numero di anelli (includendo anche anelli esterni) in un poligono o in una raccolta di geometrie, o null se la geometria in ingresso non \u00e8 un poligono o una raccolta.
Sintassi:
Argomenti:
Esempi:
num_rings(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),(-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1))')) \u2192 2\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#offset_curve","title":"offset_curve","text":"Restituisce una geometria formata facendo l'offset di una geometria di tipo linestring a lato. Le distanze sono espresse nel SR di tale geometria.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
offset_curve($geometry, 10.5) \u2192 linea scostata a sinistra di 10.5 unit\u00e0\noffset_curve($geometry, -10.5) \u2192 linea scostata a destra di 10.5 unit\u00e0\noffset_curve($geometry, 10.5, segments=16, join=1) \u2192 linea scostata a sinistra di 10.5 unit\u00e0, usando pi\u00f9 segmenti per risultare in una curva pi\u00f9 morbida\noffset_curve($geometry, 10.5, join=3) \u2192 linea scostata a sinistra di 10.5 unit\u00e0, usando un'unione smussata\n
Osservazioni:
La linea \u00e8 scostata a sinistra o destra rispetto al verso della linea:\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#order_parts","title":"order_parts","text":"Ordina le parti di una MultiGeometria secondo un dato criterio
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
order_parts(geom_from_wkt('MultiPolygon (((1 1, 5 1, 5 5, 1 5, 1 1)),((1 1, 9 1, 9 9, 1 9, 1 1)))'), 'area($geometry)', False) \u2192 MultiPolygon (((1 1, 9 1, 9 9, 1 9, 1 1)),((1 1, 5 1, 5 5, 1 5, 1 1)))\norder_parts(geom_from_wkt('LineString(1 2, 3 2, 4 3)'), '1', True) \u2192 LineString(1 2, 3 2, 4 3)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#oriented_bbox","title":"oriented_bbox","text":"Restituisce una geometria che rappresenta il perimetro di delimitazione minimo orientato di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(oriented_bbox(geom_from_wkt('MULTIPOINT(1 2, 3 4, 3 2)'))) \u2192 'Polygon ((1 2, 2 1, 4 3, 3 4, 1 2))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlaps","title":"overlaps","text":"Controlla qualora una geometria si sovrapponga ad un'altra. Restituisce true (1) se le geometrie condividono aree, ma non sono completamente contenute una nell'altra.
Sintassi:
Argomenti:
Esempi:
overlaps( geom_from_wkt( 'LINESTRING(3 5, 4 4, 5 5, 5 3)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 1\noverlaps( geom_from_wkt( 'LINESTRING(0 0, 1 1)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 0\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
overlaps(geometry(get_feature( 'cerchio','id','1')), $geometry)\n
dove:
geometry(get_feature('cerchio','id','1'))
$geometry
seleziono tutti i comuni overlaps
(sovrapposti) al cerchio in figura.
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli sovrapposti con il cerchio).
NOT overlaps(geometry(get_feature('cerchio','id','1')),$geometry)
Restituisce se l'elemento corrente contiene spazialmente almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target contenuti nell'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Contains\" sottostante, come descritto nella funzione PostGIS ST_CONTAINS.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_contains('regions') \u2192 true se l'elemento corrente contiene spazialmente una regione\noverlay_contains('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente contiene spazialmente una regione con una popolazione maggiore di 10000\noverlay_contains('regions', name) \u2192 un array di nomi, per le regioni contenute nell'elemento corrente\narray_to_string(overlay_contains('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni contenute nell'elemento corrente\noverlay_contains('regions', name)[0] \u2192 una stringa con il nome della regione contenuta nell'elemento corrente\narray_sort(overlay_contains(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni contenute nell'elemento corrente e con una popolazione superiore a 10000\noverlay_contains(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni contenute nell'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_crosses","title":"overlay_crosses","text":"Restituisce se l'elemento corrente attraversa spazialmente almeno un elemento di un layer target o un array di risultati basati su espressioni per gli elementi nel layer target attraversati dall'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Crosses\" sottostante, come descritto nella funzione PostGIS ST_Crosses.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_crosses('regions') \u2192 true se l'elemento corrente attraversa spazialmente una regione\noverlay_crosses('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente attraversa spazialmente una regione con una popolazione maggiore di 10000\noverlay_crosses('regions', name) \u2192 un array di nomi, per le regioni attraversate dall'elemento corrente\narray_to_string(overlay_crosses('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni attraversate dall'elemento corrente\noverlay_crosses('regions', name)[0] \u2192 una stringa con il nome della prima regioni attraversata dall'elemento corrente\narray_sort(overlay_crosses(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni attraversate dall'elemento corrente e con una popolazione superiore a 10000\noverlay_crosses(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni attraversate dall'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_disjoint","title":"overlay_disjoint","text":"Restituisce se l'elemento corrente \u00e8 spazialmente disgiunto da tutti gli elementi di un layer target, o un array di risultati basati su espressione per gli elementi nel layer target che sono disgiunti dall'elemento corrente. Ulteriori informazioni sul sottostante predicato GEOS \"Disjoint\", come descritto nella funzione PostGIS ST_Disjoint.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_disjoint('regions') \u2192 true se l'elemento corrente \u00e8 spazialmente disgiunto da tutte le regioni\noverlay_disjoint('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente \u00e8 spazialmente disgiunto da tutte le regioni con una popolazione maggiore di 10000\noverlay_disjoint('regions', name) \u2192 un array di nomi, per le regioni spazialmente disgiunte dall'elemento corrente\narray_to_string(overlay_disjoint('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni spazialmente disgiunte dall'elemento corrente\noverlay_disjoint('regions', name)[0] \u2192 una stringa con il nome della regione spazialmente disgiunte dall'elemento corrente\narray_sort(overlay_disjoint(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni spazialmente disgiunte dall'elemento corrente e con una popolazione superiore a 10000\noverlay_disjoint(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni spazialmente disgiunte dall'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_equals","title":"overlay_equals","text":"Restituisce se l'elemento corrente \u00e8 spazialmente uguale ad almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target che sono spazialmente uguali all'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Equals\" sottostante, come descritto nella funzione PostGIS ST_Equals.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_equals('regions') \u2192 true se l'elemento corrente \u00e8 spazialmente uguale ad una regione\noverlay_equals('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente \u00e8 spazialmente uguale ad una regione con una popolazione maggiore di 10000\noverlay_equals('regions', name) \u2192 un array di nomi, per le regioni spazialmente uguali all'elemento corrente\narray_to_string(overlay_equals('regions', name)) \u2192 una stringa come lista di nomi separati da virgole, per le regioni spazialmente uguali all'elemento corrente\noverlay_equals('regions', name)[0] \u2192 una stringa con il nome della regione spazialmente uguale all'elemento corrente\narray_sort(overlay_equals(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni spazialmente uguali all'elemento corrente e con una popolazione superiore a 10000\noverlay_equals(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni spazialmente uguali all'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_intersects","title":"overlay_intersects","text":"aggiornato a QGIS 3.24 Tisler
Restituisce se l'elemento corrente interseca spazialmente almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target intersecati dall'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Intersects\" sottostante, come descritto nella funzione PostGIS ST_INTERSECTS.
Sintassi <= QGIS 3.22.x
Sintassi >= QGIS 3.24.x
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_intersects('regions') \u2192 vero se l'elemento corrente interseca spazialmente una regione\noverlay_intersects('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente interseca spazialmente una regione con una popolazione maggiore di 10000\noverlay_intersects('regions', name) \u2192 un array di nomi, per le regioni intersecate dall'elemento corrente\narray_to_string(overlay_intersects('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni intersecate dall'elemento corrente\narray_sort(overlay_intersects(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni intersecate dall'elemento corrente e con una popolazione maggiore di 10000\noverlay_intersects(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni intersecate dall'elemento corrente\noverlay_intersects(layer:='regions', min_overlap:=0.54) \u2192 true se l'elemento corrente interseca spazialmente una regione e l'area di intersezione (di almeno una delle parti in caso di multipoligoni) \u00e8 maggiore o uguale a 0.54\noverlay_intersects(layer:='regions', min_inscribed_circle_radius:=0.54) \u2192 true se l'elemento corrente interseca spazialmente una regione e il raggio massimo del cerchio inscritto nell'area di intersezione (di almeno una delle parti in caso di parti multiple) \u00e8 maggiore o uguale a 0.54\noverlay_intersects(layer:='regions', expression:= geom_to_wkt($geometry), return_details:=true) \u2192 un array di mappe contenente 'id', 'result', 'overlap' e 'radius'\noverlay_intersects(layer:='regions', expression:= geom_to_wkt($geometry), sort_by_intersection_size:='des') \u2192 un array di geometrie (in WKT) ordinate per il valore di sovrapposizione in ordine decrescente\n
Esempio pratico:
Assegnare l'ID del poligono sovrapposto con maggiore area intersecata:
overlay_intersects(\n 'Reg01012022_G_Wgs84',\n \"cod_reg\",\n sort_by_intersection_size:='des')[0] -- sort_by_intersection_size Nuovo parametro\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_nearest","title":"overlay_nearest","text":"Restituisce se l'elemento corrente ha elementi da un layer target entro una data distanza o un array di risultati basati su espressioni per gli elementi nel layer di target entro una distanza dall'elemento corrente. Nota: questa funzione pu\u00f2 essere lenta e consuma molta memoria per layer con molte feature.
Sintassi:
NB: per QGIS >= 3.22.x, il parametro filter
\u00e8 dimanico, vedi qui.
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_nearest('airports') \u2192 true se il layer \"airports\" ha almeno un elemento\noverlay_nearest('airports', max_distance:= 5000) \u2192 vero se \u00e8 presente un aeroporto entro una distanza di 5000 unit\u00e0 dall'elemento corrente (misurata in maniera cartesiana nel sistema di riferimento dal layer sorgente)\noverlay_nearest('airports', name) \u2192 il nome dell'aereoporto pi\u00f9 vicino all'elemento corrente, come array\narray_to_string(overlay_nearest('airports', name)) \u2192 il nome dell'aereoporto pi\u00f9 vicino all'elemento corrente, come stringa\noverlay_nearest(layer:='airports', expression:= name, max_distance:= 5000) \u2192 il nome dell'aereoporto pi\u00f9 vicino entro una distanza di 5000 unit\u00e0 dall'elemento corrente, come array\noverlay_nearest(layer:='airports', expression:=\"name\", filter:= \"Use\"='Civilian', limit:=3) \u2192 un array di nomi, per un massimo di tre aeroeporti civili pi\u00f9 vicini ordinati per distanza\noverlay_nearest(layer:='airports', expression:=\"name\", limit:= -1, max_distance:= 5000) \u2192 un array di nomi, per tutti gli aeroporti entro una distanza di 5000 unit\u00e0 dall'elemento corrente, ordinato per distanza.\n
Esempio 45
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
Non documentato: La funzione, usata su uno stesso layer, esclude i casi banali, ovvero: se dovessi ricercare il punto pi\u00f9 vicino appartenente allo stesso layer. Chiaramente il punto pi\u00f9 vicino appartenente allo stesso layer \u00e8 il punto stesso, ma il codice \u00e8 fatto in modo che in questo caso venga escluso il punto stesso (che sarebbe un risultato banale) e cerca il secondo punto pi\u00f9 vicino nello stesso layer.
overlay_nearest(@layer_name, $geometry)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_touches","title":"overlay_touches","text":"Restituisce se l'elemento corrente tocca spazialmente almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target toccati dall'elemento corrente. Leggi ulteriori informazioni sul predicato GEOS \"Touches\", come descritto nella funzione PostGIS ST_TOUCHES.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_touches('regions') \u2192 true se l'elemento corrente tocca spazialmente una regione\noverlay_touches('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente tocca spazialmente una regione con una popolazione maggiore di 10000\noverlay_touches('regions', name) \u2192 un array di nomi, per le regioni tocacte dall'elemento corrente\nstring_to_array(overlay_touches('regions', name)) \u2192 una stringa come lista di nomi separati da virgole, per le regioni toccate dall'elemento corrente\noverlay_touches('regions', name)[0] \u2192 una stringa con il nome della regione toccata dall'elemento corrente\narray_sort(overlay_touches(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni toccate dall'elemento attuale e con una popolazione superiore a 10000\noverlay_touches(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni toccate dall'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_within","title":"overlay_within","text":"Restituisce se l'elemento corrente \u00e8 spazialmente all'interno di almeno un elemento da layer destinazione, o un array di risultati basati su espressione per gli elementi nel layer destinazione che contengono l'elemento corrente. Ulteriori informazioni sul sottostante predicato GEOS \"Within\", come descritto nella funzione PostGIS ST_WITHIN.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_within('regions') \u2192 true se l'elemento corrente \u00e8 spazialmente all'interno di una regione\noverlay_within('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente \u00e8 spazialmente all'interno di una regione con una popolazione maggiore di 10000\noverlay_within('regions', name) \u2192 un array di nomi, per le regioni contenenti l'elemento corrente\narray_to_string(overlay_within('regions', name)) \u2192 una stringa come lista di nomi separati da virgole, per le regioni che contengono l'elemento corrente\noverlay_within('regions', name)[0] \u2192 una stringa con il nome della regione che contengono l'elemento corrente\narray_sort(overlay_within(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni contenenti l'elemento corrente e con una popolazione superiore a 10000\noverlay_within(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni contenenti l'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#perimeter_1","title":"perimeter","text":"Calcola il perimetro di un oggetto a geometria poligonale. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura della lunghezza restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $perimeter, la quale esegue calcoli ellissoidali basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di misura della distanza.
Sintassi:
Argomenti:
Esempi:
perimeter(geom_from_wkt('POLYGON((0 0, 4 0, 4 2, 0 2, 0 0))')) \u2192 12.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#point_n","title":"point_n","text":"Restituisce un nodo specifico da una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(point_n(geom_from_wkt('POLYGON((0 0, 4 0, 4 2, 0 2, 0 0))'),2)) \u2192 'Point (4 0)'\n
--
Esempi correlati:
esempio nro 4 - Come aggiungere la quota Z alla tabella attributi
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#point_on_surface","title":"point_on_surface","text":"Restituisce un punto garantendo che sia giacente sulla superficie della geometria.
Sintassi:
Argomenti:
Esempi:
point_on_surface($geometry) \u2192 una geometria punto\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#pole_of_inaccessibility","title":"pole_of_inaccessibility","text":"Calcola il polo dell'inaccessibilit\u00e0 approssimato per una superficie, che \u00e8 il punto interno pi\u00f9 distante dal contorno della superficie. Questa funzione usa l'algoritmo 'polylabel' (Vladimir Agafonkin, 2016), che \u00e8 un approccio iterativo garantito per trovare il vero polo dell'inaccessibilit\u00e0 all'interno di una tolleranza specificata. Tolleranze pi\u00f9 precise richiedono pi\u00f9 iterazioni e sar\u00e0 necessario pi\u00f9 tempo per il calcolo.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(pole_of_inaccessibility( geom_from_wkt('POLYGON((0 1,0 9,3 10,3 3, 10 3, 10 1, 0 1))'), 0.1)) \u2192 'Point(1.55, 1.55)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#project","title":"project","text":"Restituisce un punto proiettato da un punto di partenza usando una distanza e una direzione di immersione (azimut) in radianti.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
project(make_point(1, 2), 3, radians(270)) \u2192 Point(-2, 2)\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#relate","title":"relate","text":"Testa la rappresentazione Dimensional Extended 9 Intersection Model (DE-9IM) della relazione tra due geometrie.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-di-relazione","title":"Variabile di relazione","text":"Restituisce la rappresentazione Dimensional Extended 9 Intersection Model (DE-9IM) della relazione tra due geometrie.
Sintassi:
Argomenti:
Esempi:
relate( geom_from_wkt( 'LINESTRING(40 40,120 120)' ), geom_from_wkt( 'LINESTRING(40 40,60 120)' ) ) \u2192 'FF1F00102'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-di-corrispondenza-del-modello","title":"Variabile di corrispondenza del modello","text":"Testa se la relazione DE-9IM tra due geometrie corrisponde a un pattern specificato: restituisc true Vero, false Falso.
Sintassi:
Argomenti:
Esempi:
relate( geom_from_wkt( 'LINESTRING(40 40,120 120)' ), geom_from_wkt( 'LINESTRING(40 40,60 120)' ), '**1F001**' ) \u2192 Vero\n
Link utili:
Inverte il verso di una linestring invertendo l'ordine dei sui vertici.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(reverse(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)'))) \u2192 'LINESTRING(2 2, 1 1, 0 0)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#rotate","title":"rotate","text":"Restituisce una versione ruotata di una geometria. I calcoli si trovano nel sistema di riferimento spaziale di questa geometria.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
rotate($geometry, 45, make_point(4, 5)) \u2192 la geometria ruotava di 45 gradi in senso orario attorno al punto (4, 5)\nrotate($geometry, 45) \u2192 la geometria ruotava di 45 gradi in senso orario attorno al centro del riquadro di delimitazione\n
>=QGIS 3.24
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#roundness","title":"roundness","text":"Calcola quanto una forma di poligono \u00e8 quasi un cerchio. La funzione restituisce 1 quando la forma del poligono \u00e8 un cerchio perfetto e 0 quando \u00e8 completamente piatta.
La definizione usata: Roundness = (4 * pi * Area) / Perimeter^2
Sintassi:
Argomenti:
Esempi:
round(roundness(geom_from_wkt('POLYGON(( 0 0, 0 1, 1 1, 1 0, 0 0))')), 3) \u2192 0.785\nround(roundness(geom_from_wkt('POLYGON(( 0 0, 0 0.1, 1 0.1, 1 0, 0 0))')), 3) \u2192 0.260\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#scale","title":"scale","text":"Restituisce una versione scalata di una geometria. I calcoli sono nel sistema di riferimento spaziale di questa geometria.
Sintassi:
Argomenti:
Esempi:
scale($geometry, 2, 0.5, make_point(4, 5)) \u2192 geometria scalata di due volte in orizzontale e dimezzata in verticale, intorno al punto (4, 5)\nscale($geometry, 2, 0.5) \u2192 geometria scalata di due volte in orizzontale e dimezzata in verticale, intorno al centro del suo riquadro di delimitazione\n
geometria scalata del 75% (in x e y) rispetto il centroide della stessa geometria di partenza:
scale($geometry,.75,.75, centroid($geometry))\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#segments_to_lines","title":"segments_to_lines","text":"Restituisce una geometria multi linea consistente in una linea per ogni segmento nella geometria in ingresso.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(segments_to_lines(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)'))) \u2192 'MultiLineString ((0 0, 1 1),(1 1, 2 2))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#shared_paths","title":"shared_paths","text":"Restituisce un insieme contenente i percorsi condivisi dalle due geometrie in ingresso. Quelli che vanno nella stessa direzione sono nel primo elemento della collezione, quelli che vanno nella direzione opposta sono nel secondo elemento. I percorsi di per se stessi sono dati nella direzione della prima geometria.
Sintassi:
Argomenti:
Esempi:
- geom_to_wkt(shared_paths(geom_from_wkt('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),(51 150,101 150,76 175,51 150)))'),geom_from_wkt('LINESTRING(151 100,126 156.25,126 125,90 161, 76 175)'))) \u2192 'GeometryCollection (MultiLineString ((126 156.25, 126 125),(101 150, 90 161),(90 161, 76 175)),MultiLineString EMPTY)'\n- geom_to_wkt(shared_paths(geom_from_wkt('LINESTRING(76 175,90 161,126 125,126 156.25,151 100)'),geom_from_wkt('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),(51 150,101 150,76 175,51 150))'))) \u2192 'GeometryCollection (MultiLineString EMPTY,MultiLineString ((76 175, 90 161),(90 161, 101 150),(126 125, 126 156.25)))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#shortest_line","title":"shortest_line","text":"Restituisce la linea pi\u00f9 corta che unisce la geometria 1 alla geometria 2. La linea risultante partir\u00e0 dalla geometria 1 e finir\u00e0 nella geometria 2.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(shortest_line(geom_from_wkt('LINESTRING (20 80, 98 190, 110 180, 50 75 )'),geom_from_wkt('POINT(100 100)'))) \u2192 LineString(73.0769 115.384, 100 100)\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#simplify","title":"simplify","text":"Semplifica una geometria rimuovendo nodi usando una soglia basata sulla distanza (cio\u00e8, l'algoritmo Douglas Peucker). L'algoritmo mantiene grandi deviazioni nelle geometrie e riduce il numero di vertici in segmenti quasi rettilinei.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(simplify(geometry:=geom_from_wkt('LineString(0 0, 5 0.1, 10 0)'),tolerance:=5)) \u2192 'LineString(0 0, 10 0)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#simplify_vw","title":"simplify_vw","text":"Semplifica una geometria rimuovendo nodi usando una soglia basata sull'area (cio\u00e8, l'algoritmo Visvalingam-Whyatt ). L'algoritmo rimuove i vertici che creano piccole aree nelle geometrie, ad esempio picchi stretti o segmenti quasi rettilinei.
Sintassi:
Argomenti:
Esempi:
geom_from_wkt('LineString(0 0, 5 0, 5.01 10, 5.02 0, 10 0)'),tolerance:=5)) \u2192 'LineString(0 0, 10 0)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#single_sided_buffer","title":"single_sided_buffer","text":"Restituisce una geometria formata facendo un buffer solo da un lato di una geometria di tipo linestring. Le distanze sono espresse nel SR di tale geometria.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
single_sided_buffer($geometry, 10.5) \u2192 linea bufferizzata a sinistra di 10.5 unit\u00e0\nsingle_sided_buffer($geometry, -10.5) \u2192 linea bufferizzata a destra di 10.5 unit\u00e0\nsingle_sided_buffer($geometry, 10.5, segments:=16, join:=1) \u2192 linea bufferizzata a sinistra di 10.5 unit\u00e0, usando pi\u00f9 segmenti per risultare in un buffer pi\u00f9 morbido\nsingle_sided_buffer($geometry, 10.5, join:=3) \u2192 linea bufferizzata a sinistra di 10.5 unit\u00e0, usando un'unione smussata\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#sinuosity","title":"sinuosity","text":"Restituisce la sinuosit\u00e0 di una curva che \u00e8 il rapporto tra la lunghezza della curva e la distanza diretta (2D) tra i suoi punti iniziali e finali.
Sintassi
Argomenti
Esempi
round(sinuosity(geom_from_wkt('LINESTRING(2 0, 2 2, 3 2, 3 3)')), 3) \u2192 1.265\nsinuosity(geom_from_wkt('LINESTRING( 3 1, 5 1)')) \u2192 1.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#smooth","title":"smooth","text":"Smussa una geometria con l'aggiunta di ulteriori nodi che arrotondano gli angoli nella geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(smooth(geometry:=geom_from_wkt('LineString(0 0, 5 0, 5 5)'),iterations:=1,offset:=0.2,min_length:=-1,max_angle:=180)) \u2192 'LineString (0 0, 4 0, 5 1, 5 5)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#square_wave","title":"square_wave","text":"Costruisce onde quadrate/rettangolari lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
square_wave(geom_from_wkt('LineString(0 0, 10 0)'), 3, 1) \u2192 Onde quadrate con lunghezza d'onda 3 e ampiezza 1 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#square_wave_randomized","title":"square_wave_randomized","text":"Costruisce onde quadrate/rettangolari casuali lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
square_wave_randomized(geom_from_wkt('LineString(0 0, 10 0)'), 2, 3, 0.1, 0.2) \u2192 Onde quadrate di dimensioni casuali con lunghezze d'onda tra 2 e 3 e ampiezze tra 0,1 e 0,2 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#start_point","title":"start_point","text":"Restituisce il primo nodo di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(start_point(geom_from_wkt('LINESTRING(4 0, 4 2, 0 2)'))) \u2192 'Point (4 0)'\n
Start_point di geometria poligonale:
Start_point di geometria lineare:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#straight_distance_2d","title":"straight_distance_2d","text":"Restituisce la distanza diretta/euclidea tra il primo e l'ultimo vertice di una geometria. La geometria deve essere una curva (circularstring, linestring).
Sintassi
Argomenti
Esempi
straight_distance_2d(geom_from_wkt('LINESTRING(1 0, 1 1)')) \u2192 1\nround(straight_distance_2d(geom_from_wkt('LINESTRING(1 4, 3 5, 5 0)')), 3) \u2192 5.657\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#sym_difference","title":"sym_difference","text":"Restituisce una geometria che rappresenta la porzione di due geometrie che non si interseca.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( sym_difference( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 8 8)' ) ) ) \u2192 LINESTRING(5 5, 8 8)\n
Espressione
-- differenza simmetrica tra le due linee\n sym_difference( \n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0)))),\n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry))\n )\n -- NB: -- l' ordine delle geometrie \u00e8 indifferente\n
Prova tu
Dati e progetto qgz
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#tapered_buffer","title":"tapered_buffer","text":"Crea un buffer lungo una geometria della linea in cui il diametro del buffer varia in modo uniforme sulla lunghezza della linea.
Sintassi:
[ ] contrassegna componenti opzionali
Argomenti:
Esempi:
tapered_buffer(geometry:=geom_from_wkt('LINESTRING(1 2, 4 2)'),start_width:=1,end_width:=2,segments:=8) \u2192 Un buffer rastremato che inizia con un diametro di 1 e termina con un diametro di 2 lungo la geometria della linea.\n
--
QGIS - feature
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#touches","title":"touches","text":"Verifica se una geometria tocca un'altra. Restituisce vero (1) se le geometrie hanno almeno un punto in comune, ma i loro interni non si intersecano.
Sintassi:
Argomenti:
Esempi:
touches( geom_from_wkt( 'LINESTRING(5 3, 4 4)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 1\ntouches( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'POINT(5 5)' ) ) \u2192 0\n
Nota bene:
--
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
touches(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)\n
dove:
geometry(get_feature( 'province_rt_rt','pk_uid','52'))
$geometry
seleziono tutti i comuni touches
(toccati) dalla provincia con pk_uid
46 (Siena)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli toccati dalla provincia di Siena).
NOT touches(geometry(get_feature( 'province_rt_rt','pk_uid','52')),$geometry)
Restituisce la geometria trasformata da un SR sorgente ad un SR di destinazione.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( transform( $geometry, 'EPSG:2154', 'EPSG:4326' ) ) \u2192 POINT(0 51)\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#translate","title":"translate","text":"Restituisce una versione traslata di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
translate($geometry, 5, 10) \u2192 una geometria dello stesso tipo come l'originale\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#triangular_wave","title":"triangular_wave","text":"Costruisce onde triangolari lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
triangular_wave(geom_from_wkt('LineString(0 0, 10 0)'), 3, 1) \u2192 Onde triangolari con lunghezza d'onda 3 e ampiezza 1 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#triangular_wave_randomized","title":"triangular_wave_randomized","text":"Costruisce onde triangolari casuali lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
triangular_wave_randomized(geom_from_wkt('LineString(0 0, 10 0)'), 2, 3, 0.1, 0.2) \u2192 Onde triangolari di dimensioni casuali con lunghezze d'onda tra 2 e 3 e ampiezze tra 0,1 e 0,2 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#union","title":"union","text":"Restituisce una geometria che rappresenta l'insieme dei punti dell'unione delle geometrie.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( union( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'POINT(5 5)' ) ) ) \u2192 MULTIPOINT(4 4, 5 5)\n
Espressione
-- unione delle due linee\n union( \n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0)))),\n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry))\n )\n -- NB: -- l' ordine delle geometrie \u00e8 indifferente\n
Prova tu
Dati e progetto qgz
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#wave","title":"wave","text":"Costruisce onde arrotondate (sinusoidali) lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
wave(geom_from_wkt('LineString(0 0, 10 0)'), 3, 1) \u2192 Onde sinusoidali con lunghezza d'onda 3 e ampiezza 1 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#wave_randomized","title":"wave_randomized","text":"Costruisce onde curve casuali (sinusoidali) lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
wave_randomized(geom_from_wkt('LineString(0 0, 10 0)'), 2, 3, 0.1, 0.2) \u2192 Onde curve di dimensioni casuali con lunghezze d'onda tra 2 e 3 e ampiezze tra 0,1 e 0,2 lungo la stringa\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#wedge_buffer","title":"wedge_buffer","text":"Restituisce un buffer a forma di cuneo che origina da una geometria del punto.
Sintassi:
[ ] contrassegna componenti opzionali
Argomenti:
Esempi:
wedge_buffer(center:=geom_from_wkt('POINT(1 2)'),azimuth:=90,width:=180,outer_radius:=1) \u2192 Un buffer a forma di cuneo centrato sul punto (1,2), rivolto verso est, con una larghezza di 180 gradi e raggio esterno di 1.\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#within","title":"within","text":"Controlla qualora una geometria sia interna ad un'altra. Restituisce 1 (vero) se la geometria1 \u00e8 completamente contenuta nella_ geometria2_.
Sintassi:
Argomenti:
Esempi:
within( geom_from_wkt( 'POINT( 0.5 0.5)' ), geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))' ) ) \u2192 1\nwithin( geom_from_wkt( 'POINT( 5 5 )' ), geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0 ))' ) ) \u2192 0\n
Osservazioni:
Usando algoritmo `Seleziona per espressione` presente in strumenti di processing oppure ![icona](https://docs.qgis.org/2.18/en/_images/mIconExpressionSelect.png) (Ctrl+F3):\n
- within($geometry,geometry(get_feature( 'province_rt_rt','pk_uid','53')))
dove:
$geometry
geometry(get_feature( 'province_rt_rt','pk_uid','53'))
seleziono tutti i comuni within
(contenuti) nella provincia con pk_uid
53 (Grosseto)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli contenuti nella provincia di Grosseto).
NOT within($geometry,geometry(get_feature( 'province_rt_rt','pk_uid','53')))
Altro esempio con condizione sulle etichette
Espressione
CASE WHEN within( $geometry,\n geometry(get_feature('poligono','id',1))) = 1\n THEN 'INTERNO'\n ELSE 'NON INTERNO'\n END\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_1","title":"x","text":"Restituisce la minima coordinata x di una geometria punto, o la coordinata x del centroide di una geometria non puntuale.
Sintassi:
Argomenti:
Esempi:
x( geom_from_wkt( 'POINT(2 5)' ) ) \u2192 2\nx( $geometry ) \u2192 coordinata x del centroide dell'elemento corrente\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_max","title":"x_max","text":"Restituisce la coordinata x massima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
x_max( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 4\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_min","title":"x_min","text":"Restituisce la coordinata x minima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
x_min( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 2\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_1","title":"y","text":"Restituisce la coordinata y minima di una geometria puntuale, o la coordinata y del centroide di una geometria non puntuale.
Sintassi:
Argomenti:
Esempi:
y( geom_from_wkt( 'POINT(2 5)' ) ) \u2192 5\ny( $geometry ) \u2192 coordinata y del centroide dell'elemento corrente\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_max","title":"y_max","text":"Restituisce la coordinata y massima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
y_max( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 8\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_min","title":"y_min","text":"Restituisce la coordinata y minima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
y_min( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 5\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z","title":"z","text":"Restituisce la coordinata z di una geometria puntuale.
Sintassi:
Argomenti:
Esempi:
z( geom_from_wkt( 'POINTZ(2 5 7)' ) ) \u2192 7\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_at","title":"z_at","text":"(>= QGIS 3.30)
Recupera una coordinata z della geometria, o un NULL se la geometria non ha valore z.
Sintassi:
Argomenti:
Esempi:
z_at(geom_from_wkt('LineStringZ(0 0 0, 10 10 5, 10 10 0)'), 1) \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_1","title":"$z","text":"Restituisce il valore z del punto corrente se \u00e8 3D. Se la feature \u00e8 una feature multipunto, verr\u00e0 restituito il valore z del primo punto.
Sintassi
Esempi
$z \u2192 123\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_max","title":"z_max","text":"Restituisce la coordinata z massima di una geometria.
Sintassi:
Argomenti:
Esempi:
z_max( geom_from_wkt( 'POINT ( 0 0 1 )' ) ) \u2192 1\nz_max( geom_from_wkt( 'MULTIPOINT ( 0 0 1 , 1 1 3 )' ) ) \u2192 3\nz_max( make_line( make_point( 0,0,0 ), make_point( -1,-1,-2 ) ) ) \u2192 0\nz_max( geom_from_wkt( 'LINESTRING( 0 0 0, 1 0 2, 1 1 -1 )' ) ) \u2192 2\nz_max( geom_from_wkt( 'POINT ( 0 0 )' ) ) \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_min","title":"z_min","text":"Restituisce la coordinata z minima di una geometria.
Sintassi:
Argomenti:
Esempi:
z_min( geom_from_wkt( 'POINT ( 0 0 1 )' ) ) \u2192 1\nz_min( geom_from_wkt( 'MULTIPOINT ( 0 0 1 , 1 1 3 )' ) ) \u2192 1\nz_min( make_line( make_point( 0,0,0 ), make_point( -1,-1,-2 ) ) ) \u2192 -2\nz_min( geom_from_wkt( 'LINESTRING( 0 0 0, 1 0 2, 1 1 -1 )' ) ) \u2192 -1\nz_min( geom_from_wkt( 'POINT ( 0 0 )' ) ) \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/lat_lon_tools/lat_lon_tools_unico/","title":"Lat Lon Tools","text":"Plugin Lat Lon Tools:
https://plugins.qgis.org/plugins/latlontools/
"},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/","title":"Gruppo Layer Mappa","text":"Abstract
Contiene una lista dei layer della mappa che sono disponibili nel progetto corrente. A partire dalla versione QGIS 3.241, sar\u00e0 possibile visualizzare i campi e valori dei layer in lista
","tags":["gruppo"]},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/#decode_uri","title":"decode_uri","text":"Prende un livello e decodifica l'uri del fornitore di dati sottostante, i dati sonodisponibili dipendono dal dataprovider.
Sintassi:
[ ] contrassegna componenti opzionali
Argomento:
Esempi:
decode_uri(@layer) \u2192 {'layerId': '0', 'layerName': '', 'path': '/home/qgis/shapefile.shp'}\ndecode_uri(@layer) \u2192 {'layerId': NULL, 'layerName': 'layer', 'path': '/home/qgis/geopackage.gpkg'}\ndecode_uri(@layer, 'path') \u2192 'C:\\my_data\\qgis\\shape.shp'\n
","tags":["gruppo"]},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/#layer_property","title":"layer_property","text":"Restituisce una propriet\u00e0 del layer corrispondente o un valore dei metadati.
Sintassi:
Argomento:
property una stringa corrispondente alla propriet\u00e0 da restituire. Le opzioni valide sono:
Esempi:
layer_property('streets','title') \u2192 'Basemap Streets'\nlayer_property('airports','feature_count') \u2192 120\nlayer_property('landsat','crs') \u2192 'EPSG:4326'\n
","tags":["gruppo"]},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/#load_layer","title":"load_layer","text":"(solo per Processing >= QGIS 3.30)
Carica un livello in base all'URI di origine e al nome del provider.
Sintassi:
[ ] contrassegna componenti opzionali
Argomento:
Esempi:
layer_property(load_layer('c:/data/roads.shp', 'ogr'), 'feature_count') \u2192 conteggio delle caratteristiche dal layer vettoriale c:/data/roads.shp\n
https://github.com/qgis/QGIS/pull/46505 \u21a9
Abstract
Questo gruppo contiene funzioni per manipolare le propriet\u00e0 degli oggetti del layout di stampa.
","tags":["gruppo"]},{"location":"gr_funzioni/layout/layout_unico/#item_variables","title":"item_variables","text":"Restituisce una mappa delle variabili da un oggetto del layout dentro il layout di stampa.
Sintassi:
Argomenti:
Esempi:
map_get( item_variables('Map 0'), 'map_scale') \u2192 scala dell'oggetto 'Map 0' nel layout di stampa corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/layout/layout_unico/#map_credits","title":"map_credits","text":"Restituisce un elenco di stringhe di credito (diritti di utilizzo) per i layer visualizzati in un oggetto della mappa di layout.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
array_to_string( map_credits( 'Main Map' ) ) \u2192 lista separata da virgola di crediti layer per i layer mostrati nell'oggetto di layout 'Mappa principale', ad esempio 'CC-BY-NC, CC-BY-SA'\n\narray_to_string( map_credits( 'Main Map', include_layer_names := true, layer_name_separator := ': ' ) ) \u2192 lista separata da virgola di nomi di layer e relativi crediti per i layer mostrati nell'oggetto di layout 'Mappa principale', ad es 'Linee ferroviarie: CC-BY-NC, mappa di base: CC-BY-SA'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/","title":"Gruppo Maps","text":"Abstract
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.
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#from_json","title":"from_json","text":"Carica una stringa formattata JSON
Sintassi:
from_json(string)
Argomenti:
Esempi:
from_json('{\"qgis\":\"rocks\"}') \u2192 { \"qgis\" : \"rocks\" }\nfrom_json('[1,2,3]') \u2192 [1,2,3]\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#hstore_to_map","title":"hstore_to_map","text":"Crea una mappa da una stringa formattata in hstore
Sintassi:
Argomenti:
Esempi:
hstore_to_map('qgis=>rocks') \u2192 { \"qgis\" : \"rocks\" }\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#json_to_map","title":"json_to_map","text":"Crea una mappa da una stringa formattata con json
Sintassi:
Argomenti:
Esempi:
json_to_map('{\"qgis\":\"rocks\"}') \u2192 { \"qgis\" : \"rocks\" }`\n
nota bene:
Funzione eliminata a partire da QGIS 3.18
https://github.com/qgis/QGIS/pull/42179
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map","title":"map","text":"Restituisce una mappa con tutte le chiavi ed i valori passati come coppie di parametri.
Sintassi:
map(key1, value1, key2, value2 , \u2026_)
Argomenti:
Esempi:
map('1','one','2', 'two') \u2192 map: 1: 'one', 2: 'two'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#_1","title":"Maps","text":"Altri esempi:
Definisco una map con:
Restituisce tutte le chiavi di una mappa come un array.
Sintassi:
Argomenti:
Esempi:
map_akeys(map('1','one','2','two')) \u2192 array: '1', '2'\n
Altri esempi:
map_akeys( \n map('Area_Ha',$area/10000,'Perimetro_km',$perimeter/1000)) \u2192 ['Area_Ha','Perimetro_km']\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#compositore-di-stampe","title":"Compositore di stampe","text":"akeys
utilizzabile in ambito compositore stampe per conoscere tutte le variabili disponibili per ogni Mappa
inserita:
wordwrap( array_to_string( map_akeys( item_variables( 'Mappa 1') ) ),1,',')\n
risultato della espressione:
_project_transform_context\nitem_id\nitem_uuid\nlayer_ids\nlayers\nlayout_dpi\nlayout_name\nlayout_numpages\nlayout_page\nlayout_pageheight\nlayout_pageoffsets\nlayout_pagewidth\nlogo_osgeo4w\nmap_crs\nmap_crs_acronym\nmap_crs_definition\nmap_crs_description\nmap_crs_ellipsoid\nmap_crs_proj4\nmap_crs_projection\nmap_crs_wkt\nmap_end_time\nmap_extent\nmap_extent_center\nmap_extent_height\nmap_extent_width\nmap_id\nmap_interval\nmap_layer_ids\nmap_layers\nmap_rotation\nmap_scale\nmap_start_time\nmap_units\nproject_abstract\nproject_area_units\nproject_author\nproject_basename\nproject_creation_date\nproject_crs\nproject_crs_acronym\nproject_crs_definition\nproject_crs_description\nproject_crs_ellipsoid\nproject_crs_proj4\nproject_crs_wkt\nproject_distance_units\nproject_ellipsoid\nproject_filename\nproject_folder\nproject_home\nproject_identifier\nproject_keywords\nproject_last_saved\nproject_path\nproject_title\nproject_units\nqgis_locale\nqgis_os_name\nqgis_platform\nqgis_release_name\nqgis_short_version\nqgis_version\nqgis_version_no\nuser_account_name\nuser_full_name\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_avals","title":"map_avals","text":"Restituisce tutti valori di una mappa come un array.
Sintassi:
Argomenti:
Esempi:
map_avals(map('1','one','2','two')) \u2192 array: 'one', 'two'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_concat","title":"map_concat","text":"Restituisce una mappa con tutte le entit\u00e0 della mappe fornite. Se due mappe contengono la stessa chiave, viene restituito il valore della seconda mappa.
Sintassi:
map_concat(__map1, _map2, \u2026_)
Argomenti:
Esempi:
map_concat(map('1','one', '2','overridden'),map('2','two', '3','three')) \u2192 map: 1: 'one, 2: 'two', 3: 'three'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_delete","title":"map_delete","text":"Restituisce una mappa con il valore della corrispondente chiave passata rimosso.
Sintassi:
map_delete(map, key)
Argomenti:
Esempi:
map_delete(map('1','one','2','two'),'2') \u2192 map: 1: 'one'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_exist","title":"map_exist","text":"Restituisce vero se la chiave passata esiste in mappa.
Sintassi:
map_exist(map, key)
Argomenti:
Esempi:
map_exist(map('1','one','2','two'),'3') \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_get","title":"map_get","text":"Restituisce il valore di una mappa, passando la sua chiave.
Sintassi:
map_get(map, key)
Argomenti:
Esempi:
map_get(map('1','one','2','two'),'2') \u2192 'two'\n
Altri esempi:
map_get(\nmap_concat(map('Area_Ha',$area/10000,'Perimetro_km',$perimeter/1000)),\nmap(Proprietario','Pippo','CF','FNDCCCDDDEEEFFF'),'CF') \u2192 'FNDCCCDDDEEEFFF'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#compositore-di-stampe_1","title":"Compositore di stampe","text":"Nuova funzione item_variables
presente, nel gruppo Layout, solo se utilizzate all'interno di un contesto di composizione.
La funzione accetta un singolo argomento, l'id per un elemento all'interno della composizione e restituisce una mappa del nome della variabile sul valore per quell'elemento. Questo ti permette di fare cose come inserire il testo in un'etichetta che recuperi le propriet\u00e0 di un altro elemento nella composizione, ad es:
Inserisci la scala della mappa (Mappa 1
) in un'etichetta:
map_get( item_variables('Mappa 1'),'map_scale')\n
Inserisci la coordinata x del centro della mappa (Mappa 1
) in un'etichetta:
x(map_get( item_variables('Mappa 1'),'map_extent_center'))\n
Changelog QGIS 3.0
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_insert","title":"map_insert","text":"Restituisce una mappa con una chiave/valore aggiunto. Se la chiave esiste gi\u00e0, il suo valore verr\u00e0 sovrascritto.
Sintassi:
Argomenti:
Esempi:
map_insert(map('1','one'),'3','three') \u2192 map: 1: 'one', 3: 'three'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_prefix_keys","title":"map_prefix_keys","text":"Restituisce una mappa con tutte le chiavi precedute da una data stringa.
Sintassi:
Argomenti:
Esempi:
map_prefix_keys(map('1','one','2','two'), 'prefix-') \u2192 { 'prefix-1': 'one', 'prefix-2': 'two' }\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_to_hstore","title":"map_to_hstore","text":"Unisci gli elementi della mappa in una stringa formattata in hstore.
Sintassi:
Argomenti:
Esempi:
map_to_hstore(map('qgis','rocks')) \u2192 \"qgis\"=>\"rocks\"}\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_to_json","title":"map_to_json","text":"Unisci gli elementi della mappa in una stringa formattata con json.
Sintassi:
Argomenti:
Esempi:
map_to_json(map('qgis','rocks')) \u2192 {\"qgis\":\"rocks\"}\n
nota bene:
Funzione eliminata a partire da QGIS 3.18
https://github.com/qgis/QGIS/pull/42179
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#to_json","title":"to_json","text":"Creare una stringa in formato JSON da una mappa, array o altro valore.
Sintassi:
Argomenti:
Esempi:
to_json(map('qgis','rocks')) \u2192 {\"qgis\":\"rocks\"}\nto_json(array(1,2,3)) \u2192 [1,2,3]\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#url_encode","title":"url_encode","text":"Restituisce una stringa codificata come URL da una mappa. Trasforma tutti i caratteri nella loro forma correttamente codificata producendo una stringa di query completamente conforme. Nota che il segno pi\u00f9 '+' non viene convertito.
Sintassi:
Argomenti:
Esempi:
url_encode(map('a&+b', 'a and plus b', 'a=b', 'a equals b')) \u2192 'a%26+b=a%20and%20plus%20b&a%3Db=a%20equals%20b'\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/","title":"Gruppo Matematica","text":"Abstract
Questo gruppo contiene funzioni matematiche es. radice quadrata, seno e coseno.
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#abs","title":"abs","text":"Restituisce il valore assoluto di un numero.
Sintassi:
Argomenti:
Esempi:
abs(-2) \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#acos","title":"acos","text":"Restituisce l'arcocoseno del valore in radianti.
Sintassi:
Argomenti:
Esempi:
acos(0.5) \u2192 1.0471975511966\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#asin","title":"asin","text":"Restituisce l'arcoseno del valore in radianti.
Sintassi:
Argomenti:
Esempi:
asin(1.0) \u2192 1.5707963267949\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#atan","title":"atan","text":"Restituisce l'arcotangente del valore in radianti.
Sintassi:
Argomenti:
Esempi:
atan(0.5) \u2192 0.463647609000806\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#atan2","title":"atan2","text":"Restituisce la arcotangente di dy/dx usando i segni dei due argomenti per determinare il quadrante del risultato.
Sintassi:
Argomenti:
Esempi:
atan2(1.0, 1.732) \u2192 0.523611477769969\n
Wikipedia
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#azimuth","title":"azimuth","text":"Restituisce l'azimut dal nord quale angolo in radianti misurato in senso orario dalla verticale del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
degrees( azimuth( make_point(25, 45), make_point(75, 100) ) ) \u2192 42.273689\ndegrees( azimuth( make_point(75, 100), make_point(25,45) ) ) \u2192 222.273689\n
vedasi nel gruppo funzioni Geometria Azimuth
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#ceil","title":"ceil","text":"Arrotonda un numero all'intero superiore.
Sintassi:
Argomenti:
Esempi:
ceil(4.9) \u2192 5\nceil(-4.9) \u2192 -4\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#clamp","title":"clamp","text":"Limita un valore in ingresso a un intervallo specificato.
Sintassi:
Argomenti:
Esempi:
clamp(1,5,10) \u2192 5 (input \u00e8 compreso tra 1 e 10 per cui \u00e8 restituito invariato)\nclamp(1,0,10) \u2192 1 (input \u00e8 pi\u00f9 piccolo del valore minimo di 1, cos\u00ec la funzione restituisce 1)\nclamp(1,11,10) \u2192 10 (input \u00e8 pi\u00f9 grande del valore massimo di 10, cos\u00ec la funzione restituisce 10)\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#cos","title":"cos","text":"Restituisce il coseno di un angolo.
Sintassi:
Argomenti:
Esempi:
cos( 1.5707963267948966 ) \u2192 0.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#degrees","title":"degrees","text":"Converte da radianti a gradi decimali.
Sintassi:
Argomenti:
Esempi:
degrees(3.14159) \u2192 179.99984796050427\ndegrees(1) \u2192 57.2958\ndegrees(pi()) \u2192 180\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#exp","title":"exp","text":"Restituisce l'esponenziale di un valore.
Sintassi:
Argomenti:
Esempi:
exp(1.0) \u2192 2.71828182845905\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#floor","title":"floor","text":"Arrotonda un numero all'intero inferiore.
Sintassi:
Argomenti:
OSSERVAZIONE: Alla funzione Floor
(in alcuni casi) corrisponde l'operatore //
(Floor division)
Esempi:
floor(4.9) \u2192 4\nfloor(-4.9) \u2192 -5\nfloor(2/26) = 2//26\n
Esempi:
Vedi esempio conversione
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#inclination","title":"Inclination","text":"Restituisce l'inclinazione misurata dallo zenit (0) al nadir (180) del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
inclination( make_point( 5, 10, 0 ), make_point( 5, 10, 5 ) ) \u2192 0.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 50, 100, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, -5 ) ) \u2192 180.0\n
vedasi nel gruppo funzioni Geometria Inclination
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#ln","title":"ln","text":"Restituisce il logaritmo naturale di un valore.
Sintassi:
Argomenti:
Esempi:
ln(1) \u2192 0\nln(2.7182818284590452354) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#log","title":"log","text":"Restituisce il valore del logaritmo della base e valore passati.
Sintassi:
Argomenti:
Esempi:
log(2, 32) \u2192 5\nlog(0.5, 32) \u2192 -5\nlog(2.7182818284590452354, 1) = ln(1) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#log10","title":"log10","text":"Restituisce il valore del logaritmo in base10 dell'espressione passata.
Sintassi:
Argomenti:
Esempi:
log10(1) \u2192 0\nlog10(100) \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#max","title":"max","text":"Restituisce il valore maggiore di un insieme di valori.
Sintassi:
Argomenti:
Esempi:
max(2,10.2,5.5) \u2192 10.2\nmax(20.5,NULL,6.2) \u2192 20.5\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#min","title":"min","text":"Restituisce il valore minore di un insieme di valori.
Sintassi:
Argomenti:
Esempi:
min(20.5,10,6.2) \u2192 6.2\nmin(2,-10.3,NULL) \u2192 -10.3\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#pi","title":"pi","text":"Restituisce il valore di Pi greco
Sintassi:
Esempi:
pi() \u2192 3.14159265358979\n
--
Wikipedia Pi greco Mai senza
Il mio logo personale:
L'unione di tre simboli matematici che hanno rivoluzionato il Mondo:
Con un po' di fantasia dovreste leggere il mio nome Tot\u00f2 \ud83d\ude0e
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#radians","title":"radians","text":"Converte da gradi decimali a radianti.
Sintassi:
Argomenti:
Esempi:
radians(180) \u2192 3.14159\nradians(57.2958) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#rand","title":"rand","text":"Restituisce un intero casuale nell'intervallo specificato fra un minimo ed un massimo (inclusi). Se viene fornito un seme, il reso sar\u00e0 sempre lo stesso, a seconda del seme.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
rand(1, 10) \u2192 8\nrand( 10, 100,1) \u2192 68\n
Osservazioni:
Novit\u00e0 introdotta nella QGIS 3.12
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#randf","title":"randf","text":"Restituisce un numero in virgola mobile casuale nell'intervallo specificato da un minimo ed un massimo (inclusi). Se viene fornito un seme, il reso sar\u00e0 sempre lo stesso, a seconda del seme.
Sintassi:
Argomenti:
Esempi:
randf(1, 10) \u2192 4.59258286403147\nrandf(1, 10,3) \u2192 6.028893906608612\n
Esempi:
Osservazioni
Novit\u00e0 introdotta nella QGIS 3.12
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#round","title":"round","text":"Arrotonda un numero ad un numero di cifre decimali.
Sintassi:
Argomenti:
Esempi:
round(1234.567, 2) \u2192 1234.57\nround(1234.567) \u2192 1235\nround(1234.567,-2) \u2192 1200\n
Esempi:
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#scale_exp","title":"scale_exp","text":"Trasforma un valore dato da un dominio in ingresso in un intervallo in uscita usando una curva esponenziale. Questa funzione pu\u00f2 essere usata per agevolare gradualmente in entrata o in uscita i valori dell'intervallo in uscita specificato.
Sintassi:
Argomenti:
Esempi:
scale_exp(5,0,10,0,100,2) \u2192 25 (agevolazione graduale in entrata, usando un esponente di 2)\nscale_exp(3,0,10,0,100,0.5) \u2192 54.772 (agevolazione graduale in uscita, usando un esponente di 0.5)\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#scale_linear","title":"scale_linear","text":"Trasforma un dato valore da un dominio in ingresso ad un intervallo in uscita usando un'interpolazione lineare.
Sintassi:
Argomenti:
Esempi:
scale_linear(5,0,10,0,100) \u2192 72\nscale_linear(0.2,0,1,0,360) \u2192 72 (per scalare un valore tra 0 e 1 in un angolo tra 0 e 360)\nscale_linear(1500,1000,10000,9,20) \u2192 10.22 (per scalare una popolazione che varia tra 1000 e 10000 in una dimensione del carattere tra 9 e 20)\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#sin","title":"sin","text":"Restituisce il seno di un angolo.
Sintassi:
Argomenti:
Esempi:
sin(1.571) \u2192 0.999999682931835\nsin(pi()/2) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#sqrt","title":"sqrt","text":"Restituisce la radice quadrata di un valore.
Sintassi:
Argomenti:
Esempi:
sqrt(9) \u2192 3\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#tan","title":"tan","text":"Restituisce la tangente di un angolo.
Sintassi:
Argomenti:
Esempi:
tan(1.0) \u2192 1.5574077246549\ntan(pi()/2) \u2192 infinito\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/","title":"Gruppo Operatori","text":"Abstract
**Questo gruppo contiene operatori es. + - ***
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#and","title":"AND","text":"Restituisce 1 quando le condizioni a e b sono vere.
Sintassi:
Argomenti:
Esempi:
TRUE AND TRUE \u2192 1\nTRUE AND FALSE \u2192 0\n4 = 2+2 AND 1 = 1 \u2192 1\n4 = 2+2 AND 1 = 2 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#diverso","title":"<> (diverso)","text":"Confronta due valori e pone a 1 se essi non sono uguali.
Sintassi:
Argomenti:
Esempi:
5 <> 4 \u2192 1\n4 <> 4 \u2192 0\n5 <> NULL \u2192 NULL\nNULL <> NULL \u2192 NULL\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#diviso","title":"/ (diviso)","text":"Divisione di due valori.
Sintassi:
Argomenti:
Esempi:
5 / 4 \u2192 1.25\n5 / NULL \u2192 NULL\nNULL / 5 \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#doppio-pipe","title":"|| (doppio pipe)","text":"Unisce due valori assieme in una stringa.
Se uno dei valori \u00e8 NULL il risultato sar\u00e0 NULL. Vedi la funzione CONCAT con caratteristiche differenti.
Sintassi:
Argomenti:
Esempi:
'Qui' || ' e ' || 'l\u00e0' \u2192 'Qui e l\u00e0'\n'Nothing' || NULL \u2192 NULL\n'Dia: ' || \"Diameter\" \u2192 'Dia: 25' (\"Diameter\" - un campo tabella attributi)\n1 || 2 \u2192 '12'\n
Osservazioni:
Puoi concatenare stringhe usando ||
o +
. Quest'ultimo significa anche somma nelle espressioni. Quindi se hai un intero (campo o valore numerico) questo pu\u00f2 essere soggetto a errori. In questo caso, dovresti usare ||
. Se si concatenano due valori stringa, \u00e8 possibile utilizzare entrambi.
Restituisce 1 se il primo parametro soddisfa senza tener conto delle maiuscole o minuscole il modello fornito. LIKE pu\u00f2 essere usato al posto di ILIKE per eseguire una comparazione che tenga conto delle maiuscole e minuscole. Funziona anche con i numeri.
Sintassi:
Argomenti:
'%'
come carattere jolly, '_'
come un singolo carattere e '\\'
per eseguire l'escape.Esempi:
'A' ILIKE 'A' \u2192 1\n'A' ILIKE 'a' \u2192 1\n'A' ILIKE 'B' \u2192 0\n'ABC' ILIKE 'b' \u2192 0\n'ABC' ILIKE 'B' \u2192 0\n'ABC' ILIKE '_b_' \u2192 1\n'ABC' ILIKE '_B_' \u2192 1\n'ABCD' ILIKE '_b_' \u2192 0\n'ABCD' ILIKE '_B_' \u2192 0\n'ABCD' ILIKE '_b%' \u2192 1\n'ABCD' ILIKE '_B%' \u2192 1\n'ABCD' ILIKE '%b%' \u2192 1\n'ABCD' ILIKE '%B%' \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#in","title":"IN","text":"Restituisce 1 se il valore viene trovato in una lista di valori.
Sintassi:
Argomenti:
Esempi:
'A' IN ('A','B') \u2192 1\n'A' IN ('C','B') \u2192 0\n
Osservazioni:
La funzione distingue maiuscolo dal minuscolo!!!
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#is","title":"IS","text":"Restituisce 1 se a \u00e8 uguale a b.
Sintassi:
Argomenti:
Esempi:
'A' IS 'A' \u2192 1\n*'A' IS 'a' \u2192 0\n4 IS 4 \u2192 1\n4 IS 2+2 \u2192 1\n4 IS 2 \u2192 0\n$geometry IS NULL \u2192 0, se la tua geometria non \u00e8 NULL\n
Osservazioni:
La funzione distingue maiuscolo dal minuscolo!!!
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#is-not","title":"IS NOT","text":"Restituisce 1 se a non \u00e8 uguale a b.
Sintassi:
Sintassi:
Argomenti:
Esempi:
'a' IS NOT 'b' \u2192 1\n'a' IS NOT 'a' \u2192 0\n4 IS NOT 2+2 \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#like","title":"LIKE","text":"Restituisce 1 se il primo parametro soddisfa il modello fornito. Funziona anche con i numeri.
Sintassi:
Argomenti:
'%'
come carattere jolly, '_'
come un singolo carattere e '\\'
per eseguire l'escape.Esempi:
'A' LIKE 'A' \u2192 1\n'A' LIKE 'a' \u2192 0\n'A' LIKE 'B' \u2192 0\n'ABC' LIKE 'B' \u2192 0\n'ABC' LIKE '_B_' \u2192 1\n'ABCD' LIKE '_B_' \u2192 0\n'ABCD' LIKE '_B%' \u2192 1\n'ABCD' LIKE '%B%' \u2192 1\n'1%' LIKE '1\\\\%' \u2192 1\n'1_' LIKE '1\\\\%' \u2192 0\n
Osservazioni:
La funzione distingue maiuscolo dal minuscolo!!!
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#not-between","title":"NOT BETWEEN","text":"Restituisce TRUE se il valore non \u00e8 all'interno dell'intervallo specificato. L'intervallo \u00e8 considerato comprensivo dei limiti.
Sintassi:
Argomenti:
Esempi:
'B' NOT BETWEEN 'A' AND 'C' \u2192 FALSE\n1.0 NOT BETWEEN 1.1 AND 1.2 \u2192 TRUE\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#between","title":"BETWEEN","text":"Restituisce TRUE se il valore rientra nell'intervallo specificato. L'intervallo \u00e8 considerato comprensivo dei limiti. Per verificare l'esclusione pu\u00f2 essere utilizzato NOT BETWEEN
.
Sintassi:
Argomenti:
Esempi:
'B' BETWEEN 'A' AND 'C' \u2192 TRUE\n2 BETWEEN 1 AND 3 \u2192 TRUE\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#maggiore","title":"> (maggiore)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 maggiore del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 > 4 \u2192 1\n5 > 5 \u2192 0\n4 > 5 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#maggiore-uguale","title":">= (maggiore uguale)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 maggiore o uguale del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 >= 4 \u2192 1\n5 >= 5 \u2192 1\n4 >= 5 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#operatore-meno","title":"Operatore - (meno)","text":"Sottrazione di due valori. Se uno dei due valori \u00e8 NULL il risultato sar\u00e0 NULL.
Sintassi
Argomenti:
Esempi:
5 - 4 \u2192 1\n5 - NULL \u2192 NULL\nto_datetime('2012-05-05 12:00:00') - to_interval('1 day 2 hours') \u2192 2012-05-04T10:00:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#minore","title":"< (minore)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 minore del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 < 4 \u2192 0\n5 < 5 \u2192 0\n4 < 5 \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#minore-uguale","title":"<= (minore uguale)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 minore o uguale del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 <= 4 \u2192 0\n5 <= 5 \u2192 1\n4 <= 5 \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#not","title":"NOT","text":"Nega una condizione.
Sintassi
Argomenti:
Esempi:
NOT 1 \u2192 0\nNOT 0 \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#or","title":"OR","text":"Restituisce 1 quando la condizione a oppure b \u00e8 vera.
Sintassi
Argomenti:
Esempi:
4 = 2+2 OR 1 = 1 \u2192 1\n4 = 2+2 OR 1 = 2 \u2192 1\n4 = 2 OR 1 = 2 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#indice-operatore","title":"[] Indice operatore","text":"Restituisce un elemento da un array o valore mappa.
Sintassi:
Argomenti:
Esempi:
array(1,2,3)[0] \u2192 1\narray(1,2,3)[2] \u2192 3\narray(1,2,3)[-1] \u2192 3\nmap('a',1,'b',2)['a'] \u2192 1\nmap('a',1,'b',2)['b'] \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#potenza","title":"^ (potenza)","text":"Elevazione a potenza di due valori.
Sintassi:
Argomenti:
Esempi:
5 ^ 4 \u2192 625\n5 ^ NULL \u2192 NULL\nNULL ^ 5 \u2192 NULL\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#prodotto","title":"* (prodotto)","text":"Moltiplicazione di due valori.
Sintassi
Argomenti:
Esempi:
5 * 4 \u2192 20\n5 NULL \u2192 NULL\nNULL 5 \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#resto-divisione","title":"% (resto divisione)","text":"Resto della divisione. In aritmetica il resto \u00e8 la quantit\u00e0 di *dividendo che \u00e8 avanzata dalla divisione, cio\u00e8 quella quantit\u00e0 che non \u00e8 stata possibile dividere per il divisore affinch\u00e9 il risultato rimanga nell'insieme dei numeri interi
. Per definizione: Il resto di una divisione denota la quantit\u00e0 da sottrarre a un dividendo al fine di renderlo divisibile per un divisore.
Sintassi
Argomenti:
Esempio:
17 : 2 = 8 resto 1
Sottraendo a 17 il resto di 1 si ottiene 16, numero divisibile per due (la cui met\u00e0 \u00e8 8). Nella divisione tra 17 e 2, va tenuto da parte il resto, ossia quel numero che, se diviso, farebbe rientrare il risultato in un altro insieme numerico.
Il resto di una divisione denota la quantit\u00e0 da sottrarre a un dividendo al fine di renderlo divisibile per un divisore.
OSSERVAZIONE1: Se il dividendo fosse pi\u00f9 piccolo del Divisore, il resto sarebbe sempre uguale al Dividendo;
OSSERVAZIONE2 occhio al segno!!!
Esempi:
5 % 4 \u2192 1\n5 % NULL \u2192 NULL\nNULL % 5 \u2192 NULL\n10 % 20 \u2192 10\n-10 % 3 \u2192 -1\n10 % -3 \u2192 1\n
Altri esempi:
Un esempio molto utile nel campo GIS riguarda l'etichettatura curve di livello: supponiamo di voler etichettare le curve di livello (con passo 50 m) e visualizzare solo le etichette con passo 200 m, l'espressione da usare \u00e8 la seguente:
CASE WHEN ( \"ELEV\" % 200 ) = 0 THEN \"ELEV\" END\n
ecco il risultato:
PRIMA:
DOPO:
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#somma","title":"+ (somma)","text":"Addizione di due valori. Se uno dei due valori \u00e8 NULL il risultato sar\u00e0 NULL.
Sintassi
Argomenti:
Esempi:
5 + 4 \u2192 9\n5 + NULL \u2192 NULL\n'QGIS ' + 'ROCKS' \u2192 'QGIS ROCKS'\nto_datetime('2020-08-01 12:00:00') + '1 day 2 hours' \u2192 2020-08-02T14:00:00\n
Osservazioni:
Puoi concatenare stringhe usando ||
o +
. Quest'ultimo significa anche somma nelle espressioni. Quindi se hai un intero (campo o valore numerico) questo pu\u00f2 essere soggetto a errori. In questo caso, dovresti usare ||
. Se si concatenano due valori stringa, \u00e8 possibile utilizzare entrambi.
Esegue un'espressione regolare su di una stringa.
Sintassi
Argomenti:
\\\\d
Esempi:
'hello' ~ 'll' \u2192 1\n'hello' ~ '^ll' \u2192 0\n'hello' ~ 'llo$' \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#uguale","title":"= (uguale)","text":"Confronta due valori e pone a 1 se essi sono uguali.
Sintassi
Argomenti:
Esempi:
5 = 4 \u2192 0\n4 = 4 \u2192 1\n5 = NULL \u2192 NULL\nNULL = NULL \u2192 NULL\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/raster/raster_unico/","title":"Gruppo Raster","text":"Abstract
Contiene funzioni che calcolano statistiche e valori raster.
","tags":["gruppo"]},{"location":"gr_funzioni/raster/raster_unico/#raster_statistic","title":"raster_statistic","text":"Restituisce statistiche da un raster.
Sintassi:
Argomento:
property una stringa che indica la propriet\u00e0 da restituire. Opzioni valide sono:
Esempi:
raster_statistic('lc',1,'avg') \u2192 Valore medio per la banda 1 da un raster layer 'lc'\nraster_statistic('ac2010',3,'min') \u2192 Valore minimo dalla banda 3 da un layer raster 'ac2010'\nraster_statistic( 'sicilia_dtm40',1,'max') \u2192 valore massimo del DTM\n
Nota bene
Queste statistiche sono riferite sempre a tutto il raster anche se la geometria \u00e8 pi\u00f9 o meno estesa del raster. Nel caso che segue ho popolato il campo raster del vettore punto con il valore max dell'intero DTM
","tags":["gruppo"]},{"location":"gr_funzioni/raster/raster_unico/#raster_value","title":"raster_value","text":"Restituisce il valore raster trovato nel punto fornito. NOVIT\u00c0 QGIS 3.4 OTTOBRE 2018
Sintassi:
Argomento:
Esempi:
raster_value( 'DTM_Pescaglia',1,$geometry) \u2192 631.2899169921875\n
Nota bene
Esempi:
Animazione
raster_value() con pi\u00f9 bande e pi\u00f9 layer
espressione usata:
'R ' || raster_value( 'Italia_tinitaly',1, $geometry ) \n|| '-' || \n'G ' || raster_value( 'Italia_tinitaly',2, $geometry ) \n|| '-' || \n'B ' || raster_value( 'Italia_tinitaly',3, $geometry ) \n|| '-' || \n'Z ' || raster_value( 'dtm_20m_32',1, $geometry ) \n
Video demo
","tags":["gruppo"]},{"location":"gr_funzioni/recente/recente/","title":"Recente","text":"Abstract
Questo gruppo contiene funzioni usate di recente. A seconda del contesto del suo utilizzo (selezione delle funzionalit\u00e0, calcolatrice di campo, generico), qualsiasi espressione applicata viene aggiunta all'elenco corrispondente (fino a venti espressioni), ordinata dalla pi\u00f9 recente alla meno recente. Ci\u00f2 aiuta a recuperare e riapplicare rapidamente qualsiasi espressione utilizzata in precedenza.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/","title":"Gruppo Record e Attributi","text":"Abstract
Questo gruppo contiene funzioni che operano sugli identificativi dei record.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#currentfeature","title":"$currentfeature","text":"Restituisce l'elemento corrente corrente da valutare. Questo pu\u00f2 essere usato con la funzione 'attribute' per valutare i valori dell'attributo dall'elemento corrente. ATTENZIONE: questa funzione \u00e8 deprecata (a partire da QGIS 3.28.0 Firenze). Si consiglia di utilizzare la variabile sostitutiva @feature.
Sintassi:
Esempi:
- attribute( $currentfeature, 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n- attribute( @feature, 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#id","title":"$id","text":"Restituisce l'id geometria della riga corrente. ATTENZIONE: Questa funzione \u00e8 deprecata (a partire da QGIS 3.28 Firenze). Si consiglia di utilizzare la variabile sostitutiva @id
Sintassi:
Esempi:
$id \u2192 71\n@id \u2192 71\n
Osservazioni:
Questa funzione inizia sempre da 0 con vettore shapefile da 1 con i database
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#is_attribute_valid","title":"is_attribute_valid","text":"(>= QGIS 3.30)
Restituisce TRUE se un attributo di caratteristica specifico soddisfa tutti i vincoli.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
is_attribute_valid('HECTARES') \u2192 TRUE se il valore dell'elemento corrente nel campo \"ETTARI\" soddisfa tutti i vincoli.\nis_attribute_valid('HOUSES',get_feature('my_layer', 'FID', 10), 'my_layer') \u2192 FALSE se il valore nel campo \"HOUSES\" dell'elemento con \"FID\"=10 in 'my_layer' non soddisfa tutti i vincoli.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#is_feature_valid","title":"is_feature_valid","text":"(>= QGIS 3.30)
Restituisce TRUE se un attributo di caratteristica specifico soddisfa tutti i vincoli.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
is_feature_valid(strength:='hard') \u2192 TRUE se tutti i campi della funzione corrente soddisfano i relativi vincoli rigidi.\nis_feature_valid(get_feature('my_layer', 'FID', 10), 'my_layer') \u2192 FALSE se tutti i campi dell'elemento con \"FID\"=10 in 'my_layer' non soddisfano tutti i vincoli.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#attribute","title":"attribute","text":"Restituisce un attributo da un elemento.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-1","title":"Variante 1","text":"Restituisce il valore di un attributo dall'elemento corrente.
Sintassi:
Argomenti:
Esempi:
attribute( 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-2","title":"Variante 2","text":"Consente di specificare l'elemento di destinazione e il nome dell'attributo.
Sintassi:
Argomenti:
Esempi:
attribute( $currentfeature, 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#attributes","title":"attributes","text":"Restituisce una mappa contenente tutti gli attributi di un elemento, con i nomi dei campi come chiavi della mappa.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-1_1","title":"Variante 1","text":"Restituisce una mappa di tutti gli attributi dall'attuale elemento.
Sintassi:
Esempi:o
attributes()['name'] \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
per trasformare una feature (una riga di una tabella) in un array:
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-2_1","title":"Variante 2","text":"Consente di specificare la feature di destinazione.
Sintassi:
Argomenti:
Esempi:
attributes( @atlas_feature )['name'] \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente dell'atlante\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#display_expression","title":"display_expression","text":"Restituisce l'espressione visualizzata per un dato elemento in un layer. L'espressione \u00e8 sempre valutata. Pu\u00f2 essere usata con lo zero, uno o pi\u00f9 argomenti, vedi sotto per dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nessun-parametro","title":"Nessun parametro","text":"Se chiamata senza parametri, la funzione valuter\u00e0 l'espressione di visualizzazione dell'elemento corrente nel layer corrente.
Sintassi:
Esempi:
display_expression() \u2192 L'espressione visualizzata dell'elemento corrente nel layer corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#un-parametro-feature","title":"Un parametro 'feature'","text":"Se chiamata con il solo parametro 'feature', la funzione valuter\u00e0 l'elemento specificato nel layer corrente.
Sintassi:
Argomenti:
Esempi:
display_expression(@atlas_feature) \u2192 L'espressione visualizzata dell'elemento corrente dell'atlante.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#parametri-del-layer-ed-elementi","title":"Parametri del Layer ed elementi","text":"Se la funzione viene chiamata sia con un layer che con un elemento, valuter\u00e0 l'elemento specificato dal layer indicato.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
display_expression( 'streets', get_feature_by_id('streets', 1)) \u2192 L'espressione visualizzata dell'elemento con ID 1 sul layer 'streets'.\ndisplay_expression('a_layer_id', $currentfeature, 'False') \u2192 L'espressione visualizzata del dato elemento non \u00e8 stata valutata.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#feature_id","title":"feature_id","text":"(>= QGIS 3.30)
Restituisce l'ID univoco di una funzione o NULL se la funzione non \u00e8 valida.
Sintassi:
Argomenti:
Esempi:
feature_id( @feature ) \u2192 l'ID dell'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#get_feature","title":"get_feature","text":"Restituisce il primo elemento di un layer che corrisponde ad un dato valore di attributo.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-a-valore-singolo","title":"Variante a valore singolo","text":"Insieme all'ID livello, vengono specificati una singola colonna e un valore.
Sintassi:
Argomenti:
Esempi:
get_feature('streets','name','main st') \u2192 prima geometria trovata nel vettore \"streets\" con valore \"main st\" nel campo \"name\"\nget_feature( 'streets', 'fid', attribute( $currentfeature, 'name') ) \u2192 Restituisce la prima feature nel layer \"streets\" il cui campo \"fid\" ha lo stesso valore del campo \"nome\" della feature corrente` (una sorta di JOIN)\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-map","title":"Variante map","text":"QGIS >= 3.24
Insieme all'ID livello, una mappa contenente le colonne (chiave) e il rispettivo valore da utilizzare.
Sintassi:
Argomenti:
Esempi:
get_feature('streets',map('name','main st','lane_num','4')) \u2192 primo elemento trovato in 'streets' con il valore 'main st' nel campo 'name' e il valore '4' nel campo 'lane_num'\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#get_feature_by_id","title":"get_feature_by_id","text":"Restituisce l'id dell'elemento della riga corrente.
Sintassi:
Argomenti:
Esempi:
get_feature_by_id('streets', 1) \u2192 l'elemento con id 1 nel vettore \"streets\"\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#is_selected","title":"is_selected","text":"Restituisce Vero se \u00e8 selezionata una funzione. Pu\u00f2 essere usato con zero, uno o due argomenti, vedi sotto per i dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#senza-parametri","title":"Senza parametri","text":"Se chiamata senza parametri, la funzione restituir\u00e0 vero se \u00e8 selezionata la feature corrente nel layer corrente.
Sintassi:
Esempi:
is_selected() \u2192 True (vero) se l'elemento corrente \u00e8 selezionato.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#una-feature-come-parametro","title":"Una Feature come parametro","text":"Se chiamata con il solo parametro 'feature', la funzione restituisce true se l'elemento specificato \u00e8 selezionato nel layer attuale.
Sintassi:
Argomenti:
Esempi:
is_selected(@atlas_feature) \u2192 Vero se l'elemento corrente dell'atlante \u00e8 selezionato.\nis_selected(get_feature('streets', 'name', 'Main St.'))) \u2192 Vero se l'unico elemento con nome \"Main St.\" sul layer \"streets\" attivo \u00e8 selezionato.\nis_selected(get_feature_by_id('streets', 1)) \u2192 Vero se l'elemento con l'ID 1 sul layer \"streets\" attivo \u00e8 selezionato.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#due-parametri","title":"Due parametri","text":"Se la funzione \u00e8 chiamata sia con un layer che con un elemento, questa restituir\u00e0 vero se l'elemento specificato del layer specificato \u00e8 selezionato.
Sintassi:
Argomenti:
Esempi:
is_selected( 'streets', get_feature('streets', 'name', \"street_name\")) \u2192 Vero se \u00e8 selezionata la strada dell'edificio corrente (supponendo che il layer edifici abbia un campo denominato 'street_name' e il layer strade abbia un campo denominato 'name' con valori univoci).\nis_selected( 'streets', get_feature_by_id('streets', 1)) \u2192 Vero se l'elemento con l'ID 1 nel layer \"streets\" \u00e8 selezionato.\n
Esempio etichettatura tramite regola:
Esempio tematizzazione tramite regola:
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#maptip","title":"maptip","text":"Restituisce il suggerimento mappa di un dato elemento in un vettore. Per impostazione predefinita, l'espressione \u00e8 valutata. Pu\u00f2 essere usata con zero, uno o pi\u00f9 argomenti, vedi sotto per dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nessun-parametro_1","title":"Nessun parametro","text":"Se chiamata senza parametri, la funzione valuter\u00e0 il suggerimento mappa dell'elemento corrente nel layer corrente.
Sintassi:
Esempi:
maptip() \u2192 Il suggerimento mappa dell'elemento corrente nel layer corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#un-parametro-feature_1","title":"Un parametro 'feature'","text":"Se chiamata con il solo parametro 'feature ', la funzione valuter\u00e0 l'elemento specificato nel layer corrente.
Sintassi:
Argomenti:
Esempi:
maptip(@atlas_feature) \u2192 Il suggerimento mappa dell'elemento corrente dell'atlante.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#parametri-del-layer-ed-elementi_1","title":"Parametri del Layer ed elementi","text":"Se la funzione viene chiamata sia con un layer che con un elemento, valuter\u00e0 l'elemento specificato dal layer indicato.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
maptip('streets', get_feature_by_id('streets', 1)) \u2192 Il suggerimento mappa dell'elemento con ID 1 sul vettore 'streets'.\nmaptip('a_layer_id', $currentfeature, 'False') \u2192 Il suggerimento mappa del dato elemento non valutato.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#num_selected","title":"num_selected","text":"Restituisce il numero di geometrie selezionate in un vettore dato. Per impostazione predefinita funziona sul vettore sul quale l'espressione \u00e8 valutata.
Sintassi:
Argomenti:
Esempi:
num_selected() \u2192 Il numero di geometrie selezionate nel vettore corrente.\nnum_selected('streets') \u2192 Il numero di geometrie selezionate nel vettore streets\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#represent_attributes","title":"represent_attributes","text":"Restituisce una mappa con i nomi degli attributi come chiavi ed i valori di rappresentazione configurati come valori. Il valore di rappresentazione per gli attributi dipende dal tipo di widget configurato per ogni attributo. Pu\u00f2 essere usato con zero, uno o pi\u00f9 argomenti, vedi sotto per i dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nessun-paramentro","title":"Nessun paramentro","text":"Se chiamata senza parametri, la funzione restituisce la rappresentazione degli attributi dell'elemento corrente nel layer corrente.
Sintassi:
Esempio:
represent_attributes() \u2192 La rappresentazione degli attributi per l'elemento corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#un-parametro-feature_2","title":"Un parametro feature","text":"Se chiamata solo con un parametro 'feature', la funzione restituisce la rappresentazione degli attributi dell'elemento specificato dal layer corrente.
Sintassi:
Argomenti:
Esempio:
represent_attributes($currentfeature) \u2192 La rappresentazione degli attributi per l'elemento corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#parametri-layer-e-feature","title":"Parametri layer e feature","text":"Se chiamata con un parametro 'layer' e un parametro 'feature', la funzione restituir\u00e0 la rappresentazione degli attributi dell'elemento specificato dal layer specificato
Sintassi:
Argomenti:
Esempio:
represent_attributes(@layer, $currentfeature) \u2192 La rappresentazione degli attributi per l'elemento corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#represent_value","title":"represent_value","text":"Restituisce il metodo di rappresentazione configurato per un valore di un campo. Esso dipende dal tipo di widget configurato. Spesso, questo \u00e8 molto utile per i widget 'Mappa Valore'.
Sintassi:
Argomenti:
Esempi:
represent_value(\"field_with_value_map\") \u2192 Descrizione per il valore\nrepresent_value('static value', 'field_name') \u2192 Descrizione per il valore statico\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#sqlite_fetch_and_increment","title":"sqlite_fetch_and_increment","text":"Gestisce i valori incrementali nei database sqlite.
I valori predefiniti in SQlite possono essere applicati all'inserimento e non possono venir elaborati con il prefetch.
Ci\u00f2 rende impossibile l'acquisizione e l'incremento della chiave primaria tramite l'AUTO_INCREMENT prima della creazione della riga nel database. Note a margine: con postgres, questo funziona tramite l'opzione valuta i valori predefiniti.
Quando vengono aggiunti nuovi elementi che hanno relazioni, \u00e8 veramente grazioso poter aggiungere elementi figlio per un genitore, mentre il modulo dei genitori \u00e8 ancora aperto e l'elemento genitore non \u00e8 ancora salvato.
Per sorpassare questa limitazione, questa funzione pu\u00f2 essere usata per gestire valori sequenziali in una tabella separata basata su un formato sqlite come il gpkg.
La tabella sequenza sar\u00e0 filtrata per un id sequenziale (filter_attribute e filter_value) ed il valore attuale dell'id_field sar\u00e0 incrementato di 1 e verr\u00e0 restituto il valore incrementato.
Se colonne aggiuntive richiedono che per esse debbano venir specificati valori, i default_values map possono essere usati per questo scopo.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nota","title":"Nota","text":"Questa funzione modifica la tabella sqlite di destinazione. Essa \u00e8 intesa per l'uso con la configurazione predefinita per gli attributi. Quando il parametro \u00e8 un layer ed il layer \u00e8 in modo transazione, il valore viene recuperato solo una volta durante il tempo di vita di una transazione e memorizzato ed incrementato. Ci\u00f2 rende insicuro lavorare sullo stesso database con diversi processi in parallelo.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
sqlite_fetch_and_increment(@layer, 'sequence_table', 'last_unique_id', 'sequence_id', 'global', map('last_change', 'date(''now'')', 'user', '''' || @user_account_name || '''')) \u2192 0\nsqlite_fetch_and_increment(layer_property(@layer, 'path'), 'sequence_table', 'last_unique_id', 'sequence_id', 'global', map('last_change', 'date(''now'')', 'user', '''' || @user_account_name || '''')) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#uuid","title":"uuid","text":"Genera un Universally Unique Identifier (UUID) per ciascun record usando il metodo Qt QUuid::createUuid. Aggiornato dalla QGIS 3.18
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
uuid() \u2192 '{0bd2f60f-f157-4a6d-96af-d4ba4cb366a1}'\nuuid('WithoutBraces') \u2192 '0bd2f60f-f157-4a6d-96af-d4ba4cb366a1'\nuuid('Id128') \u2192 '0bd2f60ff1574a6d96afd4ba4cb366a1'\n
1.png)
","tags":["gruppo"]},{"location":"gr_funzioni/reference/dbquery/","title":"dbquery","text":"--
"},{"location":"gr_funzioni/reference/dbquery/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbquery/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbquery/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbquery/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/dbsql/","title":"dbsql","text":"--
"},{"location":"gr_funzioni/reference/dbsql/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbsql/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbsql/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbsql/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/","title":"dbvalue","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbvalue/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/","title":"dbvaluebyid","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbvaluebyid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/","title":"geomcontains","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomcontains/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/","title":"geomcrosses","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomcrosses/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/","title":"Geomdisjoint","text":""},{"location":"gr_funzioni/reference/geomdisjoint/#funzione-geomdisjoint","title":"Funzionegeomdisjoint
","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomdisjoint/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/","title":"geomdistance","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomdistance/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomequals/","title":"geomequals","text":"--
"},{"location":"gr_funzioni/reference/geomequals/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomequals/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomequals/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomequals/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/","title":"geomintersects","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomintersects/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/","title":"geomnearest","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomnearest/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/","title":"geomoverlaps","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomoverlaps/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomredef/","title":"geomredef","text":"--
"},{"location":"gr_funzioni/reference/geomredef/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomredef/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomredef/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomredef/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/","title":"geomtouches","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomtouches/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/","title":"geomwithin","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomwithin/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/","title":"Intersecting geom count","text":""},{"location":"gr_funzioni/reference/intersecting_geom_count/#funzione-intersecting_geom_count","title":"Funzioneintersecting_geom_count
","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/intersecting_geom_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/","title":"Intersecting geom sum","text":""},{"location":"gr_funzioni/reference/intersecting_geom_sum/#funzione-intersecting_geom_sum","title":"Funzioneintersecting_geom_sum
","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/intersecting_geom_sum/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/reference/","title":"Reference","text":"Questo gruppo \u00e8 presente SOLO dopo aver installato il plugin refFunctions. Plugin che aggiunge funzioni utente personalizzate al calcolatore di campi di QGIS per fare riferimento, analiticamente o spazialmente, tra i livelli, ad esempio recuperare un valore da un livello usando come valore di campo o una condizione spaziale (interseca, disgiunti ....) come parametro.
Funzione Descrizione Funzioni della tabella: dbvalue Recupera il primo valore targetField da targetLayer quando keyField \u00e8 uguale a conditionValue dbvaluebyid Recupera il valore targetField da targetLayer usando l'ID della caratteristica interna dbquery Recupera il primo valore targetField da targetLayer quando whereClause \u00e8 true dbsql Recupera i risultati dalla query SQL Funzioni WKT: WKTcentroid Restituisce il centro di massa della geometria data come geometria del punto WKT WKTpointonsurface Restituisce il punto all'interno della geometria data WKTlenght Restituisce la lunghezza della geometria WKT fornita WKTarea Restituisce l'area della geometria WKT indicata Funzioni geometriche: geomRedef ridefinire la geometria della feature corrente con una nuova geometria WKT (sperimentale!) geomnearest Recupera il valore del campo target dalla funzione di destinazione pi\u00f9 vicina nel livello di destinazione geomdistance Recupera il valore del campo target dalla funzione target nel livello di destinazione se la funzione target \u00e8 in distanza geomwithin Recupera il valore del campo obiettivo quando la funzione di origine si trova all'interno della funzione di destinazione nel livello di destinazione geomtouches Recupera il valore del campo obiettivo quando la funzione sorgente tocca la funzione di destinazione nel livello di destinazione geomintersects Recupera il valore del campo obiettivo quando la caratteristica sorgente interseca la caratteristica obiettivo nel livello di destinazione geomcontains Recupera il valore del campo obiettivo quando la funzione di origine contiene la funzione di destinazione nel livello di destinazione geomcwithin Recupera il valore del campo obiettivo quando la funzione di origine \u00e8 disgiunta dalla funzione di destinazione nel livello di destinazione geomequals Recupera il valore del campo obiettivo quando la funzione di origine \u00e8 uguale alla funzione di destinazione nel livello di destinazione geomoverlaps Recupera il valore del campo obiettivo quando la funzione sorgente si sovrappone alla funzione di destinazione nel livello di destinazione geomcrosses Recupera il valore del campo obiettivo quando la caratteristica sorgente attraversa la caratteristica obiettivo nel livello di destinazione geomdisjoint Recupera il valore del campo obiettivo quando la funzione di origine \u00e8 disgiunta dalla funzione di destinazione nel livello di destinazione intersecting_geom_count Ottieni il conteggio delle funzionalit\u00e0 nel livello di destinazione intersecate dalla funzione di origine intersecting_geom_sum Somma gli attributi delle geometrie del livello di destinazione intersecati dalla funzione di origine "},{"location":"gr_funzioni/reference/wktarea/","title":"wktarea","text":"--
"},{"location":"gr_funzioni/reference/wktarea/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktarea/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktarea/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktarea/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/","title":"wktcentroid","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktcentroid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/","title":"wktlenght","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktlenght/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/","title":"wktpointonsurface","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktpointonsurface/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/relazioni/relazioni/","title":"Relazioni","text":"Abstract
Questo gruppo contiene tutte le relazioni del progetto, sar\u00e0 visibile solo se il progetto ha delle relazioni tra layer.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/","title":"Gruppo Stringhe di Testo","text":"Abstract
Questo gruppo contiene le funzioni che operano sulle stringhe es. sostituzione, conversione in maiuscolo.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#ascii","title":"ascii","text":"Restituisce il codice unicode associato al primo carattere di una stringa.
Sintassi:
Argomenti:
Esempi:
ascii('Q') \u2192 81\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#char","title":"char","text":"Restituisce il carattere associato ad un codice unicode.
Sintassi:
Argomenti:
Esempi:
char(81) \u2192 'Q'\nchar(178) \u2192 '\u00b2'\nchar(179) \u2192 '\u00b3'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#concat","title":"concat","text":"Concatena svariate stringhe in una sola. Valori NULL sono convertiti in stringhe vuote. Altri valori (come i numeri) sono convertiti in stringa.
Sintassi:
Argomenti:
Esempi:
concat('To', 't\u00f2') \u2192 'Tot\u00f2'\nconcat('a','b','c','d','e') \u2192 'abcde'\nconcat('Anno ', 2018) \u2192 'Anno 2018'\nconcat('QGIS 3.0', NULL) \u2192 'QGIS 3.0'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#format","title":"format","text":"Formatta una stringa usando gli argomenti forniti.
Sintassi:
Argomenti:
Esempi:
format('This %1 a %2','is', 'test') \u2192 'Questo \u00e8 un test'\nformat('This is %2','a bit unexpected but 2 is lowest number in string','normal') \u2192 'This is a bit unexpected but 2 is lowest number in string'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#format_date","title":"format_date","text":"Formatta una data o una stringa in un formato stringa personalizzato. Usa le Qt date/time format strings. Vedi QDateTime::toString.
Sintassi:
Argomenti:
Queste espressioni possono essere usate per la parte time della stringa da formattare:
Espressione Risultato h l'ora senza lo zero iniziale (da 0 a 23 o da 1 a 12 se visualizzi AM/PM) hh l'ora con lo zero iniziale (da 00 a 23 o da 01 a 12 se visualizzi AM/PM) H l'ora senza lo zero iniziale (da 0 a 23, anche se visualizzi AM/PM) HH l'ora con lo zero iniziale (da 00 a 23, anche se visualizzi AM/PM) m il minuto senza lo zero iniziale (da 0 a 59) mm il minuto con lo zero iniziale (da 00 a 59) s il secondo senza lo zero iniziale (da 0 a 59) ss il secondo con lo zero iniziale (da 00 a 59) z i millisecondi senza gli zeri iniziali (da 0 a 999) zzz i millisecondi con gli zeri iniziali (da 000 a 999) AP o A interpretato come un orario nel formato AM/PM. AP deve essere \"AM\" oppure \"PM\". ap o a interpretato come un orario nel formato AM/PM. ap deve essere \"am\" oppure \"pm\".Esempi:
format_date('2012-05-15','dd.MM.yyyy') \u2192 '15.05.2012'\nformat_date('2012-05-15','d MMMM yyyy','fr') \u2192 '15 mai 2012'\nformat_date('2012-05-15','dddd') \u2192 'Tuesday', se la lingua corrente \u00e8 una variante inglese\nformat_date('2012-05-15 13:54:20','dd.MM.yy') \u2192 '15.05.12'\nformat_date('13:54:20','hh:mm AP') \u2192 '01:54 PM'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#format_number","title":"format_number","text":"Restituisce un numero formattato con il separatore locale per le migliaia. Inoltre tronca il numero al numero di posti forniti.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
format_number(10000000.332,2) \u2192 '10,000,000.33' se ad es. la locale corrente \u00e8 una variante inglese\nformat_number(10000000.332,2,'fr') \u2192 '10 000 000,33'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#left","title":"left","text":"Restituisce una sottostringa che contiene gli n caratteri pi\u00f9 a sinistra della stringa.
Sintassi:
Argomenti:
Esempi:
left('Hello World',5) \u2192 'Hello'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#length","title":"length","text":"Restituisce il numero di caratteri in una stringa o la lunghezza di una geometria di tipo linestring.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-stringa","title":"Variabile stringa","text":"Restituisce il numero di caratteri contenuti in una stringa.
Sintassi:
Argomenti:
Esempi:
length('hello') \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-geometria","title":"Variabile geometria","text":"Calcola la lunghezza di un oggetto a geometria lineare. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura della lunghezza restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $length, la quale esegue calcoli ellissoidici basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di distanza.
Sintassi:
Argomenti:
Esempi:
length(geom_from_wkt('LINESTRING(0 0, 4 0)')) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#lower","title":"lower","text":"Converte una stringa in lettere minuscole.
Sintassi:
Argomenti:
Esempi:
lower('HELLO World') \u2192 'hello world'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#lpad","title":"lpad","text":"Restituisce una stringa riempita a sinistra fino alla larghezza specificata, utilizzando un carattere di riempimento. Se la larghezza della destinazione \u00e8 inferiore alla lunghezza della stringa, la stringa viene troncata.
Sintassi:
Argomenti:
Esempi:
lpad('Hello', 10, 'x') \u2192 'xxxxxHello'\nlpad('Hello', 3, 'x') \u2192 'Hel'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#altri-esempi-utili","title":"Altri esempi utili","text":"se volessi popolare un campo in modo da ottenere segnale01.png, segnale02.png...segnale99.png
id path 10 segnale01.png 15 segnale02.png 22 segnale03.png .. .. 520 segnale99.pngespressione utilizzata:
'segnale' || lpad( @row_number ,2, '00' )|| '.png' \u2192 'segnale01.png'\n
--
per ricostruire un identificativo univoco CODICE_ASC
lpad(\"CODICE_STR\",8,0)||\nlpad( \"NUM_CIV\",5,0) ||\ncoalesce(\"BARRATO\",'')\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#ltrim","title":"ltrim","text":"Rimuove la stringa pi\u00f9 lunga contenente solo i caratteri specificati (un carattere spazio come impostazione predefinita) dall'inizio della stringa.
Sintassi:
Argomenti:
Esempi:
ltrim(' hello world ') \u2192 'hello world '\nltrim('zzzytest', 'xyz') \u2192 'test'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#regexp_match","title":"regexp_match","text":"Restituisce la prima posizione di corrispondenza che soddisfa un'espressione regolare all'interno di una stringa, o 0 se la sottostringa non viene trovata.
Sintassi:
Argomenti:
Esempi:
regexp_match('QGIS ROCKS','\\\\sROCKS') \u2192 5\nregexp_match('Buda\u010d','uda\u010d\\\\b') \u2192 2\n
Osservazioni:
link Wikipedia
[ ]
\u00abparentesi quadre\u00bb tutti i caratteri all\u2019interno delle [ ] sono accettati: le due parentesi si comportano come un singolo carattere[^ ]
\u00abparentesi quadre con apice\u00bb tutti i caratteri tranne quelli all\u2019interno delle [ ] sono accettatilink1
link2
regexp_match('QGIS ROCKS ciao come stai','$') = length ('QGIS ROCKS ciao come stai')+1\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#altri-esempi","title":"Altri esempi","text":"vedi qui
regexp_matches( \"catasto\" ,'^(.+)\\\\.(.+)\\\\.(.+)\\\\.(.+)_(.+)\\\\.(.+)$')[x]\n\ncon x che varia da 0 a 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#regexp_replace","title":"regexp_replace","text":"Restituisce una stringa con la parte che soddisfa l'espressione regolare sostituita.
Sintassi:
Argomenti:
\\\\1
, \\\\2
, etc.Esempi:
regexp_replace('QGIS SHOULD ROCK','\\\\sSHOULD\\\\s',' DOES ') \u2192 'QGIS DOES ROCK'\nregexp_replace('ABC123','\\\\d+','') \u2192 'ABC'\nregexp_replace('my name is John','(.*) is (.*)','\\\\2 is \\\\1') \u2192 'Il mio nome \u00e8 Giovanni'\n
Esempi:o 2
Tabella:
id particella 1 00AXJ 2 000BBG 3 0JJUAggiornare il campo particella
togliendo gli zeri iniziali:
espressione da usare:
regexp_replace( \"particella\" ,'^0+','')`\n
risultato:
id particella 1 AXJ 2 BBG 3 JJUecco un tool dove provare le regexp: https://regex101.com/r/SSDBmj/1
Esempi:o 3
id valore 1 data20200224 2 data20200225 3 data20200226eliminare data e inserire un simbolo tra anno, mese e giorno
espressione da usare:
regexp_replace(\"valore\" ,'(data)(....)(..)(..)','\\\\2-\\\\3-\\\\4')`\n
risultato:
id valore 1 2020-02-24 2 2020-02-25 3 2020-02-26Esempi:o 4
Tabella:
id particella 1 00AXJ.su 2 000BBG.cot 3 0JJU.1234Aggiornare il campo particella
togliendo tutto quello dopo il punto (.):
espressione da usare:
regexp_replace( 'xxxxx.yyy','\\\\.(.+)$','')`\n
risultato:
id particella 1 00AXJ 2 000BBG 3 0JJUqui altri esempi
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#regexp_substr","title":"regexp_substr","text":"Restituisce la porzione di una stringa che soddisfa l'espressione regolare passata.
Sintassi:
Argomenti:
\"\\\\s\"
per selezionare un carattere spazio).Esempi:
regexp_substr('abc123','(\\\\d+)') \u2192 '123'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#replace","title":"replace","text":"Restituisce una stringa con la stringa, array o mappa di stringhe passate sostituite.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-stringa-array","title":"Variabile stringa & array","text":"Restituisce una stringa con la stringa o array di stringa passate sostituite da una stringa o un array di stringhe.
Sintassi:
Argomenti:
Esempi:
replace('QGIS SHOULD ROCK','SHOULD','DOES') \u2192 'QGIS DOES ROCK'\nreplace('QGIS ABC',array('A','B','C'),array('X','Y','Z')) \u2192 'QGIS XYZ'\nreplace('QGIS',array('Q','S'),'') \u2192 'GI'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-mappa","title":"Variabile mappa","text":"Restituisce una stringa con le chiavi della mappa fornite sostituite dai valori abbinati. Sono valutate per prime le chiavi della mappa pi\u00f9 lunghe.
Sintassi:
Argomenti:
Esempi:
replace('APP SHOULD ROCK',map('APP','QGIS','SHOULD','DOES')) \u2192 'QGIS DOES ROCK'\nreplace('forty two',map('for','4','two','2','forty two','42')) \u2192 '42'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#right","title":"right","text":"Restituisce una sottostringa che contiene gli n caratteri pi\u00f9 a destra della stringa.
Sintassi:
Argomenti:
Esempi:
right('Hello World',5) \u2192 'World'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#rpad","title":"rpad","text":"Restituisce una stringa riempita a destra della larghezza specificata, utilizzando un carattere di riempimento. Se la larghezza della destinazione \u00e8 inferiore alla lunghezza della stringa, la stringa viene troncata.
Sintassi:
Argomenti:
Esempi:
rpad('Hello', 10, 'x') \u2192 'Helloxxxxx'\nrpad('Hello', 3, 'x') \u2192 'Hel'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#rtrim","title":"rtrim","text":"Rimuove la stringa pi\u00f9 lunga contenente solo i caratteri specificati (un carattere spazio come impostazione predefinita) dalla fine della stringa.
Sintassi:
Argomenti:
Esempi:
rtrim(' hello world ') \u2192 ' hello world'\nrtrim('testxxzx', 'xyz') \u2192 'test'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#strpos","title":"strpos","text":"Restituisce la prima posizione di corrispondenza di una sottostringa dentro in un'altra stringa o 0 se la sottostringa non viene trovata.
Sintassi:
Argomenti:
Esempi:
strpos('HELLO WORLD','WORLD') \u2192 7\nstrpos('HELLO WORLD','GOODBYE') \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#substr","title":"substr","text":"Restituisce una parte di una stringa.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
substr('HELLO WORLD',3,5) \u2192 'LLO W'\nsubstr('HELLO WORLD',3,5) \u2192 'WORLD'\nsubstr('HELLO WORLD',-5) \u2192 'WORLD'\nsubstr('HELLO',3,-1) \u2192 'LL'\nsubstr('HELLO WORLD',-5,2) \u2192 'WO'\nsubstr('HELLO WORLD',-5,-1) \u2192 'WORL'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#title","title":"title","text":"Converte tutte le parole in \"title case\" (tutte le parole in minuscolo con la prima lettera maiuscola)
Sintassi:
Argomenti:
Esempi:
title('hello WOrld') \u2192 'Hello World'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#to_string","title":"to_string","text":"Converte un numero in stringa.
Sintassi:
Argomenti:
Esempi:
to_string(123.23) \u2192 '123.23'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#trim","title":"trim","text":"Rimuove tutti gli spazi vuoti (spazi, tabulazioni, etc.) all'inizio e alla fine di una stringa.
Sintassi:
Argomenti:
Esempi:
trim(' hello world ') \u2192 'hello world'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#upper","title":"upper","text":"Converte una stringa in lettere maiuscole.
Sintassi:
Argomenti:
Esempi:
upper('hello WOrld') \u2192 'HELLO WORLD'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#wordwrap","title":"wordwrap","text":"Restituisce una stringa posta a capo ad un massimo/minimo numero di caratteri.
Sintassi:
Argomenti:
Esempi:
wordwrap('UNIVERSITY OF QGIS',13) \u2192 'UNIVERSITY OF \nQGIS'\nwordwrap('UNIVERSITY OF QGIS',-3) \u2192 'UNIVERSITY OF \nQGIS'\n
Per legende con testo lungo, tipico delle legende per carte geologiche:
wordwrap(@symbol_label ,50)\n
","tags":["gruppo"]},{"location":"gr_funzioni/variabili/_file_tipo/","title":"nome_variabile","text":"--
"},{"location":"gr_funzioni/variabili/_file_tipo/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/_file_tipo/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/_file_tipo/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/_file_tipo/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/algorithm_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/algorithm_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/algorithm_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/algorithm_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/algorithm_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/animation_end_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/animation_end_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/animation_end_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/animation_end_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/animation_end_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/animation_interval/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/animation_interval/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/animation_interval/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/animation_interval/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/animation_interval/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/animation_start_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/animation_start_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/animation_start_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/animation_start_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/animation_start_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_feature/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_feature/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_feature/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_feature/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_feature/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featureid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_featureid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featureid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_featureid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featureid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_filename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_filename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_filename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_filename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_filename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_geometry/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_geometry/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_geometry/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_geometry/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_geometry/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layerid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_layerid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layerid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_layerid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layerid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layername/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_layername/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layername/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_layername/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layername/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_pagename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_pagename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_pagename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_pagename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_pagename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/cluster_color/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/cluster_color/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/cluster_color/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/cluster_color/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/cluster_color/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/cluster_size/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/cluster_size/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/cluster_size/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/cluster_size/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/cluster_size/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_feature/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_feature/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_feature/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_feature/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_feature/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_geometry/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_geometry/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_geometry/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_geometry/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_geometry/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_feature/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_parent_feature/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_feature/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_parent_feature/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_feature/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/form_mode/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/form_mode/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/form_mode/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/form_mode/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/form_mode/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/frame_duration/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/frame_duration/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/frame_duration/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/frame_duration/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/frame_duration/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/frame_number/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/frame_number/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/frame_number/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/frame_number/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/frame_number/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/frame_rate/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/frame_rate/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/frame_rate/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/frame_rate/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/frame_rate/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_minx/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_minx/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_minx/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_minx/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_minx/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_miny/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_miny/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_miny/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_miny/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_miny/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_part_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_part_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_num/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_part_num/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_num/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_part_num/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_num/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_point_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_point_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_num/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_point_num/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_num/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_point_num/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_num/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/grid_axis/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/grid_axis/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/grid_axis/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/grid_axis/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/grid_axis/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/grid_number/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/grid_number/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/grid_number/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/grid_number/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/grid_number/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/item_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/item_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/item_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/item_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/item_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/item_uuid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/item_uuid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/item_uuid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/item_uuid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/item_uuid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_crs/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_crs/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_crs/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_crs/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_crs/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_ids/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_ids/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_ids/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_ids/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_ids/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layers/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layers/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layers/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layers/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layers/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_dpi/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_dpi/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_dpi/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_dpi/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_dpi/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_numpages/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_numpages/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_numpages/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_numpages/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_numpages/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_page/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_page/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_page/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_page/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_page/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageheight/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_pageheight/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageheight/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_pageheight/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageheight/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_column_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_column_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_column_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_column_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_column_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_split_layers/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_split_layers/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_split_layers/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_split_layers/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_split_layers/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_title/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_title/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_title/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_title/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_title/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_definition/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_definition/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_definition/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_definition/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_definition/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_description/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_description/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_description/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_description/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_description/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_projection/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_projection/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_projection/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_projection/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_projection/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_end_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_end_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_end_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_end_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_end_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_center/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent_center/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_center/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent_center/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_center/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_height/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent_height/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_height/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent_height/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_height/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_width/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent_width/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_width/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent_width/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_width/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_interval/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_interval/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_interval/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_interval/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_interval/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_layer_ids/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_layer_ids/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_layer_ids/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_layer_ids/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_layer_ids/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_layers/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_layers/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_layers/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_layers/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_layers/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_rotation/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_rotation/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_rotation/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_rotation/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_rotation/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_scale/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_scale/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_scale/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_scale/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_scale/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_start_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_start_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_start_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_start_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_start_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_folder/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_folder/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_folder/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_folder/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_folder/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_group/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_group/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_group/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_group/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_group/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_path/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_path/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_path/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_path/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_path/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/notification_message/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/notification_message/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/notification_message/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/notification_message/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/notification_message/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/parent/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/parent/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/parent/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/parent/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/parent/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_abstract/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_abstract/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_abstract/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_abstract/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_abstract/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_area_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_area_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_area_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_area_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_area_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_author/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_author/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_author/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_author/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_author/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_basename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_basename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_basename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_basename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_basename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_creation_date/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_creation_date/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_creation_date/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_creation_date/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_creation_date/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_definition/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_definition/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_definition/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_definition/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_definition/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_description/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_description/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_description/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_description/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_description/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_distance_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_distance_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_distance_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_distance_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_distance_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_filename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_filename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_filename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_filename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_filename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_folder/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_folder/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_folder/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_folder/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_folder/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_home/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_home/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_home/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_home/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_home/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_identifier/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_identifier/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_identifier/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_identifier/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_identifier/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_keywords/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_keywords/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_keywords/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_keywords/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_keywords/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_last_saved/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_last_saved/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_last_saved/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_last_saved/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_last_saved/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_path/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_path/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_path/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_path/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_path/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_title/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_title/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_title/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_title/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_title/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_locale/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_locale/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_locale/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_locale/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_locale/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_os_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_os_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_os_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_os_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_os_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_platform/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_platform/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_platform/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_platform/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_platform/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_release_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_release_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_release_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_release_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_release_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_short_version/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_short_version/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_short_version/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_short_version/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_short_version/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_version/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_version/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version_no/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_version_no/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version_no/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_version_no/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version_no/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/row_number/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/row_number/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/row_number/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/row_number/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/row_number/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/scale_value/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/scale_value/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/scale_value/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/scale_value/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/scale_value/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/snapping_results/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/snapping_results/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/snapping_results/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/snapping_results/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/snapping_results/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_angle/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_angle/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_angle/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_angle/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_angle/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_color/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_color/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_color/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_color/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_color/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_label/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_label/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_label/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_label/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_label/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/user_account_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/user_account_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/user_account_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/user_account_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/user_account_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/user_full_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/user_full_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/user_full_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/user_full_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/user_full_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/value/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/value/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/value/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/value/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/value/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/variabili/","title":"Variabili","text":"
Funzionalit\u00e0 introdotta da Nyall Dawson nella QGIS 2.12 Lyon
Questo gruppo contiene variabili dinamiche relative all'applicazione, al file di progetto e ad altre impostazioni. Significa che alcune funzioni potrebbero non essere disponibili in base al contesto:
In QGIS, puoi utilizzare le variabili per memorizzare dati utili con valori ricorrenti (ad esempio il titolo del progetto o il nome completo dell\u2019utente) che possono essere utilizzati nelle espressioni. Le variabili possono essere definite a livello globale dell\u2019applicazione, a livello di progetto, a livello di layer, a livello di composizione e a livello di elemento del compositore. Proprio come le regole CSS a cascata, le variabili possono essere sovrascritte, ad esempio una variabile a livello di progetto sovrascrive le variabili di livello globale di qualsiasi applicazione impostate con lo stesso nome.
Puoi utilizzare queste variabili per creare stringhe di testo o altre espressioni personalizzate utilizzando il carattere '@' prima del nome della variabile.
Video di Nyall Dawson sulle espressioni, varibile e sovrascrittura definita dai dati
"},{"location":"gr_funzioni/variabili/variabili/#elenco-variabili","title":"Elenco variabili","text":"Riguardano (aggiornato a QGIS 3.20 Odense):
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/variabili/variabili/#screenshot-livelli","title":"Screenshot livelli","text":"Gruppo sul calcolatore di campi,Seleziona per espressione
Generatore di geometria- stile
Selezione per espressione
Calcolatore di campi,Seleziona per espressione
Compositore di stampe
--
"},{"location":"gr_funzioni/variabili/with_variable/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/with_variable/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/with_variable/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/with_variable/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/zoom_level/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/zoom_level/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/zoom_level/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/zoom_level/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/zoom_level/#osservazioni","title":"osservazioni","text":"--
"},{"location":"img/","title":"Index","text":""},{"location":"img/#cartella-immagini","title":"Cartella
Immagini
","text":"Questo cartella contiene gli screenshot, suddivisi per argomento, utilizzati nei vari gruppi di funzioni e/o espressioni.
"},{"location":"release/intro_novita/","title":"Novit\u00e0","text":"Abstract
In questa sezione verranno documentate le principali novit\u00e0 implementate nel calcolatore di campi e tabella degli attributi, come per esempio nuove funzioni o nuove funzionalit\u00e0 legate alle tabelle.
"},{"location":"release/intro_novita/#release","title":"Release","text":"Release Data changelog nuove funzioni numero QGIS 3.32 Lima 23/06/2023 ltrim, rtrim +2 QGIS 3.30 's-Hertogenbosch 03/03/2023 load_layer, is_feature_valid(), is_attribute_valid(), x_at, y_at, z_at, m_at +4 QGIS 3.28 Firenze 21/10/2022 make_valid, geometries_to_array, concave_hull, shared_paths, @feature, @id e @geometry +7 QGIS 3.26 Buones Aires 18/06/2022 BETWEEN, NOT BETWEEN +2 QGIS 3.24 Tisler 18/02/2022 scale, triangular_wave, square_wave, wave, triangular_wave_randomized, square_wave_randomized, wave_randomized, overlay_nearest+, apply_dash_pattern, force_polygon_cw, force_polygon_ccw, densify_by_count, densify_by_distance, roundness, overlay_intersects+, geometry_n+, geometry_type, get_feature+, represent_attributes, map_prefix_keys, url_encode, rotate +17 QGIS 3.22 Bia\u0142owie\u017ca 22/10/2021 exif, exif_geotag, sinuosity, $z, affine_transform, straight_distance_2d, vertex_as_point, vertex_z +8 QGIS 3.20 Odense 21/06/2021 length3D, array_count, array_priorize, array_replace, mime_type +5 QGIS 3.18 Z\u00fcrich 22/02/2021 UUID, array_get, array_min, arra_max, array_majority, array_sum, array_mean, array_median, map_credits, @layer_crs +10 QGIS 3.16 Hannover 23/10/2020 main_angle, to_decimal, overlay_* +10 QGIS 3.14 Pi 19/06/2020 ascii, is_multipart, min_z, max_z, min_m, max_m, close_line, make_date, make_time, make_datetime, make_interval +11 QGIS 3.12 Bucure\u0219ti 21/02/2020 rand, randf, is_valid, is_empty, is_empty_or_null, rotate, datetime_from_epoch, format_date, hash, md5, sha256, geom_to_wkb, geom_from_wkb +13 QGIS 3.10 A Coru\u00f1a 25/10/2019 attributes, to_date, to_datetime, to_time, collect_geometries, make_line +6 QGIS 3.8 Zanzibar 21/06/2019 concatenate_unique, array_all, ecc... QGIS 3.6 Noosa 22/02/2019 force_rhr, make_rectangle_3points, make_square, decode_uri, nullif, try, from_jsom, to_json, sqlite_fecth_and_increment ecc... QGIS 3.4 Madeira 26/10/2018 raster_value(), line_substring, array_foreach, generate_series, array_filter, to_dm, to_dms, hstore_to_map, json_to_map, map_to_hstore, map_to_json, ecc... QGIS 3.2 Bonn 22/06/2018 nuove variabili, ecc... QGIS 3.0 Girona 23/02/2018 vedi changelog"},{"location":"release/intro_novita/#grafico","title":"Grafico","text":""},{"location":"release/novita_30/","title":"Novit\u00e0 rilevanti introdotte nella 3.0 Girona","text":"https://www.qgis.org/it/site/forusers/visualchangelog30/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_30/#changelog","title":"Changelog","text":"Expressions
","tags":["novit\u00e0"]},{"location":"release/novita_310/","title":"Novit\u00e0 rilevanti introdotte nella 3.10 A Coru\u00f1a","text":"https://www.qgis.org/it/site/forusers/visualchangelog310/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_310/#nuove-funzioni","title":"Nuove funzioni","text":"","tags":["novit\u00e0"]},{"location":"release/novita_310/#gruppo-record-e-attributi","title":"Gruppo Record e Attributi","text":"https://github.com/qgis/QGIS/pull/30440
","tags":["novit\u00e0"]},{"location":"release/novita_310/#aggiorna-campi","title":"Aggiorna campi","text":"[https://github.com/qgis/QGIS/pull/31065
","tags":["novit\u00e0"]},{"location":"release/novita_310/#gruppo-data","title":"Gruppo Data","text":"https://github.com/qgis/QGIS/pull/31231
","tags":["novit\u00e0"]},{"location":"release/novita_310/#memorizza-filtro-tabella-attributi","title":"Memorizza Filtro tabella attributi","text":"https://github.com/qgis/QGIS/pull/31349
","tags":["novit\u00e0"]},{"location":"release/novita_310/#gruppo-geometria","title":"Gruppo Geometria","text":"make_line
, ora accetta anche arraycollect_geometries
https://github.com/qgis/QGIS/pull/31480
","tags":["novit\u00e0"]},{"location":"release/novita_312/","title":"Novit\u00e0 rilevanti introdotte nella 3.12 Bucaresti","text":"https://www.qgis.org/it/site/forusers/visualchangelog312/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_312/#nuove-funzioni","title":"Nuove funzioni","text":"https://github.com/qgis/QGIS/pull/32630 (chiuso)
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-matematica","title":"Gruppo Matematica","text":"rand
randf
qui PR: https://github.com/qgis/QGIS/pull/33204
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-geometria","title":"Gruppo Geometria","text":"is_valid
qui PR: https://github.com/qgis/QGIS/pull/32900
geom_from_wkb
geom_to_wkb
qui PR: https://github.com/qgis/QGIS/pull/32561
is_empty
is_empty_or_null
qui PR: https://github.com/qgis/QGIS/pull/33333
rotate
qui PR: https://github.com/qgis/QGIS/pull/33125
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-data-e-ora","title":"Gruppo Data e ora","text":"datetime_from_epoch
qui PR: https://github.com/qgis/QGIS/pull/32551
format_date
qui PR: https://github.com/qgis/QGIS/pull/32908
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-conversioni","title":"Gruppo Conversioni","text":"hash
(value, method) md5
(value)sha256
(value)qui PR: https://github.com/qgis/QGIS/pull/31726
","tags":["novit\u00e0"]},{"location":"release/novita_312/#tag-espressioni","title":"tag espressioni","text":"PR: https://github.com/qgis/QGIS/pull/33197
","tags":["novit\u00e0"]},{"location":"release/novita_312/#tabella-attributi","title":"Tabella attributi","text":"PR: https://github.com/qgis/QGIS/pull/33322 -- chiusa
","tags":["novit\u00e0"]},{"location":"release/novita_312/#interfaccia","title":"Interfaccia","text":"List referenced layer values
qui PR: https://github.com/qgis/QGIS/pull/33436
Stored expressions
https://github.com/qgis/QGIS/pull/33437 -- IDEA MIA!!!Organize Columns
https://github.com/qgis/QGIS/pull/33918 -- ANCORA APERTA!!!https://www.qgis.org/it/site/forusers/visualchangelog314/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_314/#nuove-funzioni","title":"Nuove funzioni","text":"https://github.com/qgis/QGIS/pull/36988
","tags":["novit\u00e0"]},{"location":"release/novita_316/","title":"Novit\u00e0 rilevanti introdotte nella 3.16 Hannover","text":"https://www.qgis.org/it/site/forusers/visualchangelog316/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_316/#miglioramenti-help-in-linea","title":"Miglioramenti help in linea","text":"help in linea: https://github.com/qgis/QGIS/pull/37532
help in linea : https://github.com/qgis/QGIS/pull/37771
","tags":["novit\u00e0"]},{"location":"release/novita_316/#nuove-funzioni","title":"Nuove funzioni","text":"main_angle
: https://github.com/qgis/QGIS/pull/37798to_decimal()
: https://github.com/qgis/QGIS/pull/38025overlay_intersects(layer[,expression][,filter][,limit][,cache])\noverlay_contains(layer[,expression][,filter][,limit][,cache])\noverlay_crosses(layer[,expression][,filter][,limit][,cache])\noverlay_equals(layer[,expression][,filter][,limit][,cache])\noverlay_touches(layer[,expression][,filter][,limit][,cache])\noverlay_disjoint(layer[,expression][,filter][,limit][,cache])\noverlay_within(layer[,expression][,filter][,limit][,cache])\noverlay_nearest(layer[,expression][,filter][,limit][,max_distance][,cache])\n
https://www.qgis.org/it/site/forusers/visualchangelog318/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_318/#espressioni","title":"Espressioni","text":"UUID
https://github.com/qgis/QGIS/pull/39414Array_get
(supporta indici negativi) https://github.com/qgis/QGIS/pull/39921array_min/max
, array_majority
, array_sum/mean/median
https://github.com/qgis/QGIS/pull/40364map_credits
https://github.com/qgis/QGIS/pull/40919@layer_crs
recente
singola linea https://github.com/qgis/QGIS/pull/41545https://www.qgis.org/it/site/forusers/visualchangelog32/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_32/#generatore-di-espressioni-piu-utile","title":"Generatore di espressioni pi\u00f9 utile.","text":"Il generatore di espressioni ora semplifica la creazione di espressioni in QGIS!
Ctrl + clic
su un nome di funzione nell'espressione corrente aprir\u00e0 automaticamente l'aiuto per quella funzioneconsente l'implementazione di filtri complessi e dinamici all'interno di moduli di attributo QGIS. La funzionalit\u00e0 pu\u00f2 essere utilizzata per implementare moduli \"drill-down\" all'interno di QGIS, in cui i valori disponibili in un campo dipendono dai valori di altri campi:
Questa funzionalit\u00e0 consente agli utenti di creare espressioni \"value-relation\" basate sul valore corrente di un altro campo nella stessa form. Quando l'utente modifica il valore di un campo, le scelte disponibili in tutti i campi correlati vengono filtrate in modo che corrispondano al nuovo valore, consentendo una strategia di filtraggio gerarchica (drill down o cascading) all'interno di un modulo o nella tabella degli attributi.
qui un video di Alessandro Pasotti
Le espressioni implementate per realizzare quanto descritto sopra sono tre, una funzione e due variabili:
intersects( buffer(@current_geometry ,1000),$geometry)
NB: nella cartella esempi trovate un geopackage con i dati e un progetto esempio
video:
","tags":["novit\u00e0"]},{"location":"release/novita_320/","title":"Novit\u00e0 rilevanti introdotte nella 3.20 Odense","text":"https://www.qgis.org/it/site/forusers/visualchangelog320/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_320/#espressioni","title":"espressioni","text":"length3D
: https://github.com/qgis/QGIS/pull/41127array_count
: https://github.com/qgis/QGIS/pull/41338array_priorize
: https://github.com/qgis/QGIS/pull/41338array_replace
: https://github.com/qgis/QGIS/pull/41338mime_type
: https://github.com/qgis/QGIS/pull/41191alias
: https://github.com/qgis/QGIS/pull/42179https://github.com/qgis/QGIS/pull/41276
https://github.com/qgis/QGIS/pull/42026
","tags":["novit\u00e0"]},{"location":"release/novita_320/#guiui","title":"GUI/UI","text":"https://changelog.qgis.org/en/qgis/version/3.22/
"},{"location":"release/novita_322/#espressioni","title":"Espressioni","text":"exif() e exif_geotag()
: https://github.com/qgis/QGIS/pull/44081sotto elenco completo dei tag disponibili:
Exif.GPSInfo.GPSAltitude\nExif.GPSInfo.GPSAltitudeRef\nExif.GPSInfo.GPSDateStamp\nExif.GPSInfo.GPSLatitude\nExif.GPSInfo.GPSLatitudeRef\nExif.GPSInfo.GPSLongitude\nExif.GPSInfo.GPSLongitudeRef\nExif.GPSInfo.GPSProcessingMethod\nExif.GPSInfo.GPSTimeStamp\nExif.GPSInfo.GPSVersionID\nExif.Image.0xea1c\nExif.Image.Artist\nExif.Image.DateTime\nExif.Image.ExifTag\nExif.Image.GPSTag\nExif.Image.ImageLength\nExif.Image.ImageWidth\nExif.Image.Make\nExif.Image.Model\nExif.Image.ResolutionUnit\nExif.Image.Software\nExif.Image.XPKeywords\nExif.Image.XResolution\nExif.Image.YCbCrPositioning\nExif.Image.YResolution\nExif.Iop.InteroperabilityVersion\nExif.Iop.RelatedImageLength\nExif.Iop.RelatedImageWidth\nExif.Photo.0xea1c\nExif.Photo.ColorSpace\nExif.Photo.ComponentsConfiguration\nExif.Photo.Contrast\nExif.Photo.DateTimeDigitized\nExif.Photo.DateTimeOriginal\nExif.Photo.DigitalZoomRatio\nExif.Photo.ExifVersion\nExif.Photo.ExposureBiasValue\nExif.Photo.ExposureMode\nExif.Photo.ExposureProgram\nExif.Photo.ExposureTime\nExif.Photo.FNumber\nExif.Photo.Flash\nExif.Photo.FlashpixVersion\nExif.Photo.FocalLength\nExif.Photo.GainControl\nExif.Photo.ISOSpeedRatings\nExif.Photo.ImageUniqueID\nExif.Photo.InteroperabilityTag\nExif.Photo.LightSource\nExif.Photo.MaxApertureValue\nExif.Photo.MeteringMode\nExif.Photo.PixelXDimension\nExif.Photo.PixelYDimension\nExif.Photo.Saturation\nExif.Photo.SceneCaptureType\nExif.Photo.Sharpness\nExif.Photo.UserComment\nExif.Photo.WhiteBalance\nExif.Thumbnail.Compression\nExif.Thumbnail.JPEGInterchangeFormat\nExif.Thumbnail.JPEGInterchangeFormatLength\nExif.Thumbnail.ResolutionUnit\nExif.Thumbnail.XResolution\nExif.Thumbnail.YResolution\n
- exif_geotag()
sinuosity
: https://github.com/qgis/QGIS/pull/44401straight_distance_2d
: https://github.com/qgis/QGIS/pull/44767$z
: https://github.com/qgis/QGIS/pull/44776affine_transform
: https://github.com/qgis/QGIS/pull/44771https://github.com/qgis/QGIS/pull/45484
"},{"location":"release/novita_322/#tabella-attributi","title":"Tabella attributi","text":"saranno aggiunte in futuro maggiori info
selezione tramite espressione
: https://github.com/qgis/QGIS/pull/44835$vertex_as_point and $vertex_z functions
: https://github.com/qgis/QGIS/pull/44786In Memorium: Questa versione prende il nome \"Tisler\" da una piccola isola norvegese che era uno dei luoghi di visita preferiti di H\u00e5vard Tveite, scomparso nel maggio 2021. H\u00e5vard era un membro molto attivo della comunit\u00e0 QGIS, fornendo un prezioso contributo alla documentazione, sviluppando numerosi plugin e occupandosi del QGIS Resources Sharing Repository per citare solo alcuni dei suoi contributi. La mappa nella schermata iniziale di QGIS 3.24 \u00e8 una mappa di orientamento creata da H\u00e5vard. Gli piaceva passare un po' di tempo ogni anno a creare mappe a Tisler.
https://changelog.qgis.org/en/qgis/version/3.24/
"},{"location":"release/novita_324/#espressioni","title":"Espressioni","text":""},{"location":"release/novita_324/#gruppo-geometria","title":"Gruppo Geometria","text":"funzione link PR descrizione scale https://github.com/qgis/QGIS/pull/45505 nuova funzione triangular/square/curved https://github.com/qgis/QGIS/pull/45583 nuove funzione (6) overlay_nearest https://github.com/qgis/QGIS/pull/45744 miglioramenti apply_dash_pattern https://github.com/qgis/QGIS/pull/45734 nuova funzione force_polygon_cw/ccw https://github.com/qgis/QGIS/pull/45718 nuove funzione (2) densify_by_count/distance https://github.com/qgis/QGIS/pull/45894 nuove funzione (2) roundness https://github.com/qgis/QGIS/pull/45154 nuova funzione overlay_intersects https://github.com/qgis/QGIS/pull/46185 miglioramenti overlay_intersects https://github.com/qgis/QGIS/pull/46683 miglioramenti geometry_n https://github.com/qgis/QGIS/pull/46684 modifica definizione geometry_type https://github.com/qgis/QGIS/pull/46716 nuova funzione rotate https://github.com/qgis/QGIS/pull/45748 miglioramento"},{"location":"release/novita_324/#gruppo-record-e-attributi","title":"Gruppo Record e Attributi","text":"funzione link PR descrizione get_feature https://github.com/qgis/QGIS/pull/43352 miglioramenti represent_attributes https://github.com/qgis/QGIS/pull/46502 nuova funzione"},{"location":"release/novita_324/#gruppo-array","title":"Gruppo Array","text":"funzione link PR descrizione array_remove_at https://github.com/qgis/QGIS/pull/46942 miglioramento"},{"location":"release/novita_324/#gruppo-maps","title":"Gruppo Maps","text":"funzione link PR descrizione map_prefix_keys https://github.com/qgis/QGIS/pull/46087 nuova funzione url_encode https://github.com/qgis/QGIS/pull/46384 nuova funzione"},{"location":"release/novita_324/#pr-chiusa","title":"PR chiusa","text":"annotazioni
: https://github.com/qgis/QGIS/pull/45114 chiusa!!!
esponi i nomi dei campi da layer richiamati
: https://github.com/qgis/QGIS/pull/46505
ricerca migliorata
: https://github.com/qgis/QGIS/pull/46672
qui i tag per la ricerca.
"},{"location":"release/novita_324/#guiux","title":"GUI/UX","text":"apri tabella attributi
: https://github.com/qgis/QGIS/pull/46328| Nuovo bottone!
Gli utenti possono utilizzare espressioni come array(1,2,3)
o map('key1','value','key2','value')
espressioni nel calcolatore di campo e nella barra dei campi della tabella degli attributi per aggiornare i valori. https://github.com/qgis/QGIS/pull/47046
https://github.com/qgis/QGIS/pull/47049
"},{"location":"release/novita_326/","title":"Novit\u00e0 rilevanti introdotte in QGIS 3.26","text":"\"La versione ricca di funzionalit\u00e0 di QGIS 3.26 Buenos Aires include un vasto numero di miglioramenti a una gamma di funzionalit\u00e0 di base avanzate. Ci\u00f2 include numerosi miglioramenti alle funzionalit\u00e0 3D, strumenti migliorati per le nuvole di punti e l'introduzione di un nuovo framework di tracciatura dei profili per la creazione di sezioni trasversali e profili di elevazione. Soprattutto, il nuovo framework di plottaggio utilizza le funzionalit\u00e0 di rendering QGIS native e viene fornito con tutte le propriet\u00e0 di stile, simbologia e guida dei dati che tutti conosciamo e amiamo subito!\"
https://changelog.qgis.org/en/qgis/version/3.26/
"},{"location":"release/novita_326/#espressioni","title":"Espressioni","text":""},{"location":"release/novita_326/#gruppi","title":"Gruppi","text":"funzione link PR descrizione BETWEEN e NOT BETWEEN https://github.com/qgis/QGIS/pull/47771 Nuovi Operatori @symbol_frame https://github.com/qgis/QGIS/pull/48152 Nuova variabile @parent https://github.com/qgis/QGIS/pull/48488 Miglioramento"},{"location":"release/novita_326/#gui-field-calc","title":"GUI Field Calc","text":"copia valore espressione anteprima fielc calc
: https://github.com/qgis/QGIS/pull/47680omogenizzate i valori booleani
: https://github.com/qgis/QGIS/pull/47866aggiorna descrizione operatore AND
: https://github.com/qgis/QGIS/pull/48118scorrimento tabella attributi in orizzontale
: https://github.com/qgis/QGIS/pull/47764Nomi dei campi definiti dall'utente nell'esportazione: https://github.com/qgis/QGIS/pull/47630
"},{"location":"release/novita_328/","title":"Novit\u00e0 rilevanti introdotte in QGIS 3.28 Firenze","text":"QGIS 3.28 Firenze introduces various feature updates, UX modifications, usability enhancements, and improved integration with various proprietary services and data backends. It is also set to introduce the long-awaited features provided by previous releases into the long-term support release, as outlined in the QGIS Roadmap.
The splash screen features a rare and extraordinary 1847 map of Firenze, or Florence, Italy by Giuseppe Molini. This magnificently engraved map was originally drawn in 1731 by the Florentine architect Ferdinando Ruggieri. Oriented to the south, the map covers the old walled center of Florence as it extends on both sides of the Arno River. The upper right quadrant features the lily symbol of Florence. Though printed in 1847, this map has been prepared in the 17th-century style by copperplate engraving on thick-laid paper. Firenze in 1847 was on the cusp of political transformation. One year following the production of this rare map the Grand Duke of Tuscany, responding to political demonstrations throughout Florence, granted Tuscany its first constitution.
https://changelog.qgis.org/en/qgis/version/3.28/
genesi dello splashscreen:
https://github.com/pigreco/splashscreen_QGIS328_Firenze
"},{"location":"release/novita_328/#espressioni","title":"Espressioni","text":"nuove espressioni:
funzione link PR descrizione Adds the $m, $z_at and $m_at expressions https://github.com/qgis/QGIS/pull/49765 CHIUSA!!! make_valid e geometries_to_array https://github.com/qgis/QGIS/pull/49993 nuove funzioni concave_hull https://github.com/qgis/QGIS/pull/48865 nuova funzione to_int https://github.com/qgis/QGIS/pull/49990 PR ancora aperta shared_paths https://github.com/qgis/QGIS/pull/50080 nuova funzione @feature, @id e @geometry https://github.com/qgis/QGIS/pull/50134 nuove variabiliAnche nel gruppo Campi e Valore:
"},{"location":"release/novita_328/#gui-field-calc","title":"GUI Field Calc","text":"Per evitare di perdere le modifiche alle espressioni nel Field Calc
The 3.30 's-Hertogenbosch release of the groundbreaking QGIS project introduces a wide range of changes and optimizations from the QGIS developer community.
The splash screen features a fragment of the \u201cGemeentekaart\u201d, or Municipality map, of 's-Hertogenbosch from 1867. It is part of a series of 1200 maps of all the communities in The Netherlands from that time, which were published in an atlas for each of the 11 regions. All maps were drawn in the same size, although for large municipalities a double format was used and scaled to match the page. The series was internationally rewarded because of its accuracy and completeness. The map was drawn by Jacob Kuyper (1821-1908), the most famous geographer and cartographer of his time in The Netherlands. Text and splash map image provided by atlasandmap.com
Importantly, support for backward compatibility of Symbol Styling has been removed for QGIS 3.16, providing significant optimizations to the project file structure, but limiting the capability of older releases of QGIS for rendering symbologies developed with later releases.
The native GeoNode integration has also been migrated to an external plugin, leveraging the powerful extensions to the QGIS API for plugins implemented in recent releases.
Users can also look forward to new functionality and UX enhancements, including support for raster attribute tables, intelligent and configurable sorting for layer loading, improvements to GPS utilities, more dynamic form widgets, native rich media previews for attachments, better integration with cloud services, extensions to the QGIS metadata standards, and a host of other noteworthy additions.
https://changelog.qgis.org/en/qgis/version/3.30/
"},{"location":"release/novita_330/#espressioni","title":"Espressioni","text":"nuove espressioni:
funzione link PR descrizione load_layer (solo in Processing) https://github.com/qgis/QGIS/pull/51293 nuova funzione is_feature_valid() e is_attribute_valid() https://github.com/qgis/QGIS/pull/51303 nuove funzioni feature_id https://github.com/qgis/QGIS/pull/51441 nuova funzione [ltrim], [rtrim] https://github.com/qgis/QGIS/pull/51786 nuove funzioni - ancora congelate!!! x_at, y_at, z_at e m_at https://github.com/qgis/QGIS/pull/50853 nuove funzioni ($x_at() e $y_at() sono state deprecate)"},{"location":"release/novita_330/#tabella-degli-attributi","title":"Tabella degli attributi","text":"QGIS 3.32 is a major release of the QGIS Project that brings a significant advancement in geospatial technology to the Open Source World. The developer community has introduced several new features and improvements to leverage the potential of geospatial data.
Amongst numerous quality of life improvements across a broad spectrum of existing features, the 3.32 release features the long awaited functionality for Native Point Cloud Processing in QGIS, allowing QGIS Desktop to become a powerful processing utility for LiDAR data.
This milestone achievement is thanks in large part to the contributions of the community to the effective crowd funding campaign which funded this development, the QGIS community and Enhancement Proposals used for the effective governance of these contributions, the collaborative efforts of the development agencies involved, and of course the extraordinary contributions of individual developers who build these tools for the benefit of all.
This release also includes a wide variety of developer experience enhancements, extensions to new functionalities like the profile plots and processing frameworks, and a new framework for sensor data to tightly integrate QGIS with data collection apparatus and facilitate the creation of next-generation intelligent solutions.
QGIS is a community effort, and we would like to extend a big thank you to the developers, documenters, testers, and the many folks out there who volunteer their time and effort (or fund people to do so) to make these releases possible. From the QGIS community, we hope you enjoy this release! If you wish to donate time, money, or otherwise contribute towards making QGIS more awesome, please wander along to QGIS.ORG and lend a hand!
QGIS is supported by donors and sustaining members. A current list of donors who have made financial contributions large or small to the project can be seen on our list of donors. If you would like to become an official project sustaining member, please visit our sustaining member page for more details. Sponsoring QGIS helps us to fund our regular developer meetings, maintain project infrastructure, and fund bug-fixing efforts. A complete list of current sponsors is provided below - our very great thank you to all of our sponsors!
QGIS is free software and you are under no obligation to pay anything to use it - in fact, we want to encourage people far and wide to use it regardless of their financial or social status - we believe that empowering people with spatial decision-making tools will result in a better society for all of humanity.
https://changelog.qgis.org/en/qgis/version/3.32/
"},{"location":"release/novita_332/#novita-versione","title":"Novit\u00e0 versione","text":"https://www.qgis.org/it/site/forusers/visualchangelog34/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_34/#nuovoi-gruppoi-funzionei-nel-calcolatore-di-campi","title":"Nuovo/i gruppo/i funzione/i nel calcolatore di campi","text":"","tags":["novit\u00e0"]},{"location":"release/novita_34/#nuove-funzioni","title":"Nuove funzioni","text":"prima \u2192 ora
array: 1, 2, 3 \u2192 [ 1, 2, 3 ]
prima \u2192 ora
map: one: 1, two: 2, 3: three \u2192 {'one': 1, 'two': 2, 3: 'three'}
https://www.qgis.org/it/site/forusers/visualchangelog36/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_36/#nuove-funzioni","title":"Nuove funzioni","text":"","tags":["novit\u00e0"]},{"location":"release/novita_36/#gruppo-geometria","title":"Gruppo Geometria","text":"https://www.qgis.org/it/site/forusers/visualchangelog38/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_38/#nuove-funzioni","title":"Nuove funzioni","text":"","tags":["novit\u00e0"]},{"location":"release/novita_38/#gruppo-aggregates","title":"Gruppo Aggregates","text":"Intro
In questa sezioni sono raccolti i concetti fondamentali sulla tabella degli attributi. La conoscenza di questi concetti permette di velocizzare il lavoro e capire il comportamento della tabella.
QGIS-DOC
La tabella degli attributi (F6) \u00e8 una tabella che contiene i dati alfanumerici (attributi) dello strato vettoriale e rappresenta una delle differenze fondamentali tra un vettore CAD e uno GIS.
Negli shapefile la tabella degli attributi rappresenta il file .dbf
che \u00e8 uno dei tre file fondamentali che caratterizzano lo shapefile (.shp, .shx, .dbf) la mancanza di uno di questi rende inutilizzabile lo strato.
Una tabella \u00e8 caratterizzata da righe (rosso) e colonne (verde), le righe rappresentano i record (nello specifico una feature), le colonne (o campi) rappresentano gli attributi:
Osservazione: la geometria \u00e8 anch'essa un attributo (speciale) ma non viene visualizzato nella tabella degli attributi per scelta degli sviluppatori. Per richimare tale attributo basta utilizzare $geometry
.
La tabella attributi di QGIS \u00e8 caratterizzata da vari elementi:
barra degli strumenti;
nella Vista Modulo \u00e8 presente un ulterione menu:
Questa barra \u00e8 visibile solo se \u00e8 attiva la modalit\u00e0 modifica e consente di applicare rapidamente calcoli a tutte o parte delle feature del livello. Questa barra utilizza le stesse espressioni del calcolatore di campi
Esempio di uso della barra (vedi screenshot sotto):
nel nostro caso (vedi screenshot sotto), se cliccassi su 4 (aggiorna tutto) aggiornerei tutti i valori del campo \"COD_REG\" con il valore 19; se cliccassi su 5 (Aggiorna selezione) aggiornerei solo le quattro righe selezionate.
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#corpo-della-tabella","title":"Corpo della tabella","text":"\u00c8 possibile interagire con il corpo della tabella usando il tasto destro del mouse: sulla intestazione dei campi oppure sulle celle:
nel caso dell'intestazione colonna compare un tendina con la possibilit\u00e0 di: 1. nascondere la colonna; 2. definire la larghezza della colonna; 3. Imposta Tutte le larghezze di Colonna (>= QGIS 3.18) 4. autodimensiona la larghezza colonna; 5. Autodimensione Tutte le Colonne (>= QGIS 3.18) 6. Organizza le colonne; 7. Ordina.
nel caso delle celle (vedi screen sotto) compare un tendina con la possibilit\u00e0 di: 1. selezionare tutte le righe (Ctrl+A); 2. Copiare il contenuto della cella; 3. Zoom alla Geometria; 4. Sposta alla Geometria; 5. Lampeggia Geometria; 6. Apri modalit\u00e0 Modulo
PS: Find/Replace \u00e8 un plugin!
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#rinominare-i-campi","title":"Rinominare i campi","text":"A partire da QGIS 2.16 \u00e8 possibile rinominare i campi della tabella degli attributi (shp, gpkg) con un semplice doppio click sul nome, dopo aver messo in modifica il layer:
riferimento : https://gis.stackexchange.com/a/206956/73605
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#dockify-tabella","title":"Dockify tabella","text":"nuovo pulsante (Novit\u00e0 introdotta nella QGIS 3.4) nella barra degli strumenti della tabella degli attributi per passare dalla modalit\u00e0 docked alla modalit\u00e0 finestra
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#memorizza-filtro-tabella-attributi","title":"Memorizza Filtro tabella attributi","text":"Salva Filtro
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#opzioni-extra-apertura-tabella","title":"Opzioni Extra Apertura Tabella","text":"PR >= QGIS 3.20
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#mostra-nella-tabella","title":"Mostra nella Tabella","text":"Mostra nella Tabella >= QGIS 3.24
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tag_espressioni/funzioni-tags/","title":"Funzioni tags","text":"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":"tag_espressioni/tags_esplose/","title":"Tags esplose","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"},{"location":"webmaster/gbvitrano/","title":"Webmaster","text":"Questo sito \u00e8 stato realizzato da:
"},{"location":"webmaster/gbvitrano/#giovan-battista-vitrano","title":"Giovan Battista Vitrano","text":"Giovan Battista Vitrano \u00e8 famoso con il nikname gbvitrano
.
Dipendente del Comune di Palermo impegnato nell'Area tecnica della riqualificazione urbana e delle infrastrutture, specializzato in cose&robe e free&mancia. Civic hacker nel tempo libero e attivista di cose&robe... Per prima cosa, bisogna fare le robe, una prima fase \u00e8 mettere a fuoco le cose da fare, poi c\u2019\u00e8 una seconda fase in cui si da un nome alle singole robe da fare, perch\u00e9 fare delle robe senza sapere di cosa stai parlando \u00e8 stato sempre un problema! La terza fase \u00e8 pi\u00f9 complessa! Una volta che hai le robe giuste, \u00e8 tutta un\u2019altra cosa! Con queste robe, cose da fare c\u2019\u00e8 ne sono tante, dalle cose pi\u00f9 semplici alle cose pi\u00f9 complesse, senza dimenticarsi quelle robe li! Un esempio concreto \u00e8\u2026che con i dataset ci sono un sacco di cose che si fanno, perch\u00e9 fare le cose \u00e8 una roba concreta, \u00e8 un modello che funziona! Quando c\u2019\u00e8 voglia di fare le cose e le robe, \u00e8 solo questione di prime e seconde fasi\u2026 Se siamo in tanti a fare cose sul territorio sono sicuro che ci viene bene\u2026 c\u2019\u00e8 chi fa pi\u00f9 robe, c\u2019\u00e8 chi fa pi\u00f9 cose, ma se queste cose e queste robe li mettiamo al servizio del Paese, avremo tanti territori pieni di cose e di robe che funzionano e la gente ne ha bisogno, ma attenzione a con confondere le cose con le robe, altrimenti si impazzisce! Crozza\u2026docet
"},{"location":"webmaster/gbvitrano/#contatti","title":"Contatti","text":"\u00a0\u00a0 Twitter \u00a0\u00a0 Facebook \u00a0\u00a0 coseerobe.gbvitrano.it
"},{"location":"blog/archive/2023/","title":"2023","text":""},{"location":"blog/category/espressioni/","title":"espressioni","text":""},{"location":"blog/category/help/","title":"help","text":""},{"location":"blog/category/variabili/","title":"variabili","text":""},{"location":"blog/category/custom/","title":"custom","text":""},{"location":"blog/category/array/","title":"array","text":""},{"location":"blog/category/progetto/","title":"progetto","text":""},{"location":"blog/category/misure/","title":"misure","text":""},{"location":"blog/category/news/","title":"News","text":""},{"location":"tags/","title":"\ud83c\udff7\ufe0f Tags","text":"Abstract
Elenco di tag utilizzati per la ricerca
"},{"location":"tags/#adiacenza","title":"adiacenza","text":"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.
FunzioniQuesta 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 formazioneIl 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...
SupporterPer 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 guidaQuesta 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:
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 aggiuntafunzioni 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 30/10/2023 Aggiornata la funzione array_foreach
, introdotta la variabile @counter
","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:
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 Hannover40.\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:
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.06188803019758domanda 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.06188850.A cosa serve l'operatore '\\n'
?
Per chi volesse sapere l'esito degli esercizi svolti, inviare le risposte alla mail: pigrecoinfinito@gmail.com
con OGGETTO: Test #HfcQGIS
Sono 50 quesiti di difficolt\u00e0 variabile (media-alta
), sotto i consigli di Pigreco
Contatto : \u2709 pigrecoinfinito@gmail.com
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 BorrusoCoordinatore
Salvatore FiandacaAutore e curatore di HfcQGIS
Giovan Battista VitranoWebmaster
"},{"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
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:
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
>=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
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":"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":"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":"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":"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.
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":"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:
array_first(array('a','b','c')) = array('a','b','c')[0]
array_last(array('a','b','c')) = array('a','b','c')[-1]
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])
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 Millerqui 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
:
specie
\u00e8 stata usata la seguente espressione nelle propriet\u00e0 del layer, in particolare nel widget Predefiniti
:attribute(get_feature('matrice', 'specie', \"specie\" ), \"quadrante\")\n
quadrante
\u00e8 stata utilizzata la seguente espressione nelle propriet\u00e0 del layer puntuale, in particolare nel widget Predefiniti
: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":"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:
definizione della funzione:
sintassi:
argomenti:
esempi:
Alcune funzioni (per esempio length
) possono avere pi\u00f9 definizioni, pi\u00f9 sintassi, pi\u00f9 argomenti ed esempi, ovvero possono avere delle varianti.
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.
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).
sotto una breve lista di funzioni che dipendono dalle impostazioni dell'ellissoide di progetto:
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":"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):
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:
C:\\Users\\nomeUtente\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\python\\expressions
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
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.
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.
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.
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!!!
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
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
.
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":"with_variable
.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":"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.
$area
, $perimeter
ecc.. il $
davanti ad una funzione significa che riguarda la geometry corrente;Elemento
dalle propriet\u00e0 Suggerimenti del layer;Ctrl+rotellina
)in contrapposizione ai layer raster\u00a0\u21a9
non tutti i layer in QGIS sono editabili, come per esempio layer CSV\u00a0\u21a9
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
:
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
.
Editor delle funzioni
;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
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:
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:
nella versione QGIS 3.24\u00a0\u21a9
sono layer vettoriali e semplici tabelle editabili\u00a0\u21a9
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).
L'algoritmo \u00e8 molto utile in quanto:
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.
=
uguale;+
somma;-
differenza;/
divisione;*
moltiplicazione;^
potenza;||
unione stringhe (doppio pipe);()
parentesi;'\\n'
nuova riga;Mostra Guida
permette di abilitare l'area dell'Help;\u00c8 possibile aggiungere commenti alle espressioni nell'area dell'editor espressioni: 1. per riga intera /*commento*/
2. per commentare una riga --commento
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
Sul Field Calc QGIS 3.x - 30 video lezioni (23 ore)
Per maggiori Info contattatemi.
Ing. Salvatore Fiandaca
Mail
: pigrecoinfinito@gmail.comFacebook
: https://www.facebook.com/pigreco314Twitter
: https://twitter.com/totofiandacaTelegram
: https://t.me/pigreco71blog
: https://pigrecoinfinito.com/canale youtube
: http://www.youtube.com/c/Tot\u00f2FiandacaHfcQGIS
: https://hfcqgis.opendatasicilia.it/Tansignari
: https://tansignari.opendatasicilia.it/data.world
: https://data.world/pigrecoinfinitogithub
: https://github.com/pigrecogitlab
: https://gitlab.com/pigr3coCanale Telegram
: https://t.me/pigrecoinfinitoAlla 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
Il corso \u00e8 REGISTRATO e prevede ...
Per maggiori Info contattatemi.
Ing. Salvatore Fiandaca
Mail
: pigrecoinfinito@gmail.comFacebook
: https://www.facebook.com/pigreco314Twitter
: https://twitter.com/totofiandacaTelegram
: https://t.me/pigreco71blog
: https://pigrecoinfinito.com/canale youtube
: http://www.youtube.com/c/Tot\u00f2FiandacaHfcQGIS
: https://hfcqgis.opendatasicilia.it/Tansignari
: http://tansignari.opendatasicilia.it/it/latest/#data.world
: https://data.world/pigrecoinfinitogithub
: https://github.com/pigrecogitlab
: https://gitlab.com/pigr3coCanale Telegram
: https://t.me/pigrecoinfinitoL'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:
temp1
e popolarlo con array_agg(\"ID\", \"PortCluster_ID\")
, ovvero, aggrego tutti gli ID
ragguppandoli per PortCluster_ID
(per poterlo visualizzare devo usare anche la funzione array_to_string
, quindi: array_to_string(array_agg(\"ID\", \"PortCluster_ID\"))
);temp2
e lo popolo con l'indice che possiede il valore del campo ID
dentro l'array calcolato nel campo temp1
usando l'espressione array_find(array_agg(\"ID\", \"PortCluster_ID\"),\"ID\"))
;temp2
e il campo ID
;temp3
usando la funzione aggregate
(variabile cucu
);temp4
e lo popolo con l'indice che i valori del campo temp3
hanno nell'array creato nel quarto passo;group1
.dati di esempio
Funzioni e variabili utilizzate:
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 if
dovrebbe 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.
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:
cum
: \u00e8 relativo al primo esempio;cum_2
: \u00e8 relativo al secondo esempio;cum_3
: \u00e8 relativo al terzo esempio.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
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
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
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
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.
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.
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 zFunzioni e variabili utilizzate:
(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,10l'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).
-
\u00e8 il separatore dei civici, /
\u00e8 il separatore tra numero e lettera;/
e da caratteri;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":"Funzioni e variabili utilizzate:
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:
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:
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:
il GeoPackage \u00e8 qui
Funzioni e variabili utilizzate:
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:
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:
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:
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:
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.06188803019758vediamo come farlo usando il calcolatore di campi:
latitude
, tipo Real
con lunghezza 10 e precisione 7;regexp_matches( \"GPS\" , '(.+),(.+)')[0]
;longitude
, tipo Real
con lunghezza 10 e precisione 7;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:
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:
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.5esempio di cosa ottenere: se la colonna taxa
contenesse Calluna_vulgaris#Porpidia_crustulata#Micarea_erratica
la nuova colonna devobbe contenere 5 (1+2+2).
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.
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:
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:
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.
qui file di esempio
Funzioni e variabili utilizzate:
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:
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:
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:
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
count(expression:=\"nome\",group_by:=\"nome\")
\"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:
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 4Una 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:
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:
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:
buffer($geometry,-20)
: Crea un buffer del poligono utilizzando la funzione $geometry, con una profondit\u00e0 negativa di 20 metri (buffer interno)area
: Calcola l'area della geometria appena definita, in ettari (/10000)Il GeoPackage, con il vettore bosco, \u00e8 disponibile qui
Funzioni e variabili utilizzate:
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:
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:
Funzioni e variabili utilizzate:
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:
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.
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:
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":"Espressione filtro
nel primo campo della form: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
Espressione filtro
nel secondo campo della form: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:
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:
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:
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:
sort_D-A
integer
;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:
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.
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:
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:
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:
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:
'(\\\\d+)(.+)'
significa, crea due gruppi e nel primo metti solo i numeri iniziali;\\\\1
significa prendi e sostituisci il primo gruppoFunzioni e variabili utilizzate:
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:
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:
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:
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
.
line_locate_point
. Utilizzando poi la funzione array_get
, a ciascun nome dell\u2019elenco viene convertito in valore numerico corrispondente alla sua posizione nell\u2019elenco, cosi da poterlo associare alla serie di numeri precedentemente creata.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:
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:
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:
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:
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 arancionecome 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:
zona_fill
come testo, lunghezza 20;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:
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
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:
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:
$length > 25
: seleziona e visualizza solamente le linee di lunghezza maggiore di 25 m. Questo consente di eliminare piccoli oggetti areali.
simplify($geometry,10)
: semplifica una geometria rimuovendo alcuni dei nodi usando una soglia basata sulla distanza. Il valore 10 corrisponde alla tolleranza, ossia la deviazione massima dai segmenti rettilinei per i punti da rimuovere
smooth(simplify($geometry,10),21,0.2)
: smussa la geometria semplificata dall'espressione precedente. 21 corrisponde al numero di iterazioni di smussatura, mentre 0.2 \u00e9 il valore di offset che controlla che controlla quanto la geometria smussata seguir\u00e1 strettamente la geometria originale.
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:
geometry
.Il geopackage \u00e8 scaricabile qui
--
Realizzato da Valerio Pinna
Funzioni e variabili utilizzate:
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:
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:
Funzioni e variabili utilizzate:
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:
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
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:
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?
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:
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:
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
puntiA
e puntiB
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:
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
:
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:
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 condizioneid1
<> 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:
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:
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:
Il tema (la quotatura) \u00e8 scaricabile da qui: https://plugins.qgis.org/styles/5/
Funzioni e variabili utilizzate:
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:
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
media
)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:
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:
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
.
Funzioni e variabili utilizzate:
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:
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:
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:
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:
[^A-Za-z0-9\\\\s]
significa, evita (^
) l'insieme (cio\u00e8 dalla A alla Z maiuscolo e minuscolo e i numeri)\\\\s
significa spaziocreare 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:
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:
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:
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:
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:
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
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
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:
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:
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:
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:
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:
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:
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:
shapefile
($id inizia da 0) utilizzare limit:=valore +1
geopackage
($id inizia da 1) utilizzare limit:=valore
Funzioni e variabili utilizzate:
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:
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:
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:
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:
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:
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:
ecco la tabella attributi:
Tematizzo con i valori del nuovo campo:
OSSERVAZIONE:
Funzioni e variabili utilizzate:
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:
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:
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:
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:
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:
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:
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 430492Lo 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 SRCreao 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":"shapefile : https://github.com/pigreco/COVID19_Sicilia/raw/master/risorse/province.7z
Blog post su Pigrecoinfinito: https://pigrecoinfinito.com/2020/04/14/qgis-grafici-geoplot-usando-solo-il-geometry-generator/
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:
\"positive\"
\u00e8 il campo che contiene i dati da tracciare;200
\u00e8 un fattore di amplificazione dell'asse x (ma dipende dai dati);2
\u00e8 un fattore di amplificazione dell'asse y (ma dipende dai dati)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 080207Funzioni e variabili utilizzate:
Come tracciare dei punti su una linea a distanza prefissata a partire dall'origine della linea:
distanza
e popolere con le distanze desiderate (a partire dallo start_point
della linea); 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:
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:
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:
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):
Funzioni e variabili utilizzate:
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 contestoconteggio: https://gist.github.com/pigreco/2b2ad2eb12d17c4370b09635ae1470b4
* i numeri tra parentesi rappresentano: (numero funzioni documentate/numero funzioni nel gruppo)
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>= QGIS 3.24
\u21a9
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:
aggregate una stringa corrispondente all'aggregato da calcolare. Opzioni valide sono:
expression sotto-espressione o nome campo da aggregare
@parent
.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:
array_agg
permette di trasformare un attributo (colonna di una tabella) in un array!!!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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
--
","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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
Esempio:
Selezionare le Province con minor area per ogni Regione
$area = minimum(expression:=$area,group_by:=\"COD_REG\")
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
Restituisce un valore aggregato calcolato usando tutti gli elementi figli corrispondenti da una relazione di layer.
Sintassi:
Argomenti:
aggregate una stringa corrispondente all'aggregato da calcolare. Opzioni valide sono:
expression sotto espressione o nome campo da aggregare
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
--
","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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
quella classica, senza l'uso dei paramentri denominati (l'ordine \u00e8 fondamentale);
con i parametri denominati (l'ordine non \u00e8 pi\u00f9 fondamentale):
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:
@ element
sar\u00e0 sostituita dal valore corrente.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":"Aggiornata a QGIS 3.34 Prizren
Restituisce una matrice con l'espressione data valutata su ciascun elemento.
Sintassi:
Argomenti:
@element
verr\u00e0 sostituita dal valore corrente e la variabile @counter
dall'indice corrente (iniziando con 0).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 ]\narray_foreach(array(1,2,3),@elemento + @counter) \u2192 [ 1, 3, 5 ]\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:
option='all' una stringa che specifica la gestione dei valori restituiti. Le opzioni valide sono:
all: Predefinito, tutti i valori pi\u00f9 comuni vengono restituiti in un array.
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:
option='all' una stringa che specifica la gestione dei valori restituiti. Le opzioni valide sono:
all: Predefinito, tutti i valori meno comuni vengono restituiti in un array.
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:
Esempi:
color_hsl(100,50,70) \u2192 166,217,140\n
osservazioni:
color_hsl(100,50,70) = color_rgb( 166,217,140)\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_hsla","title":"color_hsla","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi attributi tonalit\u00e0, saturazione, luminosit\u00e0 e alfa (trasparenza)
Sintassi:
Argomenti:
Esempi:
color_hsla(100,50,70,200) \u2192 '166,217,140,200'\n
osservazioni:
color_hsla(100,50,70,200) = color_rgba( 166,217,140,200)\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_hsv","title":"color_hsv","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi attributi tonalit\u00e0, saturazione e valore.
Sintassi:
Argomenti:
Esempi:
color_hsv(40,100,100) \u2192 '255,170,0'\n
osservazioni:
color_hsv(40,100,100) = color_rgb( 255,170,0 )\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_hsva","title":"color_hsva","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi attributi tonalit\u00e0, saturazione, valore e alfa (trasparenza).
Sintassi:
Argomenti:
Esempi:
color_hsva(40,100,100,200) \u2192 '255,170,0,200'\n
osservazioni:
color_hsva(40,100,100,200) = color_rgba( 255,170,0,200 )\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_mix_rgb","title":"color_mix_rgb","text":"Restituisce una stringa che rappresenta un colore che mescola i valori rosso, verde, blu e alfa di due colori forniti in base a un determinato rapporto.
Sintassi:
Argomenti:
Esempi:
color_mix_rgb('0,0,0','255,255,255',0.5) \u2192 127,127,127,255\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_part","title":"color_part","text":"Restituisce uno specifico componente colore da una stringa colore, es. la componente rosso o alfa.
Sintassi:
Argomenti:
component una stringa corrispondente al componente colore da restituire. Opzioni valide sono:
Esempi:
color_part('200,10,30','green') \u2192 10\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_rgb","title":"color_rgb","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi componenti rosso, verde e blu.
Sintassi:
Argomenti:
Esempi:
color_rgb(255,127,0) \u2192 255,127,0\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#color_rgba","title":"color_rgba","text":"Restituisce una rappresentazione stringa di un colore basato sui suoi componenti rosso, verde, blue ed alpha (trasparenza).
Sintassi:
Argomenti:
Esempi:
color_rgba(255,127,0,200) \u2192 '255,127,0,200'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#create_ramp","title":"create_ramp","text":"Restituisce una scala di colori a gradiente per una mappa di colori e passi.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
ramp_color(create_ramp(map(0,'0,0,0',1,'255,0,0')),1) \u2192 '255,0,0,255'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#darker","title":"darker","text":"Restituisce una stringa di colore pi\u00f9 scuro (o pi\u00f9 chiaro)
Sintassi:
Argomenti:
Esempi:
darker('200,10,30',300) \u2192 '66,3,10,255'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#lighter","title":"lighter","text":"Restituisce una stringa di colore pi\u00f9 chiaro (o pi\u00f9 scuro)
Sintassi:
Argomenti:
Esempi:
lighter('200,10,30',200) \u2192 '255,158,168,255'\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#project_color","title":"project_color","text":"Restituisce un colore dallo schema colore del progetto.
Sintassi:
Argomenti:
Esempi:
project_color('Logo color') \u2192 '20,140,50'\n
osservazioni
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#ramp_color","title":"ramp_color","text":"Restituisce una stringa rappresentante un colore ottenuto da una scala colore.
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#variante-di-scala-salvata","title":"Variante di scala salvata","text":"Restituisce una stringa che rappresenta un colore da una scala salvata
Sintassi:
Argomenti:
Esempi:
ramp_color('Spectral',0.3) \u2192 '253,190,115,255'\n
nota
Le scale di colore disponibili differiscono fra le varie installazioni di QGIS. Questa funzione potrebbe non restituire il risultato atteso se sposti i tuoi progetti QGIS fra le diverse installazioni.
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#variante-di-scala-creata-con-unespressione","title":"Variante di scala creata con un'espressione","text":"Restituisce una stringa che rappresenta un colore da una scala creata con un'espressione
Sintassi:
Argomenti:
Esempi:
ramp_color(create_ramp(map(0,'0,0,0',1,'255,0,0')),1) \u2192255,0,0,255\n
","tags":["gruppo"]},{"location":"gr_funzioni/colore/colore_unico/#set_color_part","title":"set_color_part","text":"Imposta uno specifico componente colore per una stringa colore, es. la componente rosso o alpha.
Sintassi:
Argomenti:
component una stringa corrispondente al componente colore da impostare. Opzioni valide sono:
value nuovo valore per il componente colore, rispettando gli intervalli listati sopra
Esempi:
set_color_part('200,10,30','green',50) \u2192 200,50,30\n
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/","title":"Gruppo Condizioni","text":"Abstract
Questo gruppo contiene funzioni per gestire controlli condizionali nelle espressioni.
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#case","title":"CASE","text":"Valuta un'espressione e restituisce un risultato diverso, sia esso vero o falso. Puoi testare pi\u00f9 condizioni
Sintassi:
CASE\nWHEN condizione THEN risultato\n[ ...n ]\n[ ELSE risultato ]\nEND\n
[ ] indica componenti opzionali
Argomenti:
Esempi:
CASE\nWHEN \"column\" IS NULL THEN 'None'\nEND\n
CASE \nWHEN \"COD_REG\" =19 or \"COD_REG\" = 20\nTHEN \"DEN_REG\" \nELSE 'NON SONO ISOLE' \nEND\n
CASE \nWHEN length( \"DEN_REG\") >15 THEN 'LUNGO'\nWHEN length( \"DEN_REG\") <15 AND length( \"DEN_REG\") >10 THEN 'MEDIO'\nELSE 'CORTA' \nEND\n
Altri Esempi:
popolare un campo un funzione di un altro
CASE \nWHEN \"livello3\" ILIKE 'A%' THEN 'ciao'\nWHEN \"livello3\" ILIKE 'B%' THEN 'arrivederci'\nWHEN \"livello3\" ILIKE 'C%' THEN 'ciaone'\nELSE 'CUCU'\nEND\n
In questo Esempio viene popolato un campo (dove \u00e8 usata l'espressione) in funzione del campo livello3: se il campo contiene un valore che inizia per A allora scriver\u00e0 ciao, se contiene un valore che inizia con B scriver\u00e0 arrivederci; se contiene un valore che inizia per C scriver\u00e0 ciaone in tutti gli altri casi scriver\u00e0 CUCU
--
posizionamento etichetta
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#coalesce","title":"coalesce","text":"
Restituisce il primo valore non NULL dalla lista delle espressioni. Questa funzione pu\u00f2 usare qualsiasi numero di Argomenti:.
Sintassi:
Argomenti:
Esempi:
coalesce(NULL, 2) \u2192 2\ncoalesce(NULL, 2, 3) \u2192 2\ncoalesce(7, NULL, 3*2) \u2192 7\ncoalesce(\"fieldA\", \"fallbackField\", 'ERRORE') \u2192 valore di \"fieldA\" se non \u00e8 NULL, altrimenti il valore di \"fallbackField\" o la stringa 'ERRORE' se sono entrambi NULL\n
Osservazioni:
Questa funzione \u00e8 utile all'interno di una espressione che prevede l'uso di pi\u00f9 campi ed uno o pi\u00f9 di essi ha valore NULL, questo valore penalizza l'intera stringa e rende non visibile il risultato.
Esempio senza l'uso della funzione coalesce:
Esempio con l'uso della funzione coalesce:
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#if","title":"if","text":"Testa una condizione e restituisce un risultato diverso a seconda della verifica.
Sintassi:
Argomenti:
Esempi:
if( 1+1=2, 'S\u00ec', 'No' ) \u2192 'S\u00ec'\nif( 1+1=3, 'S\u00ec', 'No' ) \u2192 'No'\nif( 5 > 3, 1, 0) \u2192 1\nif( '', 'It is true (not empty)', 'It is false (empty)' ) \u2192 'It is false (empty)'\nif( ' ', 'It is true (not empty)', 'It is false (empty)' ) \u2192 'It is true (not empty)'\nif( 0, 'One', 'Zero' ) \u2192 'Zero'\nif( 10, 'One', 'Zero' ) \u2192 'One'\n
Osservazioni:
--
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#nullif","title":"nullif","text":"Restituisce un valore nullo se value1 \u00e8 uguale a value2; altrimenti restituisce value1. Questo pu\u00f2 essere usato per sostituire in modo condizionale i valori con NULL
.
Sintassi:
Argomenti:
NULL
.NULL
.Esempi:
nullif('(none)', '(none)') \u2192 NULL\nnullif('text', '(none)') \u2192 'text'\nnullif(\"name\", '') \u2192 NULL, se \"name\" \u00e8 una stringa vuota (o gi\u00e0 NULL), \"name\" in qualsiasi altro caso.\n
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#regexp_match","title":"regexp_match","text":"Restituisce la prima posizione di corrispondenza che soddisfa un'espressione regolare all'interno di una stringa, o 0 se la sottostringa non viene trovata.
Sintassi:
Argomenti:
Esempi:
regexp_match('QGIS ROCKS','\\\\sROCKS') \u2192 5\n
Osservazioni:
--
In questo Esempio la prima lettere di Fiandaca si trova alla posizione 10
regexp_match('Salvatore Fiandaca','\\\\sFiandaca') \u2192 10\n
","tags":["gruppo"]},{"location":"gr_funzioni/condizioni/condizioni_unico/#try","title":"try","text":"Prova un'espressione e restituisce il suo valore se priva di errori. Se l'espressione restituisce un errore, verr\u00e0 restituito un valore alternativo se fornito altrimenti la funzione restituir\u00e0 null.
Sintassi:
[ ] contrassegna componenti opzionali
Argomenti:
Esempi:
try( to_int( '1' ), 0 ) \u2192 1\ntry( to_int( 'a' ), 0 ) \u2192 0\ntry( to_date( 'invalid_date' ) ) \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/","title":"Gruppo Conversioni","text":"Abstract
Questo gruppo contiene funzioni per convertire i dati da un tipo ad un altro, es. da stringa a intero, da intero a stringa.
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#from_base64","title":"from_base64","text":"Decodifica una stringa Base64 in un valore binario.
Sintassi:
Argomenti:
Esempi:
from_base64('UUdJUw==') \u2192 'QGIS'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#hash","title":"hash","text":"Crea un hash da una stringa con un determinato metodo.
Sintassi:
Argomenti:
Esempi:
hash('QGIS', 'md4') \u2192 'c0fc71c241cdebb6e888cbac0e2b68eb'\nhash('QGIS', 'md5') \u2192 '57470aaa9e22adaefac7f5f342f1c6da'\nhash('QGIS', 'sha1') \u2192 'f87cfb2b74cdd5867db913237024e7001e62b114'\nhash('QGIS', 'sha224') \u2192 '4093a619ada631c770f44bc643ead18fb393b93d6a6af1861fcfece0'\nhash('QGIS', 'sha256') \u2192 'eb045cba7a797aaa06ac58830846e40c8e8c780bc0676d3393605fae50c05309'\nhash('QGIS', 'sha384') \u2192 '91c1de038cc3d09fdd512e99f9dd9922efadc39ed21d3922e69a4305cc25506033aee388e554b78714c8734f9cd7e610'\nhash('QGIS', 'sha512') \u2192 'c2c092f2ab743bf8edbeb6d028a745f30fc720408465ed369421f0a4e20fa5e27f0c90ad72d3f1d836eaa5d25cd39897d4cf77e19984668ef58da6e3159f18ac'\nhash('QGIS', 'sha3_224') \u2192 '467f49a5039e7280d5d42fd433e80d203439e338eaabd701f0d6c17d'\nhash('QGIS', 'sha3_256') \u2192 '540f7354b6b8a6e735f2845250f15f4f3ba4f666c55574d9e9354575de0e980f'\nhash('QGIS', 'sha3_384') \u2192 '96052da1e77679e9a65f60d7ead961b287977823144786386eb43647b0901fd8516fa6f1b9d243fb3f28775e6dde6107'\nhash('QGIS', 'sha3_512') \u2192 '900d079dc69761da113980253aa8ac0414a8bd6d09879a916228f8743707c4758051c98445d6b8945ec854ff90655005e02aceb0a2ffc6a0ebf818745d665349'\nhash('QGIS', 'keccak_224') \u2192 '5b0ce6acef8b0a121d4ac4f3eaa8503c799ad4e26a3392d1fb201478'\nhash('QGIS', 'keccak_256') \u2192 '991c520aa6815392de24087f61b2ae0fd56abbfeee4a8ca019c1011d327c577e'\nhash('QGIS', 'keccak_384') \u2192 'c57a3aed9d856fa04e5eeee9b62b6e027cca81ba574116d3cc1f0d48a1ef9e5886ff463ea8d0fac772ee473bf92f810d'\nhash('QGIS', 'keccak_512') \u2192 '6f0f751776b505e317de222508fa5d3ed7099d8f07c74fed54ccee6e7cdc\u2026'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#md5","title":"md5","text":"Crea un hash md5 da una stringa.
Sintassi:
Argomenti:
Esempi:
md5('QGIS') \u2192 '57470aaa9e22adaefac7f5f342f1c6da'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#sha256","title":"sha256","text":"Crea un hash sha256 da una stringa.
Sintassi:
Argomenti:
Esempi:
sha256('QGIS') \u2192 'eb045cba7a797aaa06ac58830846e40c8e8c780bc0676d3393605fae50c05309'\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_base64","title":"to_base64","text":"Decodifica una stringa Base64 in un valore binario.
Sintassi:
Argomenti:
Esempi:
to_base64('QGIS') \u2192 'UUdJUw=='\n
In un layer di un GeoPackage aggiungere un campo BLOB e popolarlo con delle immagini; per visualizzarle, per esempio come Simbolo Immagine Raster
, utilizzare l'espressione:
'base64:' || to_base64(\"fieldBLOB\")\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_date","title":"to_date","text":"Converte una stringa in un oggetto data.
Sintassi:
Argomenti:
Esempi:
to_date('2012-05-04') \u2192 2012-05-04\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_datetime","title":"to_datetime","text":"Converte una stringa in un oggetto datetime.
Sintassi:
Argomenti:
Esempi:
to_datetime( '2018-05-06 12:02:00') \u2192 2018-05-06T12:02:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_decimal","title":"to_decimal","text":"Converte una coordinata in gradi, minuti e secondi nel suo equivalente decimale.
Sintassi:
Argomenti:
Esempi:
to_decimal('6\u00b09\u203216.445\u2033')) \u2192 6.154568055555556\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_dm","title":"to_dm","text":"Converte una coordinata in gradi, minuti
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_dm(6.3545681, 'x', 3) \u2192 6\u00b021.274\u2032\nto_dm(6.3545681, 'y', 4, 'suffix') \u2192 6\u00b021.2741\u2032N\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_dms","title":"to_dms","text":"Converte una coordinata in gradi, minuti e secondi
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_dms(6.3545681, 'x', 3) \u2192 6\u00b021\u203216.445\u2033\nto_dms(6.3545681, 'y', 4, 'suffix') \u2192 6\u00b021\u203216.4452\u2033N\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_int","title":"to_int","text":"Converte una stringa in un numero intero. Non viene restituito nulla se un valore non pu\u00f2 essere convertito ad intero (es. '123asd' non \u00e8 valido)
Sintassi:
Argomenti:
Esempi:
to_int('123') \u2192 123\n
Nota bene:
un testo va scritto sempre tra apici semplici es: '123'
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_interval","title":"to_interval","text":"Converte una stringa in un tipo intervallo. Pu\u00f2 essere usata per estrarre giorni, ore, mese, etc. da una data.
Sintassi:
Argomenti:
Esempi:
to_datetime('2018-05-04 12:23:00') - to_interval('1 day 2 hours') \u2192 2018-05-03T10:23:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/conversioni/conversioni_unico/#to_real","title":"to_real","text":"Converte una stringa in un numero reale. Non viene restituito nulla se un valore non pu\u00f2 essere convertito a reale (es. '123.56asd' non \u00e8 valido). I numeri sono arrotondati dopo aver salvato le modifiche se la precisione \u00e8 minore del risultato della conversione.
Sintassi:
Argomenti:
Esempi:
to_real('123.45') \u2192 123.45\n
Nota bene:
Il punto (.
) \u00e8 il separatore decimale.
Converte una stringa in un numero reale. Non viene restituito nulla se un valore non pu\u00f2 essere convertito a reale (es. '123.56asd' non \u00e8 valido). I numeri sono arrotondati dopo aver salvato le modifiche se la precisione \u00e8 minore del risultato della conversione.
Sintassi:
Argomenti:
Esempi:
to_string(123.45) \u2192 '123.45'\nto_string(123) \u2192 '123'\n
Nota bene:
Il punto (.
) \u00e8 il separatore decimale; una stringa \u00e8 sempre tra apici semplici es: '123'.
Converti una stringa in un oggetto time.
Sintassi:
Argomenti:
Esempi:
to_time('12:30:01') \u2192 12:30:0\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/","title":"Gruppo corrispondenza fuzzy","text":"Abstract
Questo gruppo contiene funzioni per confronti fuzzy fra valori.
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#hamming_distance","title":"hamming_distance","text":"Restituisce la distanza di Hamming tra due stringhe. Questa equivale al numero di caratteri nelle corrispondenti posizioni delle stringhe in ingresso dove i caratteri sono diversi. Le stringhe in ingresso devono avere la stessa lunghezza, e il confronto \u00e8 sensibile alle lettere maiuscole.
Sintassi:
Argomenti:
Esempi:
hamming_distance('abc','xec') \u2192 2\nhamming_distance('abc','ABc') \u2192 2\nhamming_distance(upper('abc'),upper('ABC')) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#levenshtein","title":"levenshtein","text":"Restituisce la distanza di Levenshtein tra due stringhe. Questa equivale al minimo numero di modifiche di caratterere (inserimenti, cancellazioni o sostituzione) richieste per cambiare una stringa in un'altra. La distanza di Levenshtein \u00e8 una misura della somiglianza tra due stringhe. Distanze pi\u00f9 piccole corrispondono a stringhe pi\u00f9 simili, e distanze pi\u00f9 grandi corrispondono a stringhe pi\u00f9 differenti. La distanza \u00e8 sensibile alle lettere maiuscole.
Sintassi:
Argomenti:
Esempi:
levenshtein('kittens','mitten') \u2192 2\nlevenshtein('Kitten','kitten') \u2192 1\nlevenshtein(upper('Kitten'),upper('kitten')) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#longest_common_substring","title":"longest_common_substring","text":"Restituisce la sottostringa in comune pi\u00f9 lunga tra due stringhe. Questa sottostringa \u00e8 la stringa pi\u00f9 lunga che \u00e8 una sottostringa delle due stringhe in ingresso. Es: la sottostringa in comune pi\u00f9 lunga di \"ABABC\" e \"BABCA\" \u00e8 \"ABC\". La sottostringa \u00e8 sensibile alle lettere maiuscole
Sintassi:
Argomenti:
Esempi:
longest_common_substring('ABABC','BABCA') \u2192 'ABC'\nlongest_common_substring('abcDeF','abcdef') \u2192 'abc'\nlongest_common_substring(upper('abcDeF'),upper('abcdex')) \u2192 'ABCDE'\n
","tags":["gruppo"]},{"location":"gr_funzioni/corrispondenza_fuzzy/corrispondenza_fuzzy_unico/#soundex","title":"soundex","text":"Restituisce la rappresentazione Soundex di una stringa. Soundex \u00e8 un algoritmo di abbinamento fonetico, per cui le stringhe con suoni simili dovrebbero essere rappresentate dallo stesso codice Soundex.
Sintassi:
Argomenti:
Esempi:
soundex('robert') \u2192 'R163'\nsoundex('rupert') \u2192 'R163'\nsoundex('rubin') \u2192 'R150'\n
secondo questo algoritmo Sicilia bedda e Sicilia bella hanno stesso suono
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/","title":"Gruppo Custom","text":"Abstract
Questo gruppo contiene funzioni Python create dall'utente. Le funzioni vanno salvate in file *.py nella cartella espression
presente nel profilo utente QGIS (C:\\Users\\nomeUtente\\AppData\\Roaming\\QGIS\\QGIS3\\profiles\\default\\python\\expressions)
Un ringraziamento particolare a Giulio Fattori, autore di molte di queste funzioni personalizzate
Calcola il fattoriale di un numero definito come il prodotto di tutti i numeri tra 1 e n. Per convenzione il fattoriale di 0 = 1 la notazione matematica per fattoriale \u00e8 n! La funzione \u00e8 compresa nel modulo math NB: valore massimo memorizzabile in un campo numerico \u00e8 20! (2432902008176640000)
Sintassi:
Argomenti:
Esempio:
fact(10)\u2192 3628800\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\nimport math\n\n@qgsfunction(args='auto', group='Custom')\ndef fact(n, feature, parent):\n \"\"\"\n Calcola il fattoriale di un numero\n definito come il prodotto di tutti\n i numeri tra 1 e n.<ul> </ul>\n Per convenzione il fattoriale di 0 = 1\n la notazione matematica per fattoriale \u00e8 n!\n La funzione \u00e8 compresa nel modulo math\n NB: valore massimo memorizzabile 20!\n <ul> </ul>\n <h2>Example usage:</h2>\n <ul>\n <li>Fattoriale(5) -> 120</li>\n <li>in simboli 5! = 120</li>\n </ul>\n \"\"\"\n return math.factorial(n)\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#my_sum","title":"my_sum","text":"Calcola la somma dei due parametri valore1 e valore2.
Sintassi:
Argomenti:
my_sum(5, 8) -> 13\nmy_sum(\"fiel1\", \"field2\") -> 42\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom')\ndef my_sum(value1, value2, feature, parent):\n \"\"\"\n Calcola la somma dei due parametri valore1 e valore2.\n <h2>Esempio di utilizzo:</h2>\n <ul>\n <li>my_sum(5, 8) -> 13</li>\n <li>my_sum(\"fiel1\", \"field2\") -> 42</li>\n </ul>\n \"\"\"\n return value1 + value2\n
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#perimetro_km","title":"perimetro_km","text":"Questa funzione ritorna il valore del perimetro della geometria in km
Sintassi:
Argomenti:
Esempio:
perimetro_km() - > 25\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom')\ndef perimetro_km( feature, parent):\n \"\"\" \n Questa funzione ritorna il valore del perimetro della geometria in km\n <ul>\n <li>perimetro_km() - > 25</li>\n </ul>\n \"\"\"\n geom_perimetro_km = feature.geometry().length()/1000\n return geom_perimetro_km\n
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#reverse_string","title":"reverse_string","text":"Questa funzione ritorna il valore rovesciato di un testo
Sintassi:
Argomenti:
reverse_string('Pigrecoinfinito) - > 'otinifniocergiP' `\n
Codice Python:
from qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom')\ndef reverse_string(string_to_reverse, feature, parent):\n \"\"\" \n Questa funzione ritorna il valore rovesciato di un testo\n <ul>\n <li>reverse_string('Pigrecoinfinito) - > 'otinifniocergiP'</li>\n </ul>\n \"\"\"\n return string_to_reverse[::-1]\n
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#get_parcel_info","title":"get_parcel_info","text":"WMS Catasto Agenzia delle Entrate CC BY 4.0:
La funzione, tramite una richiesta GetFeatureInfo, restituisce le informazioni utili sulla particella che ricade sotto il pixel di mio interesse:
Sintassi:
Argomenti:
Esempio:
get_parcel_info(355461.5,4222490.7) \u2192 'IT.AGE.PLA.G273_0033A0.673'\n
codice Python:
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n WMS Catasto Agenzia delle Entrate CC BY 4.0\n -------------------\n copyright : (C) 2020 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport requests\n\n\n\n@qgsfunction(args='auto', group='Custom')\ndef get_parcel_info(xx, yy, feature, parent):\n \"\"\"\n <h1>WMS Catasto Agenzia delle Entrate CC BY 4.0:</h1><br> \n La funzione, tramite una richiesta GetFeatureInfo, restituisce le informazioni utili sulla particella che ricade sotto il pixel di mio interesse:\n <h2>Esempio:</h2>\n <ul>\n <li>get_parcel_info(355461.5,4222490.7) -> 'IT.AGE.PLA.G273_0033A0.673'</li>\n <li>get_parcel_info(\"fieldX\", \"fieldY\") -> 'IT.AGE.PLA.G273_0033A0.673'</li>\n </ul>\n <h2>NB: le coordinate X e Y devono essere in EPSG 3045</h2>\n \"\"\"\n req = \"https://wms.cartografia.agenziaentrate.gov.it/inspire/wms/ows01.php?REQUEST=GetFeatureInfo&SERVICE=WMS&SRS=EPSG:3045&STYLES=&VERSION=1.1&FORMAT=image/png&BBOX=\"+str(xx-1)+\",\"+str(yy-1)+\",\"+str(xx+1)+\",\"+str(yy+1)+\"&HEIGHT=9&WIDTH=9&LAYERS=CP.CadastralParcel&QUERY_LAYERS=CP.CadastralParcel&INFO_FORMAT=text/html&X=5&Y=5\"\n\n r = requests.get(req, auth=('user', 'pass'))\n a = r.text.partition(\"InspireId localId</th><td>\")[2]\n b = a.partition(\"</td>\")[0]\n return b\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#get_catastal_info","title":"get_catastal_info","text":"Catasto Agenzia delle Entrate CC BY 4.0:
La funzione, tramite una richiesta ajax.php, restituisce le informazioni disponibili su quel che ricade sotto il punto selezionato.
Sintassi:
Argomenti:
chiave per le Particelle:
Esempio:
get_catastal_info(12.567315,37.914197, 'TIPOLOGIA') -> 'ACQUA'\n
codice Python:
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n WMS Catasto Agenzia delle Entrate CC BY 4.0\n -------------------\n copyright : (C) 2020 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport requests, json\n\n@qgsfunction(args='auto', group='Custom')\ndef get_catastal_info(xx, yy, chiave, feature, parent):\n \"\"\"\n <h1>Catasto Agenzia delle Entrate CC BY 4.0:</h1> \n La funzione, tramite una richiesta ajax.php, restituisce le informazioni disponibili su quel che ricade sotto il punto selezionato.\n\n <p style=\"color:Olive\"><b>Sintassi</b></p>\n <p style=\"color:blue\"><b>get_catastal_info</b><mark style=\"color:black\">(</mark>\n <mark style=\"color:red\">x</mark>\n <mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">y</mark>\n <mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">chiave</mark>\n <mark style=\"color:black\">)</mark><br>\n\n <br><mark style=\"color:black\"><b>Le possibili chiavi sono:\n <ul>\n Per le particelle:\n <li>SIGLA_PROV</li>\n <li>COD_COMUNE</li>\n <li>DENOM</li>\n <li>SEZIONE</li>\n <li>FOGLIO</li>\n <li>ALLEGATO</li>\n <li>SVILUPPO</li>\n <li>NUM_PART</li>\n <li>TIPOLOGIA</li>\n </ul> \n <ul>Per Acque e Strade:\n <li>TIPOLOGIA</li>\n <li>COMUNI</li>\n </ul></b>\n\n <h2>Esempio:</h2>\n <ul>\n <li>get_catastal_info(12.567315,37.914197, 'TIPOLOGIA') -> 'ACQUA'</li>\n </ul>\n\n <h2><b>Le coordinate X e Y devono essere espresse nel sistema WGS84 (EPSG:4326)</h2>\n <h2><b>Il campo risultante deve essere di tipo string di adeguata lunghezza</h2>\n <h2><b>Se la chiave non \u00e8 presente risulter\u00e0 ND</h2>\n \"\"\"\n\n req = \"https://wms.cartografia.agenziaentrate.gov.it/inspire/ajax/ajax.php?op=getDatiOggetto&lon=\" + str(xx) + \"&lat=\" + str(yy)\n r = requests.get(req, auth=('user', 'pass'))\n res = json.loads(r.text)\n try:\n b = str(res[chiave])\n except:\n b = 'ND'\n\n return b\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#fill-down","title":"fill-down","text":"Restituisce un valore dal campo specificato, dove il valore del campo della riga precedente viene propagato ai campi con valori NULL
successivi. Opera in base all'id dei record.
Sintassi:
Argomenti:
Esempio:
fill-down(\"attributo\")\n
from qgis.core import *\nfrom qgis.gui import *\nmem = 'NULL'\n\n@qgsfunction(args='auto', group='Custom', handlesnull=True)\ndef fill_down(value1, feature, parent):\n \"\"\"\n Restituisce un valore dal campo specificato,\n dove il valore del campo della riga precedente\n viene propagato ai campi con valori Null successivi\n <p> \n Returns a value from the specified field,\n where the value of the field of the previous row\n it is propagated to subsequent null fields\n <h2>Example usage:</h2>\n <ul>\n <li>fill_down(\"Dato\") -> Fill_Data</li>\n <table>\n <thead>\n <tr>\n <th>Dato</th>\n <th>Fill_Data</th>\n </tr>\n </thead>\n <tbody>\n <tr>\n <td style=\"text-align:right\">a</td>\n <td style=\"text-align:right\">a</td>\n </tr>\n <tr>\n <td> </td>\n <td style=\"text-align:right\">a</td>\n </tr>\n <tr>\n <td> </td>\n <td style=\"text-align:right\">a</td>\n </tr>\n <tr>\n <td style=\"text-align:right\">b</td>\n <td style=\"text-align:right\">b</td>\n </tr>\n <tr>\n <td></td>\n <td style=\"text-align:right\">b</td>\n </tr>\n </tbody>\n </table>\n </ul>\n\n Opera in base all'id dei record\n <p>\n Operate based on the ID of the records\n \"\"\"\n global mem\n res = str(value1)\n if res in ('NULL',''):\n res = mem\n else:\n mem = str(value1)\n return res\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#random_points_in_polygon","title":"random_points_in_polygon","text":"Genera 'n' di punti all'interno della geometria del poligono corrente.
Sintassi:
Argomenti:
from qgis.core import *\nfrom qgis.gui import *\n\nimport random # Needed for generating pseudo random numbers\n\n@qgsfunction(args='auto', group='Custom')\ndef random_points_in_polygon(number_of_points, feature, parent):\n \"\"\"\n <i>random_points_in_polygon( n )</i><br><br>\n Generates 'n' number of points inside the current polygon geometry.<br><br>\n <b>Requires</b><br>\n <i>n</i> (Integer)<br><br>\n <b>Example</b><br>\n <i>random_points_in_polygon( 25 )</i><br>\n <br>\n <geometry: MultiPoint> with 25 points\n \"\"\"\n points = list() # Create an empty list for the points\n\n\n # Until there's the required points in the list, loop (not the best way probably)\n while len(points) < number_of_points:\n # Create random x and y coordinates inside feature geometry bounding box\n rnd_x = random.uniform(feature.geometry().boundingBox().xMinimum(), feature.geometry().boundingBox().xMaximum())\n rnd_y = random.uniform(feature.geometry().boundingBox().yMinimum(), feature.geometry().boundingBox().yMaximum())\n # Use the coordinates to create a point\n rnd_point = QgsPointXY(rnd_x, rnd_y)\n\n # Test if the point is inside the feature geometry\n if QgsGeometry.fromPointXY(rnd_point).within(feature.geometry()):\n # If it is inside, add it to the list (increasing the length of the list)\n points.append(rnd_point)\n\n # Return a multipoint geometry\n return QgsGeometry.fromMultiPointXY(points)\n
Lo script Python \u00e8 stato realizzato da
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#randomize","title":"randomize","text":"Calcola un valore random intero univoco compreso tra start e stop.
ATTENZIONE A NON IMPOSTARE L'INTERVALLO MINORE DEL NUMERO DI FEATURE
Sintassi:
Argomenti:
Esempi:
randomize( 0, 1000 ) -> 13 \n
Osservazione:
La funzione \u00e8 particolarmente utile se si volessero generare, tra start e stop, enne valori casuali univoci (senza ripetizioni)
from qgis.core import *\nfrom qgis.gui import *\nimport random\n\nrandom_list = []\n\n@qgsfunction(args='auto', group='Custom')\n\ndef randomize(start, stop, feature, parent):\n \"\"\"\n Calcola un valore random intero univoco\n compreso tra start e stop\n <ul>ATTENZIONE A NON IMPOSTARE L'INTERVALLO MINORE DEL NUMERO DI FEATURE\n </ul>\n <h2>Example usage:</h2>\n <ul>\n <li>randomize( 0, 1000 ) -> 13</li>\n </ul>\n \"\"\"\n a = random.randint(start, stop)\n\n while a in random_list:\n a = random.randint(start, stop)\n\n random_list.append(a)\n\n return a\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#get_catg_color","title":"get_catg_color","text":"Restituisce il colore RGBA (stringa [r,g,b,a] come intero 0-255) dell'elemento categorizzato: il campo in input \u00e8 quello utilizzato per la categorizzazione. Per i campi della categorizzazione numerici formattatarli opportunamente e utilizzare la stessa espressione per catturarne il colore.
Sintassi:
Argomenti:
Esempi:
get_catg_color(\"nomeCampoCategoria\") \u2192 '228,52,199,255'\nget_catg_color(to_string(format_number(\"nomeCampoCategoria\",2))) \u2192 '228,52,199,255'\n
from qgis.core import *\nfrom qgis.gui import *\nfrom qgis.utils import iface\n\n@qgsfunction(args='auto', group='Custom')\ndef get_catg_color(value, feature, parent):\n \"\"\"\n Restituisce il colore RGBA (stringa [r,g,b,a] come intero 0-255) dell'elemento categorizzato:\n il campo in input \u00e8 quello utilizzato per la categorizzazione\n Per i campi della categorizzazione numerici formattatarli opportunamente e \n utilizzare la stessa espressione per catturarne il colore\n\n <h2>Example usage:</h2>\n <ul>\n <li>get_color(\"nomeCampoCategoria\") -> '228,52,199,255'</li>\n <li>get_color(to_string(format_number(\"nomeCampoCategoria\",2))) -> '228,52,199,255'</li>\n </ul>\n \"\"\"\n\n layer = iface.activeLayer()\n renderer = layer.renderer()\n\n if layer.renderer().type() == \"categorizedSymbol\":\n campo = renderer.legendClassificationAttribute()\n\n for cat in renderer.categories():\n if str(value) == cat.value():\n colorato = cat.symbol().symbolLayer(0).properties()['color']\n break\n\n return colorato\n
Osservazioni:
La funzione \u00e8 utile nel Plugin DataPlotly per associare i colori ai grafici.
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#svg_pie","title":"svg_pie","text":"Genera un grafico a torta inseribile in una cornice HTML nel compositore di stampe.
Sintassi:
Argomenti:
Esempi:
svg_Pie(array(.5,.1,.3),.8,array('red','cyan','gray'),array('uno','due','tre'),0)\n
La somma delle percentuali deve essere pari a 1 o inferiore Se la somma delle percentuali e' inferiore al 100% ci sara' un settore vuoto. Elenco dei colori desiderati, se vuoto o in numero insufficiente saranno utilizzati quelli di default. Elenco delle descrizioni, se vuoto o in numero insufficiente sara' utilizzato il carattere spazio.
Colori di default in ordine di utilizzo Red, Aquamarine, Orange, Cyan, Yellow, Green, Grey, Beige, Gold, DarkKhaki, Royalblue, Fucsia \u00e8 comunque possibile utilizzare qualsiasi colore CSS inserendone il nome.
#Korto19 2021\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport math\n\n@qgsfunction(args='auto', group='Custom')\ndef svg_pie(value, donut, pcol, flipper, legenda, feature, parent):\n \"\"\"\n Genera un grafico a torta inseribile in una cornice HTML nel compositore di stampe\n <p style=\"color:Olive\"><b>Sintassi</b></p>\n <p style=\"color:blue\"><b>svg_pie</b><mark style=\"color:black\">(</mark>\n <mark style=\"color:red\">array(values)</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">donut</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">array(colors)</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">array(descriptions)</mark><mark style=\"color:black\">,</mark>\n <mark style=\"color:red\">legenda</mark><mark style=\"color:black\">)</mark>\n <p style=\"color:Olive\"><b>Argomenti</b></p>\n <p style=\"color:red\"><b>array(val)</b><mark style=\"color:black\"> - array percentuali </mark><br>\n <mark style=\"color:red\"><b>donut </b><mark style=\"color:black\"> - raggio del vuoto al centro [0-1]</mark><br>\n <mark style=\"color:red\"><b>array(colors) </b><mark style=\"color:black\"> - array colori</mark><br>\n <mark style=\"color:red\"><b>array(descriptions) </b><mark style=\"color:black\"> - array descrizioni</mark><br>\n <mark style=\"color:red\"><b>legenda</b><mark style=\"color:black\"> - legenda [-1] - percentuali interne[0] - legenda [1]</mark></p>\n <h2><strong>Example usage:</strong></h2>\n <ul>\n <li>svg_Pie(array(.5,.1,.3),.8,array('red','cyan','gray'),array('uno','due','tre'),0)<li>\n </ul> \n <br> \n <strong> La somma delle percentuali deve essere pari a 1 o inferiore</strong><br>\n <strong> Se la somma delle percentuali e' inferiore al 100% ci sara' un settore vuoto</strong><br>\n <strong> Elenco dei colori desiderati, se vuoto o in numero insufficiente saranno utilizzati quelli di default</strong><br>\n <strong> Elenco delle descrizioni, se vuoto o in numero insufficiente sara' utilizzato il carattere spazio</strong><br><br>\n Colori di default in ordine di utilizzo<br>\n Red, Aquamarine, Orange, Cyan, Yellow, Green, Grey, Beige, Gold, DarkKhaki, Royalblue, Fucsia<br>\n e' comunque possibile utilizzare qualsiasi colore CSS inserendone il nome\n \"\"\"\n dcol = ['red', 'Aquamarine', 'orange', 'cyan', 'yellow', 'green', 'grey', 'beige', 'Gold', 'DarkKhaki', 'royalblue', 'fucsia']\n\n #aggiunge colori mancanti\n if len(pcol) < len(value):\n for j in range (0, len(value)-len(pcol)+1):\n if dcol[j] not in pcol:\n pcol.append(dcol[j])\n\n #aggiunge vuoti se non ci son testi\n if len(flipper) < len(value):\n for j in range (0, len(value)-len(flipper)+1):\n flipper.append('')\n\n vc = 0.85\n vt = -0.81\n\n xi = '1'\n yi = '0'\n\n if legenda:\n riq = '''viewBox=\"-1.2 -1.2 4 4\"'''\n else:\n riq = '''viewBox=\"-1.1 -1.1 2.2 2.2\"'''\n\n svg_text = '''<svg width=\"100%\" heigth=\"100%\"'''+riq+'''\" >\n <style>\n #legend{\n text-anchor: middle;\n font-weight: bold;\n font-size: .008em;\n fill: purple;\n }\n text{\n font-weight: light;\n font-size: .006em;\n font-family: Arial;\n transform: rotate(90deg);\n }\n #perc{\n fill: black;\n font-weight: bold;\n font-size: .006em;\n font-family: Arial;\n text-anchor: middle;\n }\n path{\n stroke: white;\n stroke-width: 0.01;\n }\n </style>\n <g transform=\"translate(0,0) rotate(-90)\">'''\n\n if sum(value[0:])>1:\n svg_text = 'Somma valori maggiore del 100%'\n else:\n for i in range (0, len(value)):\n pr = sum(value[0:i+1])\n vx = str(math.cos(2*3.14*pr))\n vy = str(math.sin(2*3.14*pr))\n if value[i] > 0.5:\n larc = '1'\n else:\n larc = '0'\n svg_text = svg_text + '''<path d= \"M '''+ xi + ''' ''' + yi +''' A 1 1 0 ''' + larc + ''' 1 '''+ vx + ''' ''' + vy +''' L 0 0\" fill=\"''' + pcol[i] + '''\"/>'''\n xi = vx\n yi = vy\n\n if legenda == -1:\n svg_text = svg_text + '''<circle r=\"0.06\" cx=\"'''+ str(vc) +'''\" cy=\"1.4\" fill=\"''' + pcol[i] + '''\"/>\n <text x=\"1.5\" y=\"'''+ str(vt) +'''\" >'''+ \"{:.2%}\".format(value[i]) + \" \" + flipper[i] + '''</text>'''\n vc = vc - .2\n vt = vt + .2\n\n if legenda == 1:\n svg_text = svg_text + '''<circle r=\"0.06\" cx=\"'''+ str(vc) +'''\" cy=\"1.4\" fill=\"''' + pcol[i] + '''\"/>\n <text x=\"1.5\" y=\"'''+ str(vt) +'''\" >'''+ \" \" + flipper[i] + '''</text>'''\n vc = vc - .2\n vt = vt + .2\n\n if pr > 0.5:\n larc = '0'\n else:\n larc = '1'\n\n if donut:\n svg_text = svg_text + '''<circle r=\"''' + str(donut) + '''\" cx=\"0\" cy=\"0\" fill=\"white\" />'''\n\n if legenda:\n svg_text = svg_text + '''<text id=\"legend\" x=\"1.9\" y=\"-1\">Legenda</text>'''\n\n #scrive percentuali entro torta\n if legenda >= 0:\n pr = 0\n for i in range (0, len(value)):\n pr = sum(value[0:i+1]) - value[i]/2\n vx = 0.8*math.cos(2*3.14*(pr-.25))\n vy = 0.8*math.sin(2*3.14*(pr-.25))\n svg_text = svg_text + '''<text id=\"perc\" x=\"''' + str(vx) + '''\" y=\"''' + str(vy) + '''\">'''+\"{:.2%}\".format(value[i]) +'''</text>'''\n\n svg_text = svg_text + '''</g></svg>'''\n\n return svg_text\n
Lo script Python \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#minmaxvaluefieldname","title":"MinMaxValueFieldName","text":"Restituisce il nome/valore della colonna col minimo o massimo valore nella riga.
Sintassi:
Argomenti:
Avvertenze:
La funzione va in errore se non esclusi tutti i campi testo.
Esempi:
MinMaxValueFieldName( attributes(),array('fid','PRO_COM','COMUNE'),'vmax','fname') -> '2012' \nMinMaxValueFieldName( attributes(),array( fid','PRO_COM','COMUNE'),'vmax','fval') -> '19250'\n
#Korto19 2021\n\nfrom qgis.core import *\nfrom qgis.gui import *\nimport json\n\n@qgsfunction(args='auto', group='Custom')\ndef MinMaxValueFieldName(attrmap, esclusion, minmax, vresult, feature, parent):\n \"\"\"\n Restituisce il nome della colonna col minimo o massimo valore nella riga<p>\n La funzione <b>MinMaxValueFieldName(attrmap, esclusion, minmax, vresult)</b> richiede quattro parametri:\n <ul>\n <li> <b>attrmap</b> deve essere la funzione <b>attributes()</b> che restituisce tutti i nomi dei campi</li>\n <li> <b>array()</b> contiene l'elenco dei campi da escludere delimitati da apici</li>\n <li> <b>minmax</b> per considerare il minimo <b>vmin</b> o massimo <b>vmax</b></li>\n <li> <b>vresult</b> per ottenere il nome <b>fname</b> o valore <b>fval</b> del campo</li>\n </ul>\n\n <h2>Esempi d'uso:</h2>\n <ul>\n <li>MinMaxValueFieldName( attributes(),array( 'fid' , 'PRO_COM' , 'COMUNE' ), 'vmax', 'fname') -> '2012'</li>\n <li>MinMaxValueFieldName( attributes(),array( 'fid' , 'PRO_COM' , 'COMUNE' ), 'vmax', 'fval') -> '19250'</li>\n </ul>\n\n <b><h2>AVVERTENZE:</h2>\n <ul>\n <li>La funzione va in errore se non esclusi tutti i campi testo</li>\n </ul></b>\n\n \"\"\"\n #Trasformo in array l'elenco dei campi\n esclusion = json.dumps(esclusion)\n #Recupero i valori numerici della riga\n _attrmap = {key: attrmap[key] for key in attrmap.keys() if key not in esclusion and attrmap[key] is not None} # exclude not needed fields\n #Discrimino per vmin o vmax\n if vresult == 'fname':\n if minmax == 'vmax':\n result = [k for k,v in _attrmap.items() if v==max(_attrmap.values())][0]\n elif minmax == 'vmin':\n result = [k for k,v in _attrmap.items() if v==min(_attrmap.values())][0]\n elif vresult == 'fval':\n if minmax == 'vmax':\n result = [v for k,v in _attrmap.items() if v==max(_attrmap.values())][0]\n elif minmax == 'vmin':\n result = [v for k,v in _attrmap.items() if v==min(_attrmap.values())][0]\n return result\n
Lo script \u00e8 stato riscritto da Giulio Fattori, la fonte \u00e8 qui, grazie Taras
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#ordina-array-alfanumerico-in-modo-numerico","title":"Ordina array alfanumerico in modo numerico","text":"# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Ordina array alfanumerico in modo numerico\n -------------------\n copyright : (C) 2021 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom', referenced_columns=[])\ndef array_sort_special(value1, feature, parent):\n \"\"\"\n Ordina un array alfanumerico numericamente\n <h2>Esempio:</h2>\n <ul>\n <li>array_sort_special('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']</li>\n </ul>\n \"\"\"\n\n data = value1.split('-')\n r = sorted(data, key=lambda item: (int(item.partition('/')[0])\n if item[0].isdigit() else float('inf'), item))\n #return (','.join(r))\n return r\n
Lo script \u00e8 stato riscritto da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#natural-sorting","title":"Natural sorting","text":"from qgis.core import *\nfrom qgis.gui import *\nimport re\n\ndef natural_sort_key(s):\n ns = re.compile('([0-9]+)')\n return [int(t) if t.isdigit() else t.lower() for t in re.split(ns, s)] \n\n@qgsfunction(args='auto', group='Custom', usesgeometry=False)\ndef sort_my_list(field, feature, parent):\n \"\"\"\n Ordina un array secondo la Natural sorting\n <h2>Esempio:</h2>\n <ul>\n <li>sort_my_list('field') -> 'elementi ordinati'</li>\n </ul>\n\n Nota: il nome del parametro del campo (field) per sort_my_addresses \n deve essere compreso tra virgolette singole ('), non virgolette doppie (\").\n Ad esempio 'field', non \"field\"\n <ul>\n by Kadir \u015eahbaz\n </ul>\n Commentare decomentare le ulti due righe per avere una array o una stringa\n \"\"\"\n\n _list = feature[field].split(\"-\")\n _list.sort(key=natural_sort_key)\n return _list\n #return ','.join(_list)\n
Lo script \u00e8 stato riscritto da Kadir \u015eahbaz
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#dimensioni-immagini","title":"Dimensioni immagini","text":"Estrae le dimensioni delle immagini in pixel nei casi di immagine con link assoluto o memorizzate come BLOB:
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Dimensioni immagini\n -------------------\n copyright : (C) 2022 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nfrom PyQt5.QtGui import QImage, QImageReader\n\n@qgsfunction(args='auto', group='Custom', referenced_columns=[])\ndef get_blob_sizes(img_blob, feature, parent):\n \"\"\"\n Calculate blob image dimension (W x H)\n <h2>Example usage:</h2>\n <ul>\n <li>get_blob_sizes(\"img_blob\") -> '1024 x 512 px'</li>\n </ul>\n \"\"\"\n\n image = QImage().fromData(img_blob)\n sizeOfImage = image.size()\n img_height = sizeOfImage.height()\n img_width = sizeOfImage.width()\n dim_blob = str(img_width)+ ' x ' + str(img_height) + ' px '\n\n return dim_blob\n\n@qgsfunction(args='auto', group='Custom', referenced_columns=[])\ndef get_image_sizes(img_shape, feature, parent):\n \"\"\"\n Calculate blob image size\n <h2>Example usage:</h2>\n <ul>\n <li>get_image_sizes(img_shape) -> '1024 x 512 px'</li>\n </ul>\n NEED ABSOLUTE IMAGE LINK\n \"\"\"\n\n reader = QImageReader(img_shape)\n sizeOfImage = reader.size()\n img_height = sizeOfImage.height()\n img_width = sizeOfImage.width()\n dim_image = str(img_width)+ ' x ' + str(img_height) + ' px '\n\n return dim_image\n
Lo script \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#ordina-i-punti-lungo-una-linea-orientata","title":"Ordina i punti lungo una linea orientata","text":"Restituisce l'ordinamento di elementi puntuali rispetto ad una linea orientata
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Ordina i punti lungo una linea orientata\n -------------------\n copyright : (C) 2022 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\n\n@qgsfunction(args='auto', group='Custom', usesgeometry=True)\ndef order_point_along_line(r_layer, v_reverse, feature, parent, context):\n \"\"\"\n Restituisce l'ordinamento di elementi puntuali rispetto ad una linea orientata\n <p style=\"color:Red\">Va eseguita su di un layer puntuale aggiungendo un campo numerico</p>\n <p style=\"color:Red\">Il parametro v_layer \u00e8 il nome del vettore lineare</p>\n <p style=\"color:Red\">Il parametro v_reverse \u00e8 un booleano 0/1 permette l'inversione della linea</p>\n <p>\n <h2>Example usage:</h2>\n <ul>\n <li>order_point_along_line('r_layer', v_reverse)</li>\n <li>da come risultato il numero d'ordine progressivo del punto</li>\n </ul>\n <p>Tratto da:</p>\n <p style=\"color:blue\">https://pigrecoinfinito.com/2022/03/14/ordinare-i-punti-lungo-una-linea</p>\n \"\"\"\n if v_reverse == 0:\n expression = QgsExpression(\"with_variable ('nearest',\\\n overlay_nearest(\\'\" + r_layer + \"\\',$geometry)[0],\\\n array_find(\\\n array_sort(\\\n array_foreach(\\\n array_agg($geometry, group_by:=@nearest),\\\n line_locate_point(@nearest,@element))),\\\n line_locate_point(@nearest,$geometry))+1\\\n )\"\n )\n else:\n expression = QgsExpression(\"with_variable ('nearest',\\\n overlay_nearest(\\'\" + r_layer + \"\\',reverse($geometry))[0],\\\n array_find(\\\n array_sort(\\\n array_foreach(\\\n array_agg($geometry, group_by:=@nearest),\\\n line_locate_point(@nearest,@element))),\\\n line_locate_point(@nearest,$geometry))+1\\\n )\"\n )\n\n n_point = expression.evaluate(context)\n return n_point\n
Lo script \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/custom/custom_unico/#estrarre-testo-da-legenda-categorizzata","title":"Estrarre testo da legenda categorizzata","text":"Estrarre il testo decodifica dalla legenda
# -*- coding: utf-8 -*-\n\"\"\"\n/***************************************************************************\n Ordina i punti lungo una linea orientata\n -------------------\n copyright : (C) 2022 by Giulio Fattori\n email : xxxxxxxxxxxxx\n ***************************************************************************/\n\"\"\"\n\nfrom qgis.core import *\nfrom qgis.gui import *\nfrom qgis.utils import iface\n\n@qgsfunction(args='auto', group='Custom')\ndef get_catg_label(value_in, feature, parent):\n \"\"\"\n Restituisce il testo della legenda dell'elemento categorizzato:\n <br>\n <p><b>il campo in input e' quello utilizzato per la categorizzazione</b>\n <br>\n <h2>Example usage:</h2>\n <ul>\n <li>get_catg_label(\"Area\") -> 'Parcheggio'</li>\n </ul>\n \"\"\"\n\n layer = iface.activeLayer()\n renderer = layer.renderer()\n\n if layer.renderer().type() == \"categorizedSymbol\":\n for cat in renderer.categories():\n #print('val ', type(cat.value()), type(value_in))\n if str(value_in) == str(cat.value()):\n #print('res ',cat.value(), value_in)\n cat_label_out = cat.label()\n break\n else:\n cat_label_out = ''\n\n return cat_label_out\n
Lo script \u00e8 stato realizzato da Giulio Fattori
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/","title":"Gruppo Data e Ora","text":"Abstract
Questo gruppo contiene funzioni per gestire dati con date e ore.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#age","title":"age","text":"Restituisce la differenza fra due date o datetimes. La differenza \u00e8 restituita come Interval e deve essere usata con una della seguenti funzioni per estrarre informazioni utili:
Sintassi:
Argomenti:
Esempi:
age('2012-05-12','2012-05-02') \u2192 intervallo (usa day per estrarre il numero di giorni)\nday(age('2012-05-12','2012-05-02')) \u2192 10\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#datetime_from_epoch","title":"datetime_from_epoch","text":"Restituisce un datetime il cui data e ora sono il numero di millisecondi, msec, che sono passati dal 1970-01-01T00: 00: 00.000, Coordinated Universal Time (Qt.UTC) e convertiti in Qt.LocalTime.
Sintassi:
Argomenti:
Esempi:
datetime_from_epoch(1483225200000) \u2192 2017-01-01T00:00:00\n
Feature introdotta a partire da QGIS 3.12
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#day","title":"day","text":"Estrae il giorno da una data, o il numero dei giorni da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data","title":"Variabile data","text":"Estrae il giorno da una data o un data/ora.
Sintassi:
Argomenti:
Calcola la lunghezza in giorni di un intervallo.
Sintassi:
Argomenti:
Esempi:
day(to_interval('3 days')) \u2192 3\nday(to_interval('3 weeks 2 days')) \u2192 23\nday(age('2012-01-01','2010-01-01')) \u2192 730\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#day_of_week","title":"day_of_week","text":"Restituisce il giorno della settimana per una data o un datetime. L'intervallo del valore restituito v\u00e0 da 0 a 6, dove 0 corrisponde a Domenica e 6 a Sabato.
Sintassi:
Argomenti:
Esempi:
day_of_week(todate('2018-05-09')) \u2192 3 (Mercoled\u00ec)\n
Osservazioni:
Restituisce l'intervallo in millisecondi fra l'epoca unix e la data inserita.
Sintassi:
Argomenti:
Esempi:
epoch(to_date('2017-01-01')) \u2192 1483203600000\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#format_date","title":"format_date","text":"Formatta un tipo di data o stringa in un formato stringa personalizzato. Usa stringhe nel formato data/ora Qt. Vedi QDateTime::toString.
Sintassi:
Argomenti:
Queste espressioni possono essere usate per la parte time della stringa da formattare:
Espressione In uscita h l'ora senza lo zero iniziale (da 0 a 23 o da 1 a 12 se visualizzi AM/PM) hh l'ora con lo zero iniziale (da 00 a 23 o da 01 a 12 se visualizzi AM/PM) H l'ora senza lo zero iniziale (da 0 a 23, anche se visualizzi AM/PM) HH l'ora con lo zero iniziale (da 00 a 23, anche se visualizzi AM/PM) m il minuto senza lo zero iniziale (da 0 a 59) mm il minuto con lo zero iniziale (da 00 a 59) s il secondo senza lo zero iniziale (da 0 a 59) ss il secondo con lo zero iniziale (da 00 a 59) z i millisecondi senza gli zeri iniziali (da 0 a 999) zzz i millisecondi con gli zeri iniziali (da 000 a 999) AP o A interpretato come un orario nel formato AM/PM. AP deve essere \"AM\" oppure \"PM\". ap o a interpretato come un orario nel formato AM/PM. ap deve essere \"am\" oppure \"pm\".Esempi:
format_date('2012-05-15','dd.MM.yyyy') \u2192 '15.05.2012'\nformat_date('2012-05-15','d MMMM yyyy','fr') \u2192 '15 mai 2012'\nformat_date('2012-05-15','dddd') \u2192 'Tuesday', se la lingua corrente \u00e8 una variante inglese\nformat_date('2012-05-15 13:54:20','dd.MM.yy') \u2192 '15.05.12'\nformat_date('13:54:20','hh:mm AP') \u2192 '01:54 PM'\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#hour","title":"hour","text":"Estrae la parte ore da una data/ora o orario, o il numero delle ore da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-ora","title":"Variabile ora","text":"Estrae la parte ore da un orario o data/ora.
Sintassi:
Argomenti:
Esempi:
hour(to_datetime('2018-05-09T11:58:57')) \u2192 11\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_1","title":"Variabile intervallo","text":"Calcola la lunghezza in ore di un intervallo.
Sintassi:
Argomenti:
Esempi:
hour(tointerval('3 hours')) \u2192 3\nhour(age('2012-07-22T13:00:00','2012-07-22T10:00:00')) \u2192 3\nhour(age('2012-01-01','2010-01-01')) \u2192 17520\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_date","title":"make_date","text":"Crea un valore di data dai numeri di anno, mese e giorno.
Sintassi:
Argomenti:
Esempi:
make_date(2020,5,4) \u2192 date value 2020-05-04`
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_datetime","title":"make_datetime","text":"Crea un valore datetime da anno, mese, giorno, ora, minuti e secondi numeri.
Sintassi:
Argomenti:
Esempi:
make_datetime(2020,5,4,13,45,30.5) \u2192 datetime value 2020-05-04 13:45:30.500\n
Osservazioni:
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_interval","title":"make_interval","text":"Crea un valore di intervallo dai valori di anno, mese, settimane, giorni, ore, minuti e secondi.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
make_interval(2020,5,4,13,45,30.5) \u2192 datetime value 2020-05-04 13:45:30.500\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#make_time","title":"make_time","text":"Crea un valore temporale da ore, minuti e secondi numeri.
Sintassi:
Argomenti:
Esempi:
make_time(13,45,30.5) \u2192 time value 13:45:30.500\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#minute","title":"minute","text":"Estrae la parte minuti da un data/ora o ora, o il numero dei minuti da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-ora_1","title":"Variabile ora","text":"Estrae la parte minuti da una time o una datetime.
Sintassi:
Argomenti:
Esempi:
minute('2012-07-22T13:24:57') \u2192 24\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_2","title":"Variabile intervallo","text":"Calcola la lunghezza in minuti di un intervallo.
Sintassi:
Argomenti:
Esempi:
minute(tointerval('3 minutes')) \u2192 3\nminute(age('2012-07-22T00:20:00','2012-07-22T00:00:00')) \u2192 20\nminute(age('2012-01-01','2010-01-01')) \u2192 1051200\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#month","title":"month","text":"Estrae la parte mese da una data, o il numero di mesi da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data_1","title":"Variabile data","text":"Estrae la parte mese da una data o datetime.
Sintassi:
Argomenti:
Esempi:
month('2012-05-12') \u2192 05\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_3","title":"Variabile intervallo","text":"Calcola la lunghezza in mesi di un intervallo.
Sintassi:
Argomenti:
Esempi:
month(to_interval('3 months')) \u2192 3\nmonth(age('2012-01-01','2010-01-01')) \u2192 24.3333\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#now","title":"now","text":"Restituisce la data e l'ora correnti. La funzione \u00e8 statica e restituir\u00e0 risultati coerenti durante la valutazione. Il tempo restituito \u00e8 il momento in cui viene preparata l'espressione.
Sintassi:
Esempi:
now() \u2192 2018-05-09 12:18:38`\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#second","title":"second","text":"Estrae la parte secondi da un datetime o time, o il numero dei secondi da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-ora_2","title":"Variabile ora","text":"Estrae la parte secondi da una time o una datetime.
Sintassi:
Argomenti:
Esempi:
second('2012-07-22T13:24:57') \u2192 57\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_4","title":"Variabile intervallo","text":"Calcola la lunghezza in secondi di un intervallo.
Sintassi:
Argomenti:
Esempi:
second(age('2012-07-22T00:20:00','2012-07-22T00:00:00')) \u2192 1200\nsecond(age('2012-01-01','2010-01-01')) \u2192 63072000\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_date","title":"to_date","text":"Converte una stringa in un oggetto data. \u00c8 possibile fornire una stringa di formato opzionale per analizzare la stringa; vedi QDate::fromString o la documentazione della funzione format_date per ulteriore documentazione sul formato. Per impostazione predefinita, viene utilizzata la locale dell'utente di QGIS corrente.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_date('2012-05-04') \u2192 2012-05-04\nto_date('June 29, 2019','MMMM d, yyyy') \u2192 2019-06-29, se la locale corrente utilizza il nome 'June' per il sesto mese, altrimenti si verifica un errore\nto_date('29 juin, 2019','d MMMM, yyyy','fr') \u2192 2019-06-29\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_datetime","title":"to_datetime","text":"Converte una stringa in un oggetto datetime. \u00c8 possibile fornire una stringa di formato opzionale per analizzare la stringa; vedi QDate::fromString, QTime::fromString o la documentazione della funzione format_date per ulteriore documentazione sul formato. Per impostazione predefinita, viene utilizzata la locale dell'utente di QGIS corrente.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
to_datetime('2012-05-04 12:50:00') \u2192 2012-05-04T12:50:00\nto_datetime('June 29, 2019 @ 12:34','MMMM d, yyyy @ HH:mm') \u2192 2019-06-29T12:34, se la locale corrente utilizza il nome 'June' per il sesto mese, altrimenti si verifica un errore\nto_datetime('29 juin, 2019 @ 12:34','d MMMM, yyyy @ HH:mm','fr') \u2192 2019-06-29T12:3\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_interval","title":"to_interval","text":"Converte una stringa in un tipo intervallo. Pu\u00f2 essere usata per estrarre giorni, ore, mese, etc. da una data.
Sintassi:
Argomenti:
Esempi:
to_interval('1 day 2 hours') \u2192 interval: 1.08333 days\nto_interval( '0.5 hours' ) \u2192 intervallo: 30 minuti\nto_datetime('2012-05-05 12:00:00') - to_interval('1 day 2 hours') \u2192 2012-05-04T10:00:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#to_time","title":"to_time","text":"Converte un stringa in un oggetto ora. Una stringa opzionale di formato pu\u00f2 essere fornita per valutare la stringa; Vedi QTime::fromString per documentazione aggiuntiva sul formato.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
to_time('12:30:01') \u2192 12:30:01\nto_time('12:34','HH:mm') \u2192 12:34:00\nto_time('12:34','HH:mm','fr') \u2192 12:34:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#week","title":"week","text":"Estrae il numero della settimana da una data, o il numero di settimane da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data_2","title":"Variabile data","text":"Estrae il numero della settimana da una data o un datetime.
Sintassi:
Argomenti:
Esempi:
week('2018-05-09') \u2192 19\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_5","title":"Variabile intervallo","text":"Calcola la lunghezza in settimane di un intervallo.
Sintassi:
Argomenti:
Esempi:
week(tointerval('3 weeks')) \u2192 3\nweek(age('2012-01-01','2010-01-01')) \u2192 104.285\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#year","title":"year","text":"Estrae la parte anno da una data, o il numero di anni da un intervallo.
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-data_3","title":"Variabile data","text":"Estrae la parte anno da una data o datetime.
Sintassi:
Argomenti:
Esempi:
week('2018-05-09') \u2192 19\n
","tags":["gruppo"]},{"location":"gr_funzioni/data_ora/data_ora_unico/#variabile-intervallo_6","title":"Variabile intervallo","text":"Calcola la lunghezza in anni di un intervallo.
Sintassi:
Argomenti:
Esempi:
year(to_interval('3 years')) \u2192 3\nyear(age('2012-01-01','2010-01-01')) \u2192 1.9986\n
","tags":["gruppo"]},{"location":"gr_funzioni/espressione_utente/espressione_utente_unico/","title":"Gruppo Espressione utente","text":"Abstract
Questo gruppo contiene espressioni personalizzate memorizzate nel profilo utente.
","tags":["gruppo"]},{"location":"gr_funzioni/espressione_utente/espressione_utente_unico/#espressioni-utente","title":"Espressioni Utente","text":"Per installarle nel proprio profilo cliccare su (1) e selezionare il file espressioni_pigreco.json
Abstract
Contiene funzioni che manipolano nomi di file e di percorsi.
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#base_file_name","title":"base_file_name","text":"Restituisce il nome del file senza la cartella o il suffisso del file.
Sintassi:
Argomenti:
Esempi:
base_file_name('/home/qgis/data/country_boundaries.shp') \u2192 'country_boundaries'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#exif","title":"exif","text":"Recupera i valori dei tag exif da un file immagine.
Sintassi:
[ ] indica componenti opzionali
Argomenti
elenco completo dei tag:
Exif.GPSInfo.GPSAltitude\nExif.GPSInfo.GPSAltitudeRef\nExif.GPSInfo.GPSDateStamp\nExif.GPSInfo.GPSLatitude\nExif.GPSInfo.GPSLatitudeRef\nExif.GPSInfo.GPSLongitude\nExif.GPSInfo.GPSLongitudeRef\nExif.GPSInfo.GPSProcessingMethod\nExif.GPSInfo.GPSTimeStamp\nExif.GPSInfo.GPSVersionID\nExif.Image.0xea1c\nExif.Image.Artist\nExif.Image.DateTime\nExif.Image.ExifTag\nExif.Image.GPSTag\nExif.Image.ImageLength\nExif.Image.ImageWidth\nExif.Image.Make\nExif.Image.Model\nExif.Image.ResolutionUnit\nExif.Image.Software\nExif.Image.XPKeywords\nExif.Image.XResolution\nExif.Image.YCbCrPositioning\nExif.Image.YResolution\nExif.Iop.InteroperabilityVersion\nExif.Iop.RelatedImageLength\nExif.Iop.RelatedImageWidth\nExif.Photo.0xea1c\nExif.Photo.ColorSpace\nExif.Photo.ComponentsConfiguration\nExif.Photo.Contrast\nExif.Photo.DateTimeDigitized\nExif.Photo.DateTimeOriginal\nExif.Photo.DigitalZoomRatio\nExif.Photo.ExifVersion\nExif.Photo.ExposureBiasValue\nExif.Photo.ExposureMode\nExif.Photo.ExposureProgram\nExif.Photo.ExposureTime\nExif.Photo.FNumber\nExif.Photo.Flash\nExif.Photo.FlashpixVersion\nExif.Photo.FocalLength\nExif.Photo.GainControl\nExif.Photo.ISOSpeedRatings\nExif.Photo.ImageUniqueID\nExif.Photo.InteroperabilityTag\nExif.Photo.LightSource\nExif.Photo.MaxApertureValue\nExif.Photo.MeteringMode\nExif.Photo.PixelXDimension\nExif.Photo.PixelYDimension\nExif.Photo.Saturation\nExif.Photo.SceneCaptureType\nExif.Photo.Sharpness\nExif.Photo.UserComment\nExif.Photo.WhiteBalance\nExif.Thumbnail.Compression\nExif.Thumbnail.JPEGInterchangeFormat\nExif.Thumbnail.JPEGInterchangeFormatLength\nExif.Thumbnail.ResolutionUnit\nExif.Thumbnail.XResolution\nExif.Thumbnail.YResolution\n
Esempi exif('/my/photo.jpg','Exif.Image.Orientation') \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_exists","title":"file_exists","text":"Restituisce vero se un percorso del file esiste.
Sintassi:
Argomenti:
Esempi:
file_exists('/home/qgis/data/country_boundaries.shp') \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_name","title":"file_name","text":"Restituisce il nome di un file (compresa l'estensione del file), esclusa la directory.
Sintassi:
Argomenti:
Esempi:
file_name('/home/qgis/data/country_boundaries.shp') \u2192 'country_boundaries.shp'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_path","title":"file_path","text":"Restituisce il componente della cartella del un percorso di un file. Questo non include il nome del file.
Sintassi:
Argomenti:
Esempi:
file_path('/home/qgis/data/country_boundaries.shp') \u2192 '/home/qgis/data'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_size","title":"file_size","text":"Restituisce la dimensione (in bites) di un file.
Sintassi:
Argomenti:
Esempi:
file_size('/home/qgis/data/country_boundaries.geojson') \u2192 5674\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#file_suffix","title":"file_suffix","text":"Restituisce il suffisso (estensione) dal percorso di un file.
Sintassi:
Argomenti:
Esempi:
file_suffix('/home/qgis/data/country_boundaries.shp') \u2192 'shp'\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#is_directory","title":"is_directory","text":"Restituisce vero se un percorso corrisponde ad una directory.
Sintassi:
Argomenti:
Esempi:
is_directory('/home/qgis/data/country_boundaries.shp') \u2192 falso\nis_directory('/home/qgis/data/') \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/file_e_percorsi/file_e_percorsi_unico/#is_file","title":"is_file","text":"Restituisce vero se un percorso corrisponde ad un file.
Sintassi:
Argomenti:
Esempi:
is_file('/home/qgis/data/country_boundaries.shp') \u2192 vero\nis_file('/home/qgis/data/') \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/form/form_unico/","title":"Form","text":"Questo gruppo contiene funzioni che sono disponibili nel contesto modulo attributi. Per esempio, in impostazioni campo widget.
Il gruppo \u00e8 visibile solo per il Filtro
del Tipo Widget Relazione Valore
.
a partire da >= QGIS 3.14
a partire da >= QGIS 3.2
WIDGET Value Relation (Relazione valore):
consente l'implementazione di filtri complessi e dinamici all'interno di moduli di attributo QGIS. La funzionalit\u00e0 pu\u00f2 essere utilizzata per implementare moduli \"drill-down\" all'interno di QGIS, in cui i valori disponibili in un campo dipendono dai valori di altri campi:
Questa funzionalit\u00e0 consente agli utenti di creare espressioni \"value-relation\" basate sul valore corrente di un altro campo nella stessa form. Quando l'utente modifica il valore di un campo, le scelte disponibili in tutti i campi correlati vengono filtrate in modo che corrispondano al nuovo valore, consentendo una strategia di filtraggio gerarchica (drill down o cascading) all'interno di un modulo o nella tabella degli attributi.
qui un video di Alessandro Pasotti
Le espressioni implementate per realizzare quanto descritto sopra sono tre, una funzione e due variabili:
intersects( buffer(@current_geometry ,1000),$geometry)
NB: nella cartella esempi trovate un geopackage con i dati e un progetto esempio
video:
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/","title":"Gruppo Generale","text":"Abstract
Questo gruppo contiene un assortimento di funzioni generiche.
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#env","title":"env","text":"Ottiene una variabile di ambiente e restituisce il suo contenuto come stringa. Se non \u00e8 possibile trovare la variabile, sar\u00e0 restituito NULL
. Questo \u00e8 utile per specifiche configurazioni di sistema come lettere del disco o prefissi di percorso. La definizione di variabili di ambiente dipende dal sistema operativo, per favore verifica con il tuo amministratore di sistema o con la documentazione del sistema operativo come ci\u00f2 possa essere impostato.
Sintassi:
Argomento:
Esempi:
env( 'LANG' ) \u2192 'en_US.UTF-8'\nenv( 'MIO_PREFISSO_VARIABILE' ) \u2192 'Z:'\nenv( 'I_DO_NOT_EXIST' ) \u2192 NULL\nenv( 'COMPUTERNAME') \u2192 LENOVO_PC (\u00e8 il mio notebook)\nenv('home') \u2192 'C:\\Users\\Salvatore'\n
alcune varibili li trovate qui: Impostazioni | Opzioni | Sistema
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#eval","title":"eval","text":"Valuta una espressione che viene passata in una stringa. Molto utile per espandere parametri dinamici passati come variabili contestuali o campi.
Sintassi:
Argomento:
Esempi:
eval(''nice'') \u2192 'nice'\neval(@expression_var) \u2192 [qualsiasi risultato che dalla valutazione di @expression_var potrebbe assumere...]\neval( '@row_number +10') \u2192 11\n
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#eval_template","title":"eval_template","text":"Valuta un modello che viene passato in una stringa. Molto utile per espandere parametri dinamici passati come variabili contestuali o campi.
Sintassi:
Argomento:
Esempi:
eval_template('QGIS [% upper(\\'rocks\\') %]') \u2192 QGIS ROCKS\n
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#mime_type","title":"mime_type","text":"Restituisce il tipo mime dei dati binari.
Sintassi:
Argomento:
Esempi:
mime_type('<html><body></body></html>') \u2192 text/html\nmime_type(from_base64('R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAIAOw==')) \u2192 image/gif\n
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#var","title":"var","text":"Restituisce il valore memorizzato in una variabile specificata.
Sintassi:
Argomento:
Esempi:
var('qgis_version') \u2192 '3.0.2-Girona'\nvar('user_account_name') \u2192 'Salvatore'\n
Osservazioni
Come argomento va usato il nome della variabile senza la chioccila altrimenti non funziona.
","tags":["gruppo"]},{"location":"gr_funzioni/generale/generale_unico/#with_variable","title":"with_variable","text":"Questa funzione imposta una variabile per qualunque codice di espressione che sar\u00e0 fornita come argomento terzo. Questo \u00e8 utile solamente per espressioni complicate, in cui lo stesso valore calcolato deve essere usato in posti differenti.
Sintassi:
Argomento:
Esempi:
with_variable('my_sum', 1 + 2 + 3, @my_sum * 2 + @my_sum * 5) \u2192 42\nwith_variable('duepigreco',2*3.1415, @duepigreco * 2 +@duepigreco*5 ) \u2192 43.981\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/","title":"Gruppo Geometria","text":"Abstract
Questo gruppo contiene funzioni che operano sugli oggetti geometrici es: lunghezza, area.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#affine_transform","title":"affine_transform","text":"Restituisce la geometria dopo una trasformazione affine. I calcoli sono nel sistema di riferimento spaziale di questa geometria. Le operazioni vengono eseguite in un ordine di scala, rotazione, traslazione. Se c'\u00e8 un offset Z o M ma la coordinata non \u00e8 presente nella geometria, verr\u00e0 aggiunta.
Sintassi
[ ] indica componenti opzionali
Argomenti
Esempi
geom_to_wkt(affine_transform(geom_from_wkt('LINESTRING(1 1, 2 2)'), 2, 2, 0, 1, 1)) \u2192 'LineString (3 3, 4 4)'\ngeom_to_wkt(affine_transform(geom_from_wkt('POLYGON((0 0, 0 3, 2 2, 0 0))'), 0, 0, -90, 1, 2)) \u2192 'Polygon ((0 0, 6 0, 4 -2, 0 0))'\ngeom_to_wkt(affine_transform(geom_from_wkt('POINT(3 1)'), 0, 0, 0, 1, 1, 5, 0)) \u2192 'PointZ (3 1 5)'\n
Osservazione
La funzione trasforma le geometrie a partire dall'origine delle coordinate del sistema di riferimento del layer, sotto un esempio:
affine_transform( \n geometry:= $geometry,\n deltaX:=0,\n deltaY:=0,\n rotationZ:=45,\n scaleX:=1,\n scaleY:=1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#area","title":"$area","text":"Restituisce l'area della geometria corrente. L'area calcolata da questa funzione rispetta sia le impostazioni dell'ellissoide del progetto corrente sia delle unit\u00e0 di misura. Per esempio, se \u00e8 stato impostato un ellissoide per il progetto allora l'area calcolata sar\u00e0 ellisoidica altrimenti se non \u00e8 stato impostato alcun ellissoide l'area calcolata sar\u00e0 planimetrica.
Sintassi:
Esempi:
$area \u2192 131196498,619546\n
Nota bene:
Se il SR del progetto in cui si sta calcolando l'area ($area) fosse un sistema proiettato (es:EPSG 3003/4; 32632/33/34 ecc..) allora l'unit\u00e0 di misura sarebbe il metro, invece se il SR del progetto fosse EPSG 4326, cio\u00e8 un sistema geografico, allora l'unit\u00e0 di misura dell'area sarebbe gradi e quindi poco comprensibile e valori piccoli (0.00001).
Osservazione:
$area
e $length
, utilizzano lo stesso metodo di PostGIS (le routine GeographicLib) quindi le misure risulteranno pi\u00f9 'precise' rispetto alle versioni precedenti di QGIS. (vedi: discussione, feature request, pull request).Restituisce la geometria dell'elemento attuale. Pu\u00f2 essere usato per il processamento con altre funzioni. ATTENZIONE: Questa funzione \u00e8 deprecata (a partire da QGIS 3.28.0 Firenze). Si consiglia di utilizzare la variabile sostitutiva @geometry
NB: $geometry
richiama l'attributo geometria!!!
Sintassi:
Esempi:
geomToWKT( $geometry ) \u2192 POINT(6 50)\narea($geoamtry) \u2192 1234567.89\nperimeter($geometry) \u2192 25689.25\narea(@geoamtry) \u2192 1234567.89\n
Osservazioni:
il $
indica che \u00e8 relativo all'elemento corrente e non ha bisogno di argomenti.
Restituisce la lunghezza di una linestring. Se hai bisogno della lunghezza del bordo di un poligono, utilizza invece $perimeter. La lunghezza calcolata da questa funzione rispetta le impostazioni sia dell'ellissoide sia delle unit\u00e0 di misura del progetto corrente. Per esempio, se \u00e8 stato impostato un ellissoide per il progetto allora la lunghezza calcolata sar\u00e0 ellisoidica altrimenti se non \u00e8 stato impostato alcun ellissoide la lunghezza calcolata sar\u00e0 planimetrica.
Sintassi:
Esempi:
$length \u2192 42.4711 \n
Osservazione:
Occorre cambiare entrambe le impostazioni, sia quelle dell'ellissoide \u2192 'None/Planimetric' sia le Unit\u00e0 di misura per le distanze' \u2192 Gradi
Queste modofiche non valgono per l'etichettatura, la lunghezza sar\u00e0 quella relativa alla geometria e quindi al suo SR.
$area
e $length
, utilizzano lo stesso metodo di PostGIS (le routine GeographicLib) quindi le misure risulteranno pi\u00f9 'precise' rispetto alle versioni precedenti di QGIS. (vedi: discussione, feature request, pull request).Nota:
il $
indica che \u00e8 relativo all'elemento corrente e non ha bisogno di argomenti.
Restituisce la lunghezza del perimetro della geometria corrente. Il perimetro calcolato da questa funzione rispetta le impostazioni sia dell'ellissoide sia delle unit\u00e0 di misura del progetto corrente. Per esempio, se \u00e8 stato impostato un ellissoide per il progetto allora il perimetro calcolato sar\u00e0 ellisoidico altrimenti se non \u00e8 stato impostato alcun ellissoide il perimetro calcolato sar\u00e0 planimetrico.
Sintassi:
Esempi:
$perimeter \u2192 2545897.26\n
Osservazione:
$area
e $length
, utilizzano lo stesso metodo di PostGIS (le routine GeographicLib) quindi le misure risulteranno pi\u00f9 'precise' rispetto alle versioni precedenti di QGIS. (vedi: discussione, feature request, pull request).Nota:
il $
indica che \u00e8 relativo all'elemento corrente e non ha bisogno di argomenti.
Restituisce la coordinata x della geometria corrente.
Sintassi:
Esempi:
$x \u2192 12.2568971\n
Osservazione:
x
della geometria corrente purch\u00e8 sia un POINT altrimenti restituisce NULL (vedi screenshot)x
o y
occorre utilizzare una combinazione di funzioni ed: x($geometry)
che vale per qualunque tipologia di geometria (point, linestring, polygon)Recupera una coordinata x per la geometria dell'elemento corrente. ATTENZIONE: Questa funzione \u00e8 deprecata (>= QGIS 3.30). Si raccomanda di utilizzare la funzione sostitutiva x_at con la variabile @geometry.
Sintassi:
Argomenti:
Esempi:
$x_at(1) \u2192 12.6882843\n
Osservazioni:
Le lineastring hanno un verso e quindi l'indice 0 indica il primo vertice mentre indici negativi significano che la conta inizia dalla l'ultimo vertice: -10 significa il 10-mo vertice partendo dall'ultimo vertice.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_at_1","title":"x_at","text":"(>= QGIS 3.30)
Recupera una coordinata x della geometria.
Sintassi:
Argomenti:
Esempi:
x_at( geom_from_wkt( 'POINT(4 5)' ), 0 ) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y","title":"$y","text":"Restituisce la coordinata y della geometria corrente.
Sintassi:
Esempi:
$y \u2192 12.2568971\n
Osservazione:
y
della geometria corrente purch\u00e8 sia un POINT altrimenti restituisce NULL (vedi screenshot)Recupera una coordinata y per la geometria dell'elemento corrente. ATTENZIONE: Questa funzione \u00e8 deprecata (>= QGIS 3.30). Si raccomanda di utilizzare la funzione sostitutiva x_at con la variabile @geometry.
Sintassi:
Argomenti:
Esempi:
$y_at(1) \u2192 2\n
Osservazioni:
Le lineastring hanno un verso e quindi l'indice 0 indica il primo vertice mentre indici negativi significano che la conta inizia dalla l'ultimo vertice: -10 significa il 10-mo vertice partendo dall'ultimo vertice.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_at_1","title":"y_at","text":"(>= QGIS 3.30)
Recupera una coordinata y della geometria.
Sintassi:
Argomenti:
Esempi:
y_at( geom_from_wkt( 'POINT(4 5)' ), 0 ) \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#angle_at_vertex","title":"angle_at_vertex","text":"Restituisce l'angolo della bisettrice (angolo medio) della geometria per un vertice specifico di una geometria di tipo linestring. Gli angoli sono in gradi in senso orario dal nord.
Sintassi:
Argomenti:
Esempi:
angle_at_vertex(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),vertex:=1) \u2192 45.0\n
Osservazione:
Il primo ed ultimo vertice di una lineastring aperta la funzione restituisce il valore dell'angolo e non la bisettrice.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#apply_dash_pattern","title":"apply_dash_pattern","text":"Applica un modello di trattino ad una geometria, restituendo una geometria MultiLineString che \u00e8 la geometria di input rappresentata lungo ogni linea/anello con il modello specificato.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(apply_dash_pattern(geom_from_wkt('LINESTRING(1 1, 10 1)'), array(3, 1))) \u2192 MultiLineString ((1 1, 4 1),(5 1, 8 1),(9 1, 10 1, 10 1))\ngeom_to_wkt(apply_dash_pattern(geom_from_wkt('LINESTRING(1 1, 10 1)'), array(3, 1), start_rule:='half_dash')) \u2192 MultiLineString ((1 1, 2.5 1),(3.5 1, 6.5 1),(7.5 1, 10 1, 10 1))\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#area_1","title":"area","text":"Restituisce l'area di un oggetto a geometria poligonale. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura dell'area restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $area, la quale esegue calcoli ellisoidici basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di misura dell'area.
Sintassi:
Argomenti:
Esempi:
area($geometry) \u2192 1234.567\n
Nota bene:
Se il SR del layer in cui si sta calcolando l'area (area()) fosse un sistema proiettato (es:EPSG 3003/4; 32632/33/34 ecc..) l'unit\u00e0 di misura sarebbe il metro, invece se il SR del layer fosse EPSG 4326, cio\u00e8 un sistema geografico, allora l'unit\u00e0 di misura dell'area sarebbe in gradi e quindi poco comprensibile e valori piccoli.
Osservazioni:
in generale area($geometry) <> $area
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#azimuth","title":"Azimuth","text":"Restituisce l'azimut dal nord quale angolo in radianti misurato in senso orario dalla verticale del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
degrees( azimuth( make_point(25, 45), make_point(75, 100) ) ) \u2192 42.273689\ndegrees( azimuth( make_point(75, 100), make_point(25,45) ) ) \u2192 222.273689\n
Osservazione:
Azimuth per definizione restituisce un angolo in radianti, per trasformarlo in gradi usare la funzione degrees()
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bearing","title":"Bearing","text":"Introdotta in >= QGIS 3.34
Restituisce la direzione basata sul nord come l'angolo in radianti misurato in senso orario sull'ellissoide dalla verticale dal punto_a al punto_b. (funzione per calcolare l'azimut geodetico sull'ellissoide.)
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
- degrees( bearing( make_point(16198544, -4534850), make_point(18736872, -1877769), 'EPSG:3857', 'EPSG:7030') ) \u2192 49.980071\n- degrees( bearing( make_point(18736872, -1877769), make_point(16198544, -4534850), 'EPSG:3857', 'WGS84') ) \u2192 219.282386\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#boundary","title":"boundary","text":"Restituisce l'area minima della combinazione dei confini della geometria (cio\u00e8 il confine topologico della geometria). Per esempio, una geometria poligonale avr\u00e0 un confine costituito dalle linee di ogni anello nel poligono. Alcuni tipi di geometrie non hanno confini, es collezioni di punti o geometrie e pertanto verr\u00e0 restituito NULL
.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(boundary(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))'))) \u2192 'LineString(1 1,0 0,-1 1,1 1)'\ngeom_to_wkt(boundary(geom_from_wkt('LineString(1 1,0 0,-1 1)'))) \u2192 'MultiPoint ((1 1),(-1 1))'\n
Osservazioni:
funzione molto utile per la tematizzazione aggiungendo un nuovo layer con geometry generator
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bounds","title":"bounds","text":"Restituisce la geometria che rappresenta il perimetro di delimitazione di una geometria in ingresso. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
bounds($geometry) \u2192 perimetro di delimitazione dell'elemento geometrico corrente\ngeom_to_wkt(bounds(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))'))) \u2192 'Polygon ((-1 0, 1 0, 1 1, -1 1, -1 0))'\n
Osservazioni:
funzione molto utile per la tematizzazione aggiungendo un nuovo layer con geometry generator
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bounds_height","title":"bounds_height","text":"Restituisce l'altezza del perimetro di delimitazione di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
bounds_height($geometry) \u2192 altezza del perimetro di delimitazione dell'elemento geometrico corrente\nbounds_height(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))')) \u2192 1\n
Osservazioni:
La funzione restituisce un numero che corrisponde all'altezza del rettangolo di ingombro di una geometria.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#bounds_width","title":"bounds_width","text":"Restituisce la larghezza del perimetro di delimitazione di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
bounds_width($geometry) \u2192 larghezza del perimetro di delimitazione di $geometry\n
Osservazioni:
La funzione restituisce un numero che corrisponde alla larghezza del rettangolo di ingombro di una geometria.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#buffer","title":"buffer","text":"Restituisce una geometria che rappresenta tutti i punti la cui distanza dalla geometria \u00e8 minore o uguale alla distanza inserita. I calcoli vengono effettuati nel sistema di riferimento spaziale della geometria.
Sintassi:
Argomenti:
Esempi:
buffer($geometry, 10.5) \u2192 poligono di $geometry bufferizzato di 10.5 unit\u00e0\n
Danger
Utilizzando SR proiettati l'unit\u00e0 di misura \u00e8 il metro, mentre, per SR geografici \u00e8 il grado, quindi attenzione al valore della distanza.
Nota bene:
La Funzione restituisce SEMPRE un poligono sia per geometry POINT, LINESTRING o **POLYGON
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#buffer_by_m","title":"buffer_by_m","text":"Crea un buffer lungo una geometria linestring in cui il diametro del buffer varia in base ai valori m nei vertici della linea.
Sintassi:
Argomenti:
Esempi:
buffer_by_m(geometry:=geom_from_wkt('LINESTRINGM(1 2 0.5, 4 2 0.2)'),segments:=8) \u2192 Un buffer di larghezza variabile che inizia con un diametro di 0,5 e termina con un diametro di 0,2 lungo la linea.\n
relativa all'esempio di sopra:
Osservazioni:
QGIS - feature
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#centroid","title":"centroid","text":"Restituisce il centro geometrico di una geometria.
Sintassi:
Argomenti:
Esempi:
centroid($geometry) \u2192 una geometria punto\n
Osservazioni:
La Funzione restituisce SEMPRE una geometry **POINT
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#close_line","title":"close_line","text":"Restituisce una linestring chiusa della linestring di input aggiungendo il primo punto alla fine della linea, se non \u00e8 gi\u00e0 chiusa. Se la geometria non \u00e8 una linestring o una MultiLinestring, il risultato sar\u00e0 NULL.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(close_line(geom_from_wkt('LINESTRING(0 0, 1 0, 1 1)'))) \u2192 LineString (0 0, 1 0, 1 1, 0 0)\ngeom_to_wkt(close_line(geom_from_wkt('LINESTRING(0 0, 1 0, 1 1, 0 0)'))) \u2192 LineString (0 0, 1 0, 1 1, 0 0)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#closest_point","title":"closest_point","text":"Restituisce il punto sulla geometria1 che \u00e8 pi\u00f9 vicino alla geometria2.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(closest_point(geom_from_wkt('LINESTRING (20 80, 98 190, 110 180, 50 75 )'),geom_from_wkt('POINT(100 100)'))) \u2192 Point(73.0769 115.384)\n
Osservazioni:
Utilizzando il geometry generator per i temi (il layer strade \u00e8 una unica feature):
closest_point( geometry(get_feature('strade', 'reg',19)),$geometry)
Gif animata: geometry 1 \u00e8 la rete stradale; geometry 2 sono i punti; in rosso i closestpoint
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#collect_geometries","title":"collect_geometries","text":"Raccoglie un set di geometrie in un oggetto geometria multiparte.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variante-geometry","title":"Variante geometry","text":"Sintassi:
Argomenti:
Esempi:
geom_to_wkt(collect_geometries(make_point(1,2), make_point(3,4), make_point(5,6))) \u2192 'MultiPoint ((1 2),(3 4),(5 6))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variante-con-array","title":"Variante con array","text":"Sintassi:
Argomenti:
Esempi:
geom_to_wkt(collect_geometries(array(make_point(1,2), make_point(3,4), make_point(5,6)))) \u2192 'MultiPoint ((1 2),(3 4),(5 6))'\n
Osservazioni:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#combine","title":"combine","text":"Restituisce la combinazione di due geometrie.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( combine( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 2 1)' ) ) ) \u2192 MULTILINESTRING((4 4, 2 1), (3 3, 4 4), (4 4, 5 5))\ngeom_to_wkt( combine( geom_from_wkt( 'LINESTRING(3 3, 4 4)' ), geom_from_wkt( 'LINESTRING(3 3, 6 6, 2 1)' ) ) ) \u2192 LINESTRING(3 3, 4 4, 6 6, 2 1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#concave_hull","title":"concave_hull","text":">= QGIS 3.18 Firenze e Geos 3.11+
Restituisce un poligono possibilmente concavo che contiene tutti i punti della geometria
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(concave_hull(geom_from_wkt('MULTILINESTRING((106 164,30 112,74 70,82 112,130 94,130 62,122 40,156 32,162 76,172 88),(132 178,134 148,128 136,96 128,132 108,150 130,170 142,174 110,156 96,158 90,158 88),(22 64,66 28,94 38,94 68,114 76,112 30,132 10,168 18,178 34,186 52,184 74,190 100,190 122,182 148,178 170,176 184,156 164,146 178,132 186,92 182,56 158,36 150,62 150,76 128,88 118))'), 0.99)) \u2192 'Polygon ((30 112, 36 150, 92 182, 132 186, 176 184, 190 122, 190 100, 186 52, 178 34, 168 18, 132 10, 112 30, 66 28, 22 64, 30 112))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#_1","title":"Geometria","text":"","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#contains","title":"contains","text":"Verifica se una geometria ne contiene un'altra. Restituisce vero se e solo se nessun punto di geometry2 giace all'esterno di geometry1 e almeno un punto dell'interno di geometry2 si trova all'interno di geometry1.
Sintassi:
Argomenti:
Esempi:
contains( geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))' ), geom_from_wkt( 'POINT(0.5 0.5 )' ) ) \u2192 vero\ncontains( geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 falso\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
contains(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)\n
dove:
geometry(get_feature( 'province_rt_rt','pk_uid','46'))
$geometry
seleziono tutti i comuni contains
(contenuti) nella provincia con pk_uid
46 (Lucca)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli contenuti nella provincia di Lucca).
NOT contains(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)
Restituisce il poligono convesso di una geometria. Rappresenta la minima geometria convessa che racchiude tutte le geometria contenute nell'insieme.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( convex_hull( geom_from_wkt( 'LINESTRING(3 3, 4 4, 4 10)' ) ) ) \u2192 POLYGON((3 3,4 10,4 4,3 3))\n
Osservazioni:
La funzione restituisce sempre un poligono.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#crosses","title":"crosses","text":"Verifica se una geometria interseca un'altra. Restituisce vero (1) se le geometrie interessate hanno qualche, ma non tutti, punto interno in comune.
Sintassi:
Argomenti:
Esempi:
crosses( geom_from_wkt( 'LINESTRING(3 5, 4 4, 5 3)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\ncrosses( geom_from_wkt( 'POINT(4 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 falso\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
crosses(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)\n
dove: geometry(get_feature( 'fiume_arno','nome','ARNO'))
$geometry
seleziono tutti i comuni crosses
(attraversati) dal fiume ARNO
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli attraversati dal fiume ARNO).
NOT crosses(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)
Prende una geometria di un livello poligonale o lineare e ne genera una nuova in cui le geometrie hanno un numero di vertici maggiore di quella originale.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(densify_by_count(geom_from_wkt('LINESTRING(1 1, 10 1)'), 3)) \u2192 LineString (1 1, 3.25 1, 5.5 1, 7.75 1, 10 1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#densify_by_distance","title":"densify_by_distance","text":"Prende una geometria di un livello poligono o lineare e ne genera una nuova in cui le geometrie sono densificate aggiungendo ulteriori vertici sui bordi che hanno una distanza massima dell'intervallo di distanza specificato.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(densify_by_distance(geom_from_wkt('LINESTRING(1 1, 10 1)'), 4)) \u2192 LineString (1 1, 4 1, 7 1, 10 1)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#difference","title":"difference","text":"Restituisce una geometria che rappresenta la porzione della geometry_a che non interseca la geometry_b.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( difference( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4)' ) ) ) \u2192 LINESTRING(4 4, 5 5)\n
Espressione:
Espressione
-- differenza linea a - linea b\n difference( \n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0)))),\n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry))\n )\n -- NB: -- \u00e8 importante ordine delle geometrie\n -- a - b \u00e8 diverso da b - a\n
Espressione
-- differenza linea b - linea a\n difference( \n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry)),\n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0))))\n )\n -- NB: -- \u00e8 importante ordine delle geometrie\n -- a - b \u00e8 diverso da b - a\n
Prova tu
Dati e progetto qgz
Esempio di sopra:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#disjoint","title":"disjoint","text":"Controlla qualora una geometria non ne interseca spazialmente un'altra. Restituisce true (1) se le geometrie non condividono nessuno spazio comune.
Sintassi:
Argomenti:
Esempi:
disjoint( geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0 ))' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\ndisjoint( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'POINT(4 4)' )) \u2192 falso\n
Osservazione:
Vero = 1; Falso= 0
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
disjoint(geometry(get_feature( 'fiume_arno','nome','ARNO')), $geometry)\n
dove:
geometry(get_feature( 'fiume_arno','nome','ARNO'))
$geometry
seleziono tutti i comuni disjoint
(disgiunti) dal fiume ARNO
Restituisce la distanza minima (basata su riferimento spaziale) tra due geometrie in unit\u00e0 proiettate.
Sintassi:
Argomenti:
Esempi:
distance( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'POINT(4 8)' ) ) \u2192 4\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#distance_to_vertex","title":"distance_to_vertex","text":"Restituisce la distanza lungo una geometria ad un vertice specificato.
Sintassi:
Argomenti:
Esempi:
distance_to_vertex(geometry:=geom_from_wkt('LineString(0 0, 10 0, 10 10)'),vertex:=1) \u2192 10.0\n
--
esempio di sopra:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#end_point","title":"end_point","text":"Restituisce l'ultimo nodo di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(end_point(geom_from_wkt('LINESTRING(4 0, 4 2, 0 2)'))) \u2192 'Point (0 2)'\n
--
End_point di geometria poligonale:
End_point di geometria lineare:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#exif_geotag","title":"exif_geotag","text":"Crea una geometria puntuale dai geotag dell'exif di un file di immagine.
Sintassi
Descrizione
Esempi
geom_to_wkt(exif_geotag('/my/photo.jpg')) \u2192 'Point (2 4)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#extend","title":"extend","text":"Estende l'inizio e la fine di una geometria di tipo linestring di una quantit\u00e0 specificata. Le linee sono estese usando la direzione di immersione del primo e dell'ultimo segmento nella linea. Le distanze sono espresse nel SR di tale geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(extend(geom_from_wkt('LineString(0 0, 1 0, 1 1)'),1,2)) \u2192 'LineString (-1 0, 1 0, 1 3)'\ngeom_to_wkt(extend(geom_from_wkt('MultiLineString((0 0, 1 0, 1 1), (2 2, 0 2, 0 5))'),1,2)) \u2192 'MultiLineString ((-1 0, 1 0, 1 3),(3 2, 0 2, 0 7))'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#exterior_ring","title":"exterior_ring","text":"Restituisce una linestring che rappresenta l'anello esterno di una geometria poligonale. Se la geometria non \u00e8 un poligono, il risultato sar\u00e0 NULL.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(exterior_ring(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),( 0.1 0.1, 0.1 0.2, 0.2 0.2, 0.2, 0.1, 0.1 0.1))'))) \u2192 'LineString (-1 -1, 4 0, 4 2, 0 2, -1 -1)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#extrude","title":"extrude","text":"Restituisce una versione estrusa della geometria (Multi-)Curve o (Multi-)Linestring in ingresso, con un'estensione specificata da x e y.
Sintassi:
Argomenti:
Esempi:
extrude(geom_from_wkt('LineString(1 2, 3 2, 4 3)'), 1, 2) \u2192 Polygon ((1 2, 3 2, 4 3, 5 5, 4 4, 2 4, 1 2))\nextrude(geom_from_wkt('MultiLineString((1 2, 3 2), (4 3, 8 3)'), 1, 2) \u2192 MultiPolygon (((1 2, 3 2, 4 4, 2 4, 1 2)),((4 3, 8 3, 9 5, 5 5, 4 3)))\n
Osservazioni:
Nell'esempio ho utilizzato la funzione [boundary()](boundary.md) perch\u00e9 la geometria di ingresso deve essere lineare.\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#flip_coordinates","title":"flip_coordinates","text":"Restituisce una copia della geometria con le coordinate x e y scambiate. Utile per riparare le geometrie che hanno invertito i valori di latitudine e longitudine.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(flip_coordinates(make_point(1, 2))) \u2192 Point (2 1)\n
--
Esempio con vettore poligonale (aggiorno la geometry):
il flip \u00e8 da usare con cautela perch\u00e9 cambia radicalemnte la posizione del vettore
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#force_polygon_ccw","title":"force_polygon_ccw","text":"Forza una geometria a rispettare la convenzione per cui gli anelli esterni sono in senso antiorario, quelli interni in senso orario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(force_polygon_ccw(geometry:=geom_from_wkt('Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1)))'))) \u2192 'Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#force_polygon_cw","title":"force_polygon_cw","text":"Forza una geometria a rispettare la convenzione per cui gli anelli esterni sono in senso orario, quelli interni in senso antiorario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(force_polygon_cw(geometry:=geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))'))) \u2192 'Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#force_rhr","title":"force_rhr","text":"Forza una geometria a rispettare la regola della mano destra, in cui l'area delimitata da un poligono si trova a destra del limite. In particolare, l'anello esterno \u00e8 orientato in senso orario e l'interno in senso antiorario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(force_rhr(geometry:=geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))'))) \u2192 Polygon ((-1 -1, 0 2, 4 2, 4 0, -1 -1))\n
Osservazioni:
Ecco un esempio pratico della funzione (presente anche nelgli strumenti fi processing) ovvero un poligono disegnato in senso antiorario viene forzato in senso orario e l'etichettature \u00e8 visibile correttamente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_from_gml","title":"geom_from_gml","text":"Restituisce una geometria da una rappresentazione GML di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(geom_from_gml('<gml:LineString srsName=\"EPSG:4326\"><gml:coordinates>4,4 5,5 6,6</gml:coordinates></gml:LineString>') ) \u2192 'LineString (4 4, 5 5, 6 6)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_from_wkb","title":"geom_from_wkb","text":"Restituisce una geometria creata da una rappresentazione binaria ben nota (WKB).
Sintassi:
Argomenti:
Esempi:
geom_from_wkb( geom_to_wkb( make_point(4,5) ) ) \u2192 un oggetto geometria punto\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_from_wkt","title":"geom_from_wkt","text":"Restituisce una geometria creata da una rappresentazione Well-Known Text (WKT).
Sintassi:
Argomenti:
Esempi:
geom_from_wkt( 'POINT(4 5)' ) \u2192 un oggetto geometria\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_to_wkb","title":"geom_to_wkb","text":"Restituisce la rappresentazione binaria ben nota (WKB) di una geometria come BLOB binario.
Sintassi:
Argomenti:
Esempi:
geom_to_wkb( $geometry ) \u2192 BLOB binario contenente un oggetto geometria\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geom_to_wkt","title":"geom_to_wkt","text":"Restituisce la rappresentazione Well-Known Text (WKT) della geometria senza metadati del SR
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( make_point(6, 50) ) \u2192 'POINT(6 50)'\ngeom_to_wkt(centroid(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))'))) \u2192 'POINT(0 0.66666667)'\ngeom_to_wkt(centroid(geom_from_wkt('Polygon((1 1, 0 0, -1 1, 1 1))')), 2) \u2192 'POINT(0 0.67)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geometry_1","title":"geometry","text":"Restituisce la geometria di un elemento con geometria
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( geometry( get_feature( layer, attributeField, value ) ) ) \u2192 'POINT(6 50)'`\nintersects( $geometry, geometry( get_feature( layer, attributeField, value ) ) ) \u2192 vero`\n
--
Usando il Select by Expression: selezionare le feature di un layer (quartieri) in funzione di altro layer (test):
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geometry_n","title":"geometry_n","text":"Restituisce una geometria specifica da una collezione di geometrie, o NULL se la geometria in ingresso non \u00e8 una collezione. Restituisce anche una parte da una geometria a pi\u00f9 parti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(geometry_n(geom_from_wkt('GEOMETRYCOLLECTION(POINT(0 1), POINT(0 0), POINT(1 0), POINT(1 1))'),3)) \u2192 'Point (1 0)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#geometry_type","title":"geometry_type","text":"Restituisce un valore stringa che descrive il tipo di una geometria (Punto, Linea o Poligono)
Sintassi:
Argomenti:
Esempi:
geometry_type( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 'Line'\ngeometry_type( geom_from_wkt( 'MULTILINESTRING((2 5, 3 6, 4 8), (1 1, 0 0))') ) \u2192 'Line'\ngeometry_type( geom_from_wkt( 'POINT(2 5)') ) \u2192 'Point'\ngeometry_type( geom_from_wkt( 'POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))') ) \u2192 'Polygon'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#hausdorff_distance","title":"hausdorff_distance","text":"Restituisce la distanza di Hausdorff tra due geometrie. Questa \u00e8 in sostanza una misura di come le 2 geometrie sono simili o dissimili: una distanza pi\u00f9 bassa indica geometrie pi\u00f9 simili. La funzione pu\u00f2 essere eseguita con un argomento opzionale di densificazione della frazione. Se non viene specificato, viene utilizzata una approssimazione alla distanza standard di Hausdorff. Questa approssimazione \u00e8 esatta o abbastanza vicina per un grande sottoinsieme di casi utili. Esempi di questi sono:
Se l'approssimazione predefinita fornita da questo metodo \u00e8 insufficiente, specifica l'argomento opzionale di densificazione della frazione. Specificando questo argomento si esegue una densificazione del segmento prima di calcolare la distanza Hausdorff discreta. Il parametro imposta la frazione con cui densificare ogni segmento. Ogni segmento sar\u00e0 suddiviso in un numero di subsegmenti di uguale lunghezza, la cui frazione della lunghezza totale \u00e8 la pi\u00f9 vicina alla frazione data. Riducendo il parametro di densificazione della frazione, la distanza restituita si avviciner\u00e0 alla vera distanza Hausdorff per le geometrie.
Sintassi:
Argomenti:
Esempi:
hausdorff_distance( geometry1:= geom_from_wkt('LINESTRING (0 0, 2 1)'),geometry2:=geom_from_wkt('LINESTRING (0 0, 2 0)')) \u2192 2\nhausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)')) \u2192 14.142135623\nhausdorff_distance( geom_from_wkt('LINESTRING (130 0, 0 0, 0 150)'),geom_from_wkt('LINESTRING (10 10, 10 150, 130 10)'),0.5) \u2192 70.0\n
--
Nel caso di geometrie puntuali la hausdorff_distance coincide con la funzione distance, segue un esempio:
Espressione
format_number(\n hausdorff_distance( \n transform($geometry,'EPSG:4326','EPSG:3004'), \n transform(geometry(get_feature('fontanelle','n',1)),'EPSG:4326','EPSG:3004'))/1000,4) || ' km' \n || '\\n'|| \n format_number(\n distance( \n transform($geometry,'EPSG:4326','EPSG:3004'), \n transform(geometry(get_feature('fontanelle','n',1)),'EPSG:4326','EPSG:3004'))/1000,4) || ' km'\n
--
In questo esempio confronto due layer: il numero pi\u00f9 piccolo indica il poligono pi\u00f9 simile a al poligono pi\u00f9 grande.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#inclination","title":"inclination","text":"Restituisce l'inclinazione misurata dallo zenit (0) al nadir (180) del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
inclination( make_point( 5, 10, 0 ), make_point( 5, 10, 5 ) ) \u2192 0.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 50, 100, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, -5 ) ) \u2192 180.0\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#interior_ring_n","title":"interior_ring_n","text":"Restituisce un anello interno specifico da una geometria poligonale, o null se la geometria non \u00e8 un poligono.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(interior_ring_n(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),(-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1),(-1 -1, 4 0, 4 2, 0 2, -1 -1))'),1)) \u2192 'LineString (-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1))'\n
Osservazioni:
Restituisce una lineastring!!!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#intersection","title":"intersection","text":"Restituisce una geometria che rappresenta la porzione condivisa fra le due geometrie.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( intersection( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4)' ) ) ) \u2192 'LINESTRING(3 3, 4 4)'\ngeom_to_wkt( intersection( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'MULTIPOINT(3.5 3.5, 4 5)' ) ) ) \u2192 'POINT(3.5 3.5)'\n
Espressione
-- intersezione tra le due linee\n intersection( \n make_line( -- linea a\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry)),\n make_line( -- linea b\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0))))\n )\n -- NB: -- l' ordine delle geometrie \u00e8 indifferente\n
Prova tu
Dati e progetto qgz
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#intersects","title":"intersects","text":"Controlla qualora una geometria ne interseca un'altra. Restituisce true (1) se la geometrie si intersecano spazialmente (condividono una porzione di spazio) altrimenti da false (0).
Sintassi:
Argomenti:
Esempi:
intersects( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\nintersects( geom_from_wkt( 'POINT(4 5)' ), geom_from_wkt( 'POINT(5 5)' ) ) \u2192 falso\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
intersects(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)\n
dove:
geometry(get_feature( 'province_rt_rt','pk_uid','46'))
$geometry
seleziono tutti i comuni intersects
(interseca) nella provincia con pk_uid
46 (Lucca)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli intersecati con la provincia di Lucca).
NOT intersects(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)
Controlla se il perimetro di delimitazione della geometria si sovrappone a quello di un'altra geometria. Restituisce vero (1) se le geometrie intersecano spazialmente il perimetro di delimitazione definito e falso (0) se non lo intersecano.
Sintassi:
Argomenti:
Esempi:
intersects_bbox( geom_from_wkt( 'POINT(4 5)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 vero\nintersects_bbox( geom_from_wkt( 'POINT(6 5)' ), geom_from_wkt( 'POLYGON((3 3, 4 4, 5 5, 3 3))' ) ) \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_closed","title":"is_closed","text":"Restituisce vero (true) se una linestring \u00e8 chiusa (i punti di inizio e di fine coincidono), o falso (false) se una linestring non \u00e8 chiusa. Se la geometria non \u00e8 una linestring, il risultato sar\u00e0 NULL.
Sintassi:
Argomenti:
Esempi:
is_closed(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)')) \u2192 falso\nis_closed(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2, 0 0)')) \u2192 vero\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_empty","title":"is_empty","text":"
Restituisce vero se una geometria \u00e8 vuota (senza coordinate), falso se la geometria non \u00e8 vuota e NULL se non c'\u00e8 geometria. Vedi anche is_empty_or_null
.
Sintassi:
Argomenti:
Esempi:
is_empty(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)')) \u2192 falso\nis_empty(geom_from_wkt('LINESTRING EMPTY')) \u2192 vero\nis_empty(geom_from_wkt('POINT(7 4)')) \u2192 falso\nis_empty(geom_from_wkt('POINT EMPTY')) \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_empty_or_null","title":"is_empty_or_null","text":"Restituisce vero se una geometria \u00e8 vuota (senza coordinate), falso se la geometria non \u00e8 vuota e NULL se non c'\u00e8 geometria. Vedi anche is_empty
.
Sintassi:
Argomenti:
Esempi:
is_empty_or_null(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)')) \u2192 falso\niis_empty_or_null(geom_from_wkt('POINT(7 4)')) \u2192 falso\nis_empty_or_null(geom_from_wkt('POINT EMPTY')) \u2192 vero\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_multipart","title":"is_multipart","text":"Restituisce vero se la geometria \u00e8 di tipo Multi.
Sintassi:
Argomenti:
Esempi:
is_multipart(geom_from_wkt('MULTIPOINT ((0 0),(1 1),(2 2))')) \u2192 vero\nis_multipart(geom_from_wkt('POINT (0 0)')) \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#is_valid","title":"is_valid","text":"Restituisce vero se una geometria \u00e8 valida; se \u00e8 ben formato in 2D secondo le regole OGC
Sintassi:
Argomenti:
Esempi:
is_valid(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2, 0 0)')) \u2192 vero\nis_valid(geom_from_wkt('LINESTRING(0 0)')) \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#length_1","title":"length","text":"Restituisce il numero di caratteri in una stringa o la lunghezza di una geometria di tipo linestring.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-stringa","title":"Variabile stringa","text":"Restituisce il numero di caratteri contenuti in una stringa.
Sintassi:
Argomenti:
Esempi:
length('hello') \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-geometria","title":"Variabile geometria","text":"Calcola la lunghezza di un oggetto a geometria lineare. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura della lunghezza restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $length, la quale esegue calcoli ellissoidici basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di distanza.
Sintassi:
Argomenti:
Esempi:
length(geom_from_wkt('LINESTRING(0 0, 4 0)')) \u2192 4.0
Calcola la lunghezza 3D di un oggetto linea geometrica. Se la geometria non \u00e8 un oggetto linea 3D, restituisce la sua lunghezza 2D. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di questa geometria, e le unit\u00e0 della lunghezza restituita corrisponderanno alle unit\u00e0 per l'SR. Questo differisce dai calcoli eseguiti dalla funzione $length, che eseguir\u00e0 calcoli ellissoidali basati sulle impostazioni dell'ellissoide e dell'unit\u00e0 di distanza del progetto.
Sintassi:
Argomenti:
Esempi:
length3D(geom_from_wkt('LINESTRINGZ(0 0 0, 3 0 4)')) \u2192 5.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_interpolate_angle","title":"line_interpolate_angle","text":"Restituisce l'angolo parallelo alla geometria ad una distanza specifica lungo una geometria di tipo linestring. Gli angoli sono in gradi in senso orario dal nord.
Sintassi:
Argomenti:
Esempi:
line_interpolate_angle(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=5) \u2192 90.0\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_interpolate_point","title":"line_interpolate_point","text":"Restituisce il punto interpolato ad una specifica distanza lungo una geometria di tipo linestring.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(line_interpolate_point(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),distance:=5)) \u2192 'Point (4 0)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_locate_point","title":"line_locate_point","text":"Restituisce la distanza lungo una linestring corrispondente alla posizione pi\u00f9 vicina alla linestring di una geometria puntuale specificata.
Sintassi:
Argomenti:
Esempi:
line_locate_point(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),point:=geom_from_wkt('Point(5 1)')) \u2192 5.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_merge","title":"line_merge","text":"Restituisce una geometria di tipo LineString o MultiLineString, dove qualsiasi LineString connessa dalla geometria in ingresso \u00e8 stata fusa (merge) in una linestring singola. Questa funzione restituir\u00e0 NULL
se la geometria considerata non \u00e8 una LineString/MultiLineString.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(line_merge(geom_from_wkt('MULTILINESTRING((0 0, 1 1),(1 1, 2 2))'))) \u2192 'LineString(0 0,1 1,2 2)'\ngeom_to_wkt(line_merge(geom_from_wkt('MULTILINESTRING((0 0, 1 1),(11 1, 21 2))'))) \u2192 'MultiLineString((0 0, 1 1),(11 1, 21 2)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#line_substring","title":"line_substring","text":"Restituisce la porzione di una geometria di linea (o curva) che rientra tra le distanze iniziale e finale specificate (misurata dall'inizio della linea). I valori Z e M sono linearmente interpolati dai valori esistenti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(line_substring(geometry:=geom_from_wkt('LineString(0 0, 10 0)'),start_distance:=2,end_distance:=6)) \u2192 'LineString (2 0,6 0)'\nline_substring( $geometry, $length *.1,$length *.6) \u2192 <geometria: LineString>\n
--
Funzione utile per la tematizzazione
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m","title":"m","text":"Restituisce il valore m di una geometria puntuale.
Sintassi:
Argomenti:
Esempi:
( geom_from_wkt( 'POINTM(2 5 4)' ) ) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m_at","title":"m_at","text":"(>= QGIS 3.30)
Recupera una coordinata m della geometria, o un NULL se la geometria non ha valore m.
Sintassi:
Argomenti:
Esempi:
m_at(geom_from_wkt('LineStringZM(0 0 0 0, 10 10 0 5, 10 10 0 0)'), 1) \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m_max","title":"m_max","text":"Restituisce il valore minimo m (misura) di una geometria.
Sintassi:
Argomenti:
Esempi:
m_max( make_point_m( 0,0,1 ) ) \u2192 1\nm_max(make_line( make_point_m( 0,0,1 ), make_point_m( -1,-1,2 ), make_point_m( -2,-2,0 ) ) ) \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#m_min","title":"m_min","text":"Restituisce il valore minimo m (misura) di una geometria.
Sintassi:
Argomenti:
Esempi:
m_min( make_point_m( 0,0,1 ) ) \u2192 1\nm_min(make_line( make_point_m( 0,0,1 ), make_point_m( -1,-1,2 ), make_point_m( -2,-2,0 ) ) ) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#main_angle","title":"main_angle","text":"Restituisce l'angolo principale di una geometria (senso orario, in gradi dal Nord), il quale rappresenta l'angolo dell'orientamento del rettangolo minimo che copre completamente la geometria.
Sintassi:
Argomenti:
Esempi:
main_angle(geom_from_wkt('Polygon ((321577 129614, 321581 129618, 321585 129615, 321581 129610, 321577 129614))')) \u2192 38.66\n
Osservazioni:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_circle","title":"make_circle","text":"Crea un poligono circolare.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(make_circle(make_point(10,10), 5, 4)) \u2192 'Polygon ((10 15, 15 10, 10 5, 5 10, 10 15))'\ngeom_to_wkt(make_circle(make_point(10,10,5), 5, 4)) \u2192 'PolygonZ ((10 15 5, 15 10 5, 10 5 5, 5 10 5, 10 15 5))''\ngeom_to_wkt(make_circle(make_point(10,10,5,30), 5, 4)) \u2192 'PolygonZM ((10 15 5 30, 15 10 5 30, 10 5 5 30, 5 10 5 30, 10 15 5 30))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_ellipse","title":"make_ellipse","text":"Crea un poligono ellittico.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_ellipse(make_point(10,10), 5, 2, 90, 4)) \u2192 'Polygon ((15 10, 10 8, 5 10, 10 12, 15 10))\ngeom_to_wkt(make_ellipse(make_point(10,10,5), 5, 2, 90, 4)) \u2192 'PolygonZ ((15 10 5, 10 8 5, 5 10 5, 10 12 5, 15 10 5))'\ngeom_to_wkt(make_circle(make_point(10,10,5,30), 5, 2, 90, 4)) \u2192 'PolygonZM ((15 10 5 30, 10 8 5 30, 5 10 5 30, 10 12 5 30, 15 10 5 30))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_line","title":"make_line","text":"Crea una geometria linea da una serie di geometrie punto.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_line(make_point(2,4),make_point(3,5))) \u2192 'LineString (2 4, 3 5)'\ngeom_to_wkt(make_line(make_point(2,4),make_point(3,5),make_point(9,7))) \u2192 'LineString (2 4, 3 5, 9 7)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#array-variant","title":"Array variant","text":"I vertici di linea sono specificati come una matrice di punti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_line(array(make_point(2,4),make_point(3,5),make_point(9,7)))) \u2192 'LineString (2 4, 3 5, 9 7)'\n
Espressione
make_line(\n array(geometry(\n get_feature_by_id('fontanelle_Palermo',$id))),\n array(geometry(\n get_feature_by_id('fontanelle_Palermo',not $id%2)))\n ) \n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_point","title":"make_point","text":"Crea una geometria punto da valori x ed y (e opzionalmente z ed m).
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_point(2,4,6,8)) \u2192 'PointZM (2 4 6 8)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_point_m","title":"make_point_m","text":"Crea una geometria punto da una coordinata x, y ed un valore m.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_point_m(2,4,6)) \u2192 'PointM (2 4 6)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_polygon","title":"make_polygon","text":"Crea una geometria poligono da un'anello esterno e opzionalmente da geometrie ad anello interne.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(make_polygon(geom_from_wkt('LINESTRING( 0 0, 0 1, 1 1, 1 0, 0 0 )'))) \u2192 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0))'\ngeom_to_wkt(make_polygon(geom_from_wkt('LINESTRING( 0 0, 0 1, 1 1, 1 0, 0 0 )'),geom_from_wkt('LINESTRING( 0.1 0.1, 0.1 0.2, 0.2 0.2, 0.2 0.1, 0.1 0.1 )'),geom_from_wkt('LINESTRING( 0.8 0.8, 0.8 0.9, 0.9 0.9, 0.9 0.8, 0.8 0.8 )'))) \u2192 'Polygon ((0 0, 0 1, 1 1, 1 0, 0 0),(0.1 0.1, 0.1 0.2, 0.2 0.2, 0.2 0.1, 0.1 0.1),(0.8 0.8, 0.8 0.9, 0.9 0.9, 0.9 0.8, 0.8 0.8))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_rectangle_3points","title":"make_rectangle_3points","text":"Crea un rettangolo da 3 punti.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_rectangle_3points(make_point(0, 0), make_point(0,5), make_point(5, 5), 0))) \u2192 'Polygon ((0 0, 0 5, 5 5, 5 0, 0 0))'\ngeom_to_wkt(make_rectangle_3points(make_point(0, 0), make_point(0,5),make_point(5, 3), 1))) \u2192 'Polygon ((0 0, 0 5, 5 5, 5 0, 0 0))'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_regular_polygon","title":"make_regular_polygon","text":"Crea un poligono regolare.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt(make_regular_polygon(make_point(0,0), make_point(0,5), 5)) \u2192 'Polygon ((0 5, 4.76 1.55, 2.94 -4.05, -2.94 -4.05, -4.76 1.55, 0 5))'\ngeom_to_wkt(make_regular_polygon(make_point(0,0), project(make_point(0,0), 4.0451, radians(36)), 5)) \u2192 'Polygon ((0 5, 4.76 1.55, 2.94 -4.05, -2.94 -4.05, -4.76 1.55, 0 5))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_square","title":"make_square","text":"Crea un quadrato da una diagonale.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(make_square( make_point(0,0), make_point(5,5))) \u2192 'Polygon ((0 0, -0 5, 5 5, 5 0, 0 0))'\ngeom_to_wkt(make_square( make_point(5,0), make_point(5,5))) \u2192 'Polygon ((5 0, 2.5 2.5, 5 5, 7.5 2.5, 5 0))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_triangle","title":"make_triangle","text":"Crea un poligono triangolare
Sintassi:
Argomenti:
geom_to_wkt(make_triangle(make_point(0,0), make_point(5,5), make_point(0,10))) \u2192 'Triangle ((0 0, 5 5, 0 10, 0 0))'\ngeom_to_wkt(boundary(make_triangle(make_point(0,0), make_point(5,5), make_point(0,10)))) \u2192 'LineString (0 0, 5 5, 0 10, 0 0)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#make_valid","title":"make_valid","text":">=QGIS 3.28 Firenze
Restituisce una geometria valida o una geometria vuota se non \u00e8 stato possibile renderla valida.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
- geom_to_wkt(make_valid(geom_from_wkt('POLYGON((3 2, 4 1, 5 8, 3 2, 4 2))'))) \u2192 'Polygon ((3 2, 3 4, 1 4, 1 2, 3 2))'\n- geom_to_wkt(make_valid(geom_from_wkt('POLYGON((3 2, 4 1, 5 8, 3 2, 4 2))'), 'linework')) \u2192 'GeometryCollection (Polygon ((5 8, 4 1, 3 2, 5 8)),LineString (3 2, 4 2))'\n- geom_to_wkt(make_valid(geom_from_wkt('POLYGON((3 2, 4 1, 5 8))'), method:='linework')) \u2192 'Polygon ((3 2, 3 4, 1 4, 1 2, 3 2))'\n- make_valid(geom_from_wkt('LINESTRING(0 0)')) \u2192 Una geometria vuota\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#_2","title":"Geometria","text":"","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#minimal_circle","title":"minimal_circle","text":"Restituisce la circonferenza circoscritta minima di una geometria. Rappresenta il cerchio minimo che circoscrive tutte le geometrie presenti in un dataset.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
geom_to_wkt( minimal_circle( geom_from_wkt( 'LINESTRING(0 5, 0 -5, 2 1)' ), 4 ) ) \u2192 Polygon ((0 5, 5 -0, -0 -5, -5 0, 0 5))\ngeom_to_wkt( minimal_circle( geom_from_wkt( 'MULTIPOINT(1 2, 3 4, 3 2)' ), 4 ) ) \u2192 Polygon ((3 4, 3 2, 1 2, 1 4, 3 4))\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#nodes_to_points","title":"nodes_to_points","text":"Restituisce una geometria multi-punti costituita da ogni nodo della geometria in ingresso.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(nodes_to_points(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)'))) \u2192 'MultiPoint ((0 0),(1 1),(2 2))'\ngeom_to_wkt(nodes_to_points(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1))'),true)) \u2192 'MultiPoint ((-1 -1),(4 0),(4 2),(0 2))'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_geometries","title":"num_geometries","text":"Restituisce il numero di geometrie in una raccolta di geometrie, o il numero di parti in una geometria multiparte. La funzione restituisce NULL se la geometria di input non \u00e8 una raccolta.
Sintassi:
Argomenti:
Esempi:
num_geometries(geom_from_wkt('GEOMETRYCOLLECTION(POINT(0 1), POINT(0 0), POINT(1 0), POINT(1 1))')) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_interior_rings","title":"num_interior_rings","text":"Restituisce il numero di anelli interni in un poligono o in una raccolta di geometrie, o null se la geometria in ingresso non \u00e8 un poligono o una raccolta.
Sintassi:
Argomenti:
Esempi:
num_interior_rings(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),(-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1))')) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_points","title":"num_points","text":"Restituisce il numero di vertici in una geometria.
Sintassi:
Argomenti:
Esempi:
num_points($geometry) \u2192 numero di vertici in $geometry\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#num_rings","title":"num_rings","text":"Restituisce il numero di anelli (includendo anche anelli esterni) in un poligono o in una raccolta di geometrie, o null se la geometria in ingresso non \u00e8 un poligono o una raccolta.
Sintassi:
Argomenti:
Esempi:
num_rings(geom_from_wkt('POLYGON((-1 -1, 4 0, 4 2, 0 2, -1 -1),(-0.1 -0.1, 0.4 0, 0.4 0.2, 0 0.2, -0.1 -0.1))')) \u2192 2\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#offset_curve","title":"offset_curve","text":"Restituisce una geometria formata facendo l'offset di una geometria di tipo linestring a lato. Le distanze sono espresse nel SR di tale geometria.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
offset_curve($geometry, 10.5) \u2192 linea scostata a sinistra di 10.5 unit\u00e0\noffset_curve($geometry, -10.5) \u2192 linea scostata a destra di 10.5 unit\u00e0\noffset_curve($geometry, 10.5, segments=16, join=1) \u2192 linea scostata a sinistra di 10.5 unit\u00e0, usando pi\u00f9 segmenti per risultare in una curva pi\u00f9 morbida\noffset_curve($geometry, 10.5, join=3) \u2192 linea scostata a sinistra di 10.5 unit\u00e0, usando un'unione smussata\n
Osservazioni:
La linea \u00e8 scostata a sinistra o destra rispetto al verso della linea:\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#order_parts","title":"order_parts","text":"Ordina le parti di una MultiGeometria secondo un dato criterio
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
order_parts(geom_from_wkt('MultiPolygon (((1 1, 5 1, 5 5, 1 5, 1 1)),((1 1, 9 1, 9 9, 1 9, 1 1)))'), 'area($geometry)', False) \u2192 MultiPolygon (((1 1, 9 1, 9 9, 1 9, 1 1)),((1 1, 5 1, 5 5, 1 5, 1 1)))\norder_parts(geom_from_wkt('LineString(1 2, 3 2, 4 3)'), '1', True) \u2192 LineString(1 2, 3 2, 4 3)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#oriented_bbox","title":"oriented_bbox","text":"Restituisce una geometria che rappresenta il perimetro di delimitazione minimo orientato di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(oriented_bbox(geom_from_wkt('MULTIPOINT(1 2, 3 4, 3 2)'))) \u2192 'Polygon ((1 2, 2 1, 4 3, 3 4, 1 2))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlaps","title":"overlaps","text":"Controlla qualora una geometria si sovrapponga ad un'altra. Restituisce true (1) se le geometrie condividono aree, ma non sono completamente contenute una nell'altra.
Sintassi:
Argomenti:
Esempi:
overlaps( geom_from_wkt( 'LINESTRING(3 5, 4 4, 5 5, 5 3)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 1\noverlaps( geom_from_wkt( 'LINESTRING(0 0, 1 1)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 0\n
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
overlaps(geometry(get_feature( 'cerchio','id','1')), $geometry)\n
dove:
geometry(get_feature('cerchio','id','1'))
$geometry
seleziono tutti i comuni overlaps
(sovrapposti) al cerchio in figura.
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli sovrapposti con il cerchio).
NOT overlaps(geometry(get_feature('cerchio','id','1')),$geometry)
Restituisce se l'elemento corrente contiene spazialmente almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target contenuti nell'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Contains\" sottostante, come descritto nella funzione PostGIS ST_CONTAINS.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_contains('regions') \u2192 true se l'elemento corrente contiene spazialmente una regione\noverlay_contains('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente contiene spazialmente una regione con una popolazione maggiore di 10000\noverlay_contains('regions', name) \u2192 un array di nomi, per le regioni contenute nell'elemento corrente\narray_to_string(overlay_contains('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni contenute nell'elemento corrente\noverlay_contains('regions', name)[0] \u2192 una stringa con il nome della regione contenuta nell'elemento corrente\narray_sort(overlay_contains(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni contenute nell'elemento corrente e con una popolazione superiore a 10000\noverlay_contains(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni contenute nell'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_crosses","title":"overlay_crosses","text":"Restituisce se l'elemento corrente attraversa spazialmente almeno un elemento di un layer target o un array di risultati basati su espressioni per gli elementi nel layer target attraversati dall'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Crosses\" sottostante, come descritto nella funzione PostGIS ST_Crosses.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_crosses('regions') \u2192 true se l'elemento corrente attraversa spazialmente una regione\noverlay_crosses('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente attraversa spazialmente una regione con una popolazione maggiore di 10000\noverlay_crosses('regions', name) \u2192 un array di nomi, per le regioni attraversate dall'elemento corrente\narray_to_string(overlay_crosses('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni attraversate dall'elemento corrente\noverlay_crosses('regions', name)[0] \u2192 una stringa con il nome della prima regioni attraversata dall'elemento corrente\narray_sort(overlay_crosses(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni attraversate dall'elemento corrente e con una popolazione superiore a 10000\noverlay_crosses(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni attraversate dall'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_disjoint","title":"overlay_disjoint","text":"Restituisce se l'elemento corrente \u00e8 spazialmente disgiunto da tutti gli elementi di un layer target, o un array di risultati basati su espressione per gli elementi nel layer target che sono disgiunti dall'elemento corrente. Ulteriori informazioni sul sottostante predicato GEOS \"Disjoint\", come descritto nella funzione PostGIS ST_Disjoint.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_disjoint('regions') \u2192 true se l'elemento corrente \u00e8 spazialmente disgiunto da tutte le regioni\noverlay_disjoint('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente \u00e8 spazialmente disgiunto da tutte le regioni con una popolazione maggiore di 10000\noverlay_disjoint('regions', name) \u2192 un array di nomi, per le regioni spazialmente disgiunte dall'elemento corrente\narray_to_string(overlay_disjoint('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni spazialmente disgiunte dall'elemento corrente\noverlay_disjoint('regions', name)[0] \u2192 una stringa con il nome della regione spazialmente disgiunte dall'elemento corrente\narray_sort(overlay_disjoint(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni spazialmente disgiunte dall'elemento corrente e con una popolazione superiore a 10000\noverlay_disjoint(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni spazialmente disgiunte dall'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_equals","title":"overlay_equals","text":"Restituisce se l'elemento corrente \u00e8 spazialmente uguale ad almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target che sono spazialmente uguali all'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Equals\" sottostante, come descritto nella funzione PostGIS ST_Equals.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_equals('regions') \u2192 true se l'elemento corrente \u00e8 spazialmente uguale ad una regione\noverlay_equals('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente \u00e8 spazialmente uguale ad una regione con una popolazione maggiore di 10000\noverlay_equals('regions', name) \u2192 un array di nomi, per le regioni spazialmente uguali all'elemento corrente\narray_to_string(overlay_equals('regions', name)) \u2192 una stringa come lista di nomi separati da virgole, per le regioni spazialmente uguali all'elemento corrente\noverlay_equals('regions', name)[0] \u2192 una stringa con il nome della regione spazialmente uguale all'elemento corrente\narray_sort(overlay_equals(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni spazialmente uguali all'elemento corrente e con una popolazione superiore a 10000\noverlay_equals(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni spazialmente uguali all'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_intersects","title":"overlay_intersects","text":"aggiornato a QGIS 3.24 Tisler
Restituisce se l'elemento corrente interseca spazialmente almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target intersecati dall'elemento corrente. Ulteriori informazioni sul predicato GEOS \"Intersects\" sottostante, come descritto nella funzione PostGIS ST_INTERSECTS.
Sintassi <= QGIS 3.22.x
Sintassi >= QGIS 3.24.x
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_intersects('regions') \u2192 vero se l'elemento corrente interseca spazialmente una regione\noverlay_intersects('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente interseca spazialmente una regione con una popolazione maggiore di 10000\noverlay_intersects('regions', name) \u2192 un array di nomi, per le regioni intersecate dall'elemento corrente\narray_to_string(overlay_intersects('regions', name)) \u2192 una stringa come una lista di nomi separata da virgola, per le regioni intersecate dall'elemento corrente\narray_sort(overlay_intersects(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni intersecate dall'elemento corrente e con una popolazione maggiore di 10000\noverlay_intersects(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni intersecate dall'elemento corrente\noverlay_intersects(layer:='regions', min_overlap:=0.54) \u2192 true se l'elemento corrente interseca spazialmente una regione e l'area di intersezione (di almeno una delle parti in caso di multipoligoni) \u00e8 maggiore o uguale a 0.54\noverlay_intersects(layer:='regions', min_inscribed_circle_radius:=0.54) \u2192 true se l'elemento corrente interseca spazialmente una regione e il raggio massimo del cerchio inscritto nell'area di intersezione (di almeno una delle parti in caso di parti multiple) \u00e8 maggiore o uguale a 0.54\noverlay_intersects(layer:='regions', expression:= geom_to_wkt($geometry), return_details:=true) \u2192 un array di mappe contenente 'id', 'result', 'overlap' e 'radius'\noverlay_intersects(layer:='regions', expression:= geom_to_wkt($geometry), sort_by_intersection_size:='des') \u2192 un array di geometrie (in WKT) ordinate per il valore di sovrapposizione in ordine decrescente\n
Esempio pratico:
Assegnare l'ID del poligono sovrapposto con maggiore area intersecata:
overlay_intersects(\n 'Reg01012022_G_Wgs84',\n \"cod_reg\",\n sort_by_intersection_size:='des')[0] -- sort_by_intersection_size Nuovo parametro\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_nearest","title":"overlay_nearest","text":"Restituisce se l'elemento corrente ha elementi da un layer target entro una data distanza o un array di risultati basati su espressioni per gli elementi nel layer di target entro una distanza dall'elemento corrente. Nota: questa funzione pu\u00f2 essere lenta e consuma molta memoria per layer con molte feature.
Sintassi:
NB: per QGIS >= 3.22.x, il parametro filter
\u00e8 dimanico, vedi qui.
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_nearest('airports') \u2192 true se il layer \"airports\" ha almeno un elemento\noverlay_nearest('airports', max_distance:= 5000) \u2192 vero se \u00e8 presente un aeroporto entro una distanza di 5000 unit\u00e0 dall'elemento corrente (misurata in maniera cartesiana nel sistema di riferimento dal layer sorgente)\noverlay_nearest('airports', name) \u2192 il nome dell'aereoporto pi\u00f9 vicino all'elemento corrente, come array\narray_to_string(overlay_nearest('airports', name)) \u2192 il nome dell'aereoporto pi\u00f9 vicino all'elemento corrente, come stringa\noverlay_nearest(layer:='airports', expression:= name, max_distance:= 5000) \u2192 il nome dell'aereoporto pi\u00f9 vicino entro una distanza di 5000 unit\u00e0 dall'elemento corrente, come array\noverlay_nearest(layer:='airports', expression:=\"name\", filter:= \"Use\"='Civilian', limit:=3) \u2192 un array di nomi, per un massimo di tre aeroeporti civili pi\u00f9 vicini ordinati per distanza\noverlay_nearest(layer:='airports', expression:=\"name\", limit:= -1, max_distance:= 5000) \u2192 un array di nomi, per tutti gli aeroporti entro una distanza di 5000 unit\u00e0 dall'elemento corrente, ordinato per distanza.\n
Esempio 45
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
Non documentato: La funzione, usata su uno stesso layer, esclude i casi banali, ovvero: se dovessi ricercare il punto pi\u00f9 vicino appartenente allo stesso layer. Chiaramente il punto pi\u00f9 vicino appartenente allo stesso layer \u00e8 il punto stesso, ma il codice \u00e8 fatto in modo che in questo caso venga escluso il punto stesso (che sarebbe un risultato banale) e cerca il secondo punto pi\u00f9 vicino nello stesso layer.
overlay_nearest(@layer_name, $geometry)\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_touches","title":"overlay_touches","text":"Restituisce se l'elemento corrente tocca spazialmente almeno un elemento da un layer target o un array di risultati basati su espressioni per gli elementi nel layer target toccati dall'elemento corrente. Leggi ulteriori informazioni sul predicato GEOS \"Touches\", come descritto nella funzione PostGIS ST_TOUCHES.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_touches('regions') \u2192 true se l'elemento corrente tocca spazialmente una regione\noverlay_touches('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente tocca spazialmente una regione con una popolazione maggiore di 10000\noverlay_touches('regions', name) \u2192 un array di nomi, per le regioni tocacte dall'elemento corrente\nstring_to_array(overlay_touches('regions', name)) \u2192 una stringa come lista di nomi separati da virgole, per le regioni toccate dall'elemento corrente\noverlay_touches('regions', name)[0] \u2192 una stringa con il nome della regione toccata dall'elemento corrente\narray_sort(overlay_touches(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni toccate dall'elemento attuale e con una popolazione superiore a 10000\noverlay_touches(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni toccate dall'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#overlay_within","title":"overlay_within","text":"Restituisce se l'elemento corrente \u00e8 spazialmente all'interno di almeno un elemento da layer destinazione, o un array di risultati basati su espressione per gli elementi nel layer destinazione che contengono l'elemento corrente. Ulteriori informazioni sul sottostante predicato GEOS \"Within\", come descritto nella funzione PostGIS ST_WITHIN.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
[ ] indica componenti opzionali
Esempi:
overlay_within('regions') \u2192 true se l'elemento corrente \u00e8 spazialmente all'interno di una regione\noverlay_within('regions', filter:= population > 10000) \u2192 vero se l'elemento corrente \u00e8 spazialmente all'interno di una regione con una popolazione maggiore di 10000\noverlay_within('regions', name) \u2192 un array di nomi, per le regioni contenenti l'elemento corrente\narray_to_string(overlay_within('regions', name)) \u2192 una stringa come lista di nomi separati da virgole, per le regioni che contengono l'elemento corrente\noverlay_within('regions', name)[0] \u2192 una stringa con il nome della regione che contengono l'elemento corrente\narray_sort(overlay_within(layer:='regions', expression:=\"name\", filter:= population > 10000)) \u2192 un array ordinato di nomi, per le regioni contenenti l'elemento corrente e con una popolazione superiore a 10000\noverlay_within(layer:='regions', expression:= geom_to_wkt($geometry), limit:=2) \u2192 un array di geometrie (in WKT), per un massimo di due regioni contenenti l'elemento corrente\n
Nota bene:
La funzione restituisce un output corretto anche se i due layer hanno EPSG differenti!
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#perimeter_1","title":"perimeter","text":"Calcola il perimetro di un oggetto a geometria poligonale. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura della lunghezza restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $perimeter, la quale esegue calcoli ellissoidali basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di misura della distanza.
Sintassi:
Argomenti:
Esempi:
perimeter(geom_from_wkt('POLYGON((0 0, 4 0, 4 2, 0 2, 0 0))')) \u2192 12.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#point_n","title":"point_n","text":"Restituisce un nodo specifico da una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(point_n(geom_from_wkt('POLYGON((0 0, 4 0, 4 2, 0 2, 0 0))'),2)) \u2192 'Point (4 0)'\n
--
Esempi correlati:
esempio nro 4 - Come aggiungere la quota Z alla tabella attributi
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#point_on_surface","title":"point_on_surface","text":"Restituisce un punto garantendo che sia giacente sulla superficie della geometria.
Sintassi:
Argomenti:
Esempi:
point_on_surface($geometry) \u2192 una geometria punto\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#pole_of_inaccessibility","title":"pole_of_inaccessibility","text":"Calcola il polo dell'inaccessibilit\u00e0 approssimato per una superficie, che \u00e8 il punto interno pi\u00f9 distante dal contorno della superficie. Questa funzione usa l'algoritmo 'polylabel' (Vladimir Agafonkin, 2016), che \u00e8 un approccio iterativo garantito per trovare il vero polo dell'inaccessibilit\u00e0 all'interno di una tolleranza specificata. Tolleranze pi\u00f9 precise richiedono pi\u00f9 iterazioni e sar\u00e0 necessario pi\u00f9 tempo per il calcolo.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(pole_of_inaccessibility( geom_from_wkt('POLYGON((0 1,0 9,3 10,3 3, 10 3, 10 1, 0 1))'), 0.1)) \u2192 'Point(1.55, 1.55)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#project","title":"project","text":"Restituisce un punto proiettato da un punto di partenza usando una distanza e una direzione di immersione (azimut) in radianti.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
project(make_point(1, 2), 3, radians(270)) \u2192 Point(-2, 2)\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#relate","title":"relate","text":"Testa la rappresentazione Dimensional Extended 9 Intersection Model (DE-9IM) della relazione tra due geometrie.
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-di-relazione","title":"Variabile di relazione","text":"Restituisce la rappresentazione Dimensional Extended 9 Intersection Model (DE-9IM) della relazione tra due geometrie.
Sintassi:
Argomenti:
Esempi:
relate( geom_from_wkt( 'LINESTRING(40 40,120 120)' ), geom_from_wkt( 'LINESTRING(40 40,60 120)' ) ) \u2192 'FF1F00102'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#variabile-di-corrispondenza-del-modello","title":"Variabile di corrispondenza del modello","text":"Testa se la relazione DE-9IM tra due geometrie corrisponde a un pattern specificato: restituisc true Vero, false Falso.
Sintassi:
Argomenti:
Esempi:
relate( geom_from_wkt( 'LINESTRING(40 40,120 120)' ), geom_from_wkt( 'LINESTRING(40 40,60 120)' ), '**1F001**' ) \u2192 Vero\n
Link utili:
Inverte il verso di una linestring invertendo l'ordine dei sui vertici.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(reverse(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)'))) \u2192 'LINESTRING(2 2, 1 1, 0 0)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#rotate","title":"rotate","text":"Restituisce una versione ruotata di una geometria. I calcoli si trovano nel sistema di riferimento spaziale di questa geometria.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
rotate($geometry, 45, make_point(4, 5)) \u2192 la geometria ruotava di 45 gradi in senso orario attorno al punto (4, 5)\nrotate($geometry, 45) \u2192 la geometria ruotava di 45 gradi in senso orario attorno al centro del riquadro di delimitazione\n
>=QGIS 3.24
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#roundness","title":"roundness","text":"Calcola quanto una forma di poligono \u00e8 quasi un cerchio. La funzione restituisce 1 quando la forma del poligono \u00e8 un cerchio perfetto e 0 quando \u00e8 completamente piatta.
La definizione usata: Roundness = (4 * pi * Area) / Perimeter^2
Sintassi:
Argomenti:
Esempi:
round(roundness(geom_from_wkt('POLYGON(( 0 0, 0 1, 1 1, 1 0, 0 0))')), 3) \u2192 0.785\nround(roundness(geom_from_wkt('POLYGON(( 0 0, 0 0.1, 1 0.1, 1 0, 0 0))')), 3) \u2192 0.260\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#scale","title":"scale","text":"Restituisce una versione scalata di una geometria. I calcoli sono nel sistema di riferimento spaziale di questa geometria.
Sintassi:
Argomenti:
Esempi:
scale($geometry, 2, 0.5, make_point(4, 5)) \u2192 geometria scalata di due volte in orizzontale e dimezzata in verticale, intorno al punto (4, 5)\nscale($geometry, 2, 0.5) \u2192 geometria scalata di due volte in orizzontale e dimezzata in verticale, intorno al centro del suo riquadro di delimitazione\n
geometria scalata del 75% (in x e y) rispetto il centroide della stessa geometria di partenza:
scale($geometry,.75,.75, centroid($geometry))\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#segments_to_lines","title":"segments_to_lines","text":"Restituisce una geometria multi linea consistente in una linea per ogni segmento nella geometria in ingresso.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(segments_to_lines(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2)'))) \u2192 'MultiLineString ((0 0, 1 1),(1 1, 2 2))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#shared_paths","title":"shared_paths","text":"Restituisce un insieme contenente i percorsi condivisi dalle due geometrie in ingresso. Quelli che vanno nella stessa direzione sono nel primo elemento della collezione, quelli che vanno nella direzione opposta sono nel secondo elemento. I percorsi di per se stessi sono dati nella direzione della prima geometria.
Sintassi:
Argomenti:
Esempi:
- geom_to_wkt(shared_paths(geom_from_wkt('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),(51 150,101 150,76 175,51 150)))'),geom_from_wkt('LINESTRING(151 100,126 156.25,126 125,90 161, 76 175)'))) \u2192 'GeometryCollection (MultiLineString ((126 156.25, 126 125),(101 150, 90 161),(90 161, 76 175)),MultiLineString EMPTY)'\n- geom_to_wkt(shared_paths(geom_from_wkt('LINESTRING(76 175,90 161,126 125,126 156.25,151 100)'),geom_from_wkt('MULTILINESTRING((26 125,26 200,126 200,126 125,26 125),(51 150,101 150,76 175,51 150))'))) \u2192 'GeometryCollection (MultiLineString EMPTY,MultiLineString ((76 175, 90 161),(90 161, 101 150),(126 125, 126 156.25)))'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#shortest_line","title":"shortest_line","text":"Restituisce la linea pi\u00f9 corta che unisce la geometria 1 alla geometria 2. La linea risultante partir\u00e0 dalla geometria 1 e finir\u00e0 nella geometria 2.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(shortest_line(geom_from_wkt('LINESTRING (20 80, 98 190, 110 180, 50 75 )'),geom_from_wkt('POINT(100 100)'))) \u2192 LineString(73.0769 115.384, 100 100)\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#simplify","title":"simplify","text":"Semplifica una geometria rimuovendo nodi usando una soglia basata sulla distanza (cio\u00e8, l'algoritmo Douglas Peucker). L'algoritmo mantiene grandi deviazioni nelle geometrie e riduce il numero di vertici in segmenti quasi rettilinei.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(simplify(geometry:=geom_from_wkt('LineString(0 0, 5 0.1, 10 0)'),tolerance:=5)) \u2192 'LineString(0 0, 10 0)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#simplify_vw","title":"simplify_vw","text":"Semplifica una geometria rimuovendo nodi usando una soglia basata sull'area (cio\u00e8, l'algoritmo Visvalingam-Whyatt ). L'algoritmo rimuove i vertici che creano piccole aree nelle geometrie, ad esempio picchi stretti o segmenti quasi rettilinei.
Sintassi:
Argomenti:
Esempi:
geom_from_wkt('LineString(0 0, 5 0, 5.01 10, 5.02 0, 10 0)'),tolerance:=5)) \u2192 'LineString(0 0, 10 0)'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#single_sided_buffer","title":"single_sided_buffer","text":"Restituisce una geometria formata facendo un buffer solo da un lato di una geometria di tipo linestring. Le distanze sono espresse nel SR di tale geometria.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
single_sided_buffer($geometry, 10.5) \u2192 linea bufferizzata a sinistra di 10.5 unit\u00e0\nsingle_sided_buffer($geometry, -10.5) \u2192 linea bufferizzata a destra di 10.5 unit\u00e0\nsingle_sided_buffer($geometry, 10.5, segments:=16, join:=1) \u2192 linea bufferizzata a sinistra di 10.5 unit\u00e0, usando pi\u00f9 segmenti per risultare in un buffer pi\u00f9 morbido\nsingle_sided_buffer($geometry, 10.5, join:=3) \u2192 linea bufferizzata a sinistra di 10.5 unit\u00e0, usando un'unione smussata\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#sinuosity","title":"sinuosity","text":"Restituisce la sinuosit\u00e0 di una curva che \u00e8 il rapporto tra la lunghezza della curva e la distanza diretta (2D) tra i suoi punti iniziali e finali.
Sintassi
Argomenti
Esempi
round(sinuosity(geom_from_wkt('LINESTRING(2 0, 2 2, 3 2, 3 3)')), 3) \u2192 1.265\nsinuosity(geom_from_wkt('LINESTRING( 3 1, 5 1)')) \u2192 1.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#smooth","title":"smooth","text":"Smussa una geometria con l'aggiunta di ulteriori nodi che arrotondano gli angoli nella geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(smooth(geometry:=geom_from_wkt('LineString(0 0, 5 0, 5 5)'),iterations:=1,offset:=0.2,min_length:=-1,max_angle:=180)) \u2192 'LineString (0 0, 4 0, 5 1, 5 5)'\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#square_wave","title":"square_wave","text":"Costruisce onde quadrate/rettangolari lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
square_wave(geom_from_wkt('LineString(0 0, 10 0)'), 3, 1) \u2192 Onde quadrate con lunghezza d'onda 3 e ampiezza 1 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#square_wave_randomized","title":"square_wave_randomized","text":"Costruisce onde quadrate/rettangolari casuali lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
square_wave_randomized(geom_from_wkt('LineString(0 0, 10 0)'), 2, 3, 0.1, 0.2) \u2192 Onde quadrate di dimensioni casuali con lunghezze d'onda tra 2 e 3 e ampiezze tra 0,1 e 0,2 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#start_point","title":"start_point","text":"Restituisce il primo nodo di una geometria.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt(start_point(geom_from_wkt('LINESTRING(4 0, 4 2, 0 2)'))) \u2192 'Point (4 0)'\n
Start_point di geometria poligonale:
Start_point di geometria lineare:
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#straight_distance_2d","title":"straight_distance_2d","text":"Restituisce la distanza diretta/euclidea tra il primo e l'ultimo vertice di una geometria. La geometria deve essere una curva (circularstring, linestring).
Sintassi
Argomenti
Esempi
straight_distance_2d(geom_from_wkt('LINESTRING(1 0, 1 1)')) \u2192 1\nround(straight_distance_2d(geom_from_wkt('LINESTRING(1 4, 3 5, 5 0)')), 3) \u2192 5.657\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#sym_difference","title":"sym_difference","text":"Restituisce una geometria che rappresenta la porzione di due geometrie che non si interseca.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( sym_difference( geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ), geom_from_wkt( 'LINESTRING(3 3, 8 8)' ) ) ) \u2192 LINESTRING(5 5, 8 8)\n
Espressione
-- differenza simmetrica tra le due linee\n sym_difference( \n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0)))),\n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry))\n )\n -- NB: -- l' ordine delle geometrie \u00e8 indifferente\n
Prova tu
Dati e progetto qgz
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#tapered_buffer","title":"tapered_buffer","text":"Crea un buffer lungo una geometria della linea in cui il diametro del buffer varia in modo uniforme sulla lunghezza della linea.
Sintassi:
[ ] contrassegna componenti opzionali
Argomenti:
Esempi:
tapered_buffer(geometry:=geom_from_wkt('LINESTRING(1 2, 4 2)'),start_width:=1,end_width:=2,segments:=8) \u2192 Un buffer rastremato che inizia con un diametro di 1 e termina con un diametro di 2 lungo la geometria della linea.\n
--
QGIS - feature
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#touches","title":"touches","text":"Verifica se una geometria tocca un'altra. Restituisce vero (1) se le geometrie hanno almeno un punto in comune, ma i loro interni non si intersecano.
Sintassi:
Argomenti:
Esempi:
touches( geom_from_wkt( 'LINESTRING(5 3, 4 4)' ), geom_from_wkt( 'LINESTRING(3 3, 4 4, 5 5)' ) ) \u2192 1\ntouches( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'POINT(5 5)' ) ) \u2192 0\n
Nota bene:
--
Osservazioni:
Usando algoritmo Seleziona per espressione
presente in strumenti di processing oppure (Ctrl+F3):
touches(geometry(get_feature( 'province_rt_rt','pk_uid','46')),$geometry)\n
dove:
geometry(get_feature( 'province_rt_rt','pk_uid','52'))
$geometry
seleziono tutti i comuni touches
(toccati) dalla provincia con pk_uid
46 (Siena)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli toccati dalla provincia di Siena).
NOT touches(geometry(get_feature( 'province_rt_rt','pk_uid','52')),$geometry)
Restituisce la geometria trasformata da un SR sorgente ad un SR di destinazione.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( transform( $geometry, 'EPSG:2154', 'EPSG:4326' ) ) \u2192 POINT(0 51)\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#translate","title":"translate","text":"Restituisce una versione traslata di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
translate($geometry, 5, 10) \u2192 una geometria dello stesso tipo come l'originale\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#triangular_wave","title":"triangular_wave","text":"Costruisce onde triangolari lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
triangular_wave(geom_from_wkt('LineString(0 0, 10 0)'), 3, 1) \u2192 Onde triangolari con lunghezza d'onda 3 e ampiezza 1 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#triangular_wave_randomized","title":"triangular_wave_randomized","text":"Costruisce onde triangolari casuali lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
triangular_wave_randomized(geom_from_wkt('LineString(0 0, 10 0)'), 2, 3, 0.1, 0.2) \u2192 Onde triangolari di dimensioni casuali con lunghezze d'onda tra 2 e 3 e ampiezze tra 0,1 e 0,2 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#union","title":"union","text":"Restituisce una geometria che rappresenta l'insieme dei punti dell'unione delle geometrie.
Sintassi:
Argomenti:
Esempi:
geom_to_wkt( union( geom_from_wkt( 'POINT(4 4)' ), geom_from_wkt( 'POINT(5 5)' ) ) ) \u2192 MULTIPOINT(4 4, 5 5)\n
Espressione
-- unione delle due linee\n union( \n make_line( -- linea a\n start_point(geometry(get_feature_by_id('linea_a',0))), \n start_point($geometry),\n end_point(geometry(get_feature_by_id('linea_a',0)))),\n make_line( -- linea b\n start_point($geometry), \n end_point(geometry(get_feature_by_id('linea_a',0))),\n end_point($geometry))\n )\n -- NB: -- l' ordine delle geometrie \u00e8 indifferente\n
Prova tu
Dati e progetto qgz
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#wave","title":"wave","text":"Costruisce onde arrotondate (sinusoidali) lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
wave(geom_from_wkt('LineString(0 0, 10 0)'), 3, 1) \u2192 Onde sinusoidali con lunghezza d'onda 3 e ampiezza 1 lungo la linea\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#wave_randomized","title":"wave_randomized","text":"Costruisce onde curve casuali (sinusoidali) lungo il confine di una geometria.
Sintassi:
Argomenti:
Esempi:
wave_randomized(geom_from_wkt('LineString(0 0, 10 0)'), 2, 3, 0.1, 0.2) \u2192 Onde curve di dimensioni casuali con lunghezze d'onda tra 2 e 3 e ampiezze tra 0,1 e 0,2 lungo la stringa\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#wedge_buffer","title":"wedge_buffer","text":"Restituisce un buffer a forma di cuneo che origina da una geometria del punto.
Sintassi:
[ ] contrassegna componenti opzionali
Argomenti:
Esempi:
wedge_buffer(center:=geom_from_wkt('POINT(1 2)'),azimuth:=90,width:=180,outer_radius:=1) \u2192 Un buffer a forma di cuneo centrato sul punto (1,2), rivolto verso est, con una larghezza di 180 gradi e raggio esterno di 1.\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#within","title":"within","text":"Controlla qualora una geometria sia interna ad un'altra. Restituisce 1 (vero) se la geometria1 \u00e8 completamente contenuta nella_ geometria2_.
Sintassi:
Argomenti:
Esempi:
within( geom_from_wkt( 'POINT( 0.5 0.5)' ), geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0))' ) ) \u2192 1\nwithin( geom_from_wkt( 'POINT( 5 5 )' ), geom_from_wkt( 'POLYGON((0 0, 0 1, 1 1, 1 0, 0 0 ))' ) ) \u2192 0\n
Osservazioni:
Usando algoritmo `Seleziona per espressione` presente in strumenti di processing oppure ![icona](https://docs.qgis.org/2.18/en/_images/mIconExpressionSelect.png) (Ctrl+F3):\n
- within($geometry,geometry(get_feature( 'province_rt_rt','pk_uid','53')))
dove:
$geometry
geometry(get_feature( 'province_rt_rt','pk_uid','53'))
seleziono tutti i comuni within
(contenuti) nella provincia con pk_uid
53 (Grosseto)
PS:** potrei anche negare (NOT
) l'espressione per selezionare il complementare (tutti i comuni tranne quelli contenuti nella provincia di Grosseto).
NOT within($geometry,geometry(get_feature( 'province_rt_rt','pk_uid','53')))
Altro esempio con condizione sulle etichette
Espressione
CASE WHEN within( $geometry,\n geometry(get_feature('poligono','id',1))) = 1\n THEN 'INTERNO'\n ELSE 'NON INTERNO'\n END\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_1","title":"x","text":"Restituisce la minima coordinata x di una geometria punto, o la coordinata x del centroide di una geometria non puntuale.
Sintassi:
Argomenti:
Esempi:
x( geom_from_wkt( 'POINT(2 5)' ) ) \u2192 2\nx( $geometry ) \u2192 coordinata x del centroide dell'elemento corrente\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_max","title":"x_max","text":"Restituisce la coordinata x massima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
x_max( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 4\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#x_min","title":"x_min","text":"Restituisce la coordinata x minima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
x_min( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 2\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_1","title":"y","text":"Restituisce la coordinata y minima di una geometria puntuale, o la coordinata y del centroide di una geometria non puntuale.
Sintassi:
Argomenti:
Esempi:
y( geom_from_wkt( 'POINT(2 5)' ) ) \u2192 5\ny( $geometry ) \u2192 coordinata y del centroide dell'elemento corrente\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_max","title":"y_max","text":"Restituisce la coordinata y massima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
y_max( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 8\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#y_min","title":"y_min","text":"Restituisce la coordinata y minima di una geometria. I calcoli sono effettuati nel sistema di riferimento spaziale di tale geometria.
Sintassi:
Argomenti:
Esempi:
y_min( geom_from_wkt( 'LINESTRING(2 5, 3 6, 4 8)') ) \u2192 5\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z","title":"z","text":"Restituisce la coordinata z di una geometria puntuale.
Sintassi:
Argomenti:
Esempi:
z( geom_from_wkt( 'POINTZ(2 5 7)' ) ) \u2192 7\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_at","title":"z_at","text":"(>= QGIS 3.30)
Recupera una coordinata z della geometria, o un NULL se la geometria non ha valore z.
Sintassi:
Argomenti:
Esempi:
z_at(geom_from_wkt('LineStringZ(0 0 0, 10 10 5, 10 10 0)'), 1) \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_1","title":"$z","text":"Restituisce il valore z del punto corrente se \u00e8 3D. Se la feature \u00e8 una feature multipunto, verr\u00e0 restituito il valore z del primo punto.
Sintassi
Esempi
$z \u2192 123\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_max","title":"z_max","text":"Restituisce la coordinata z massima di una geometria.
Sintassi:
Argomenti:
Esempi:
z_max( geom_from_wkt( 'POINT ( 0 0 1 )' ) ) \u2192 1\nz_max( geom_from_wkt( 'MULTIPOINT ( 0 0 1 , 1 1 3 )' ) ) \u2192 3\nz_max( make_line( make_point( 0,0,0 ), make_point( -1,-1,-2 ) ) ) \u2192 0\nz_max( geom_from_wkt( 'LINESTRING( 0 0 0, 1 0 2, 1 1 -1 )' ) ) \u2192 2\nz_max( geom_from_wkt( 'POINT ( 0 0 )' ) ) \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/geometria/geometria_unico/#z_min","title":"z_min","text":"Restituisce la coordinata z minima di una geometria.
Sintassi:
Argomenti:
Esempi:
z_min( geom_from_wkt( 'POINT ( 0 0 1 )' ) ) \u2192 1\nz_min( geom_from_wkt( 'MULTIPOINT ( 0 0 1 , 1 1 3 )' ) ) \u2192 1\nz_min( make_line( make_point( 0,0,0 ), make_point( -1,-1,-2 ) ) ) \u2192 -2\nz_min( geom_from_wkt( 'LINESTRING( 0 0 0, 1 0 2, 1 1 -1 )' ) ) \u2192 -1\nz_min( geom_from_wkt( 'POINT ( 0 0 )' ) ) \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/lat_lon_tools/lat_lon_tools_unico/","title":"Lat Lon Tools","text":"Plugin Lat Lon Tools:
https://plugins.qgis.org/plugins/latlontools/
"},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/","title":"Gruppo Layer Mappa","text":"Abstract
Contiene una lista dei layer della mappa che sono disponibili nel progetto corrente. A partire dalla versione QGIS 3.241, sar\u00e0 possibile visualizzare i campi e valori dei layer in lista
","tags":["gruppo"]},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/#decode_uri","title":"decode_uri","text":"Prende un livello e decodifica l'uri del fornitore di dati sottostante, i dati sonodisponibili dipendono dal dataprovider.
Sintassi:
[ ] contrassegna componenti opzionali
Argomento:
Esempi:
decode_uri(@layer) \u2192 {'layerId': '0', 'layerName': '', 'path': '/home/qgis/shapefile.shp'}\ndecode_uri(@layer) \u2192 {'layerId': NULL, 'layerName': 'layer', 'path': '/home/qgis/geopackage.gpkg'}\ndecode_uri(@layer, 'path') \u2192 'C:\\my_data\\qgis\\shape.shp'\n
","tags":["gruppo"]},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/#layer_property","title":"layer_property","text":"Restituisce una propriet\u00e0 del layer corrispondente o un valore dei metadati.
Sintassi:
Argomento:
property una stringa corrispondente alla propriet\u00e0 da restituire. Le opzioni valide sono:
Esempi:
layer_property('streets','title') \u2192 'Basemap Streets'\nlayer_property('airports','feature_count') \u2192 120\nlayer_property('landsat','crs') \u2192 'EPSG:4326'\n
","tags":["gruppo"]},{"location":"gr_funzioni/layer_mappa/layer_mappa_unico/#load_layer","title":"load_layer","text":"(solo per Processing >= QGIS 3.30)
Carica un livello in base all'URI di origine e al nome del provider.
Sintassi:
[ ] contrassegna componenti opzionali
Argomento:
Esempi:
layer_property(load_layer('c:/data/roads.shp', 'ogr'), 'feature_count') \u2192 conteggio delle caratteristiche dal layer vettoriale c:/data/roads.shp\n
https://github.com/qgis/QGIS/pull/46505 \u21a9
Abstract
Questo gruppo contiene funzioni per manipolare le propriet\u00e0 degli oggetti del layout di stampa.
","tags":["gruppo"]},{"location":"gr_funzioni/layout/layout_unico/#item_variables","title":"item_variables","text":"Restituisce una mappa delle variabili da un oggetto del layout dentro il layout di stampa.
Sintassi:
Argomenti:
Esempi:
map_get( item_variables('Map 0'), 'map_scale') \u2192 scala dell'oggetto 'Map 0' nel layout di stampa corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/layout/layout_unico/#map_credits","title":"map_credits","text":"Restituisce un elenco di stringhe di credito (diritti di utilizzo) per i layer visualizzati in un oggetto della mappa di layout.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
array_to_string( map_credits( 'Main Map' ) ) \u2192 lista separata da virgola di crediti layer per i layer mostrati nell'oggetto di layout 'Mappa principale', ad esempio 'CC-BY-NC, CC-BY-SA'\n\narray_to_string( map_credits( 'Main Map', include_layer_names := true, layer_name_separator := ': ' ) ) \u2192 lista separata da virgola di nomi di layer e relativi crediti per i layer mostrati nell'oggetto di layout 'Mappa principale', ad es 'Linee ferroviarie: CC-BY-NC, mappa di base: CC-BY-SA'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/","title":"Gruppo Maps","text":"Abstract
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.
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#from_json","title":"from_json","text":"Carica una stringa formattata JSON
Sintassi:
from_json(string)
Argomenti:
Esempi:
from_json('{\"qgis\":\"rocks\"}') \u2192 { \"qgis\" : \"rocks\" }\nfrom_json('[1,2,3]') \u2192 [1,2,3]\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#hstore_to_map","title":"hstore_to_map","text":"Crea una mappa da una stringa formattata in hstore
Sintassi:
Argomenti:
Esempi:
hstore_to_map('qgis=>rocks') \u2192 { \"qgis\" : \"rocks\" }\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#json_to_map","title":"json_to_map","text":"Crea una mappa da una stringa formattata con json
Sintassi:
Argomenti:
Esempi:
json_to_map('{\"qgis\":\"rocks\"}') \u2192 { \"qgis\" : \"rocks\" }`\n
nota bene:
Funzione eliminata a partire da QGIS 3.18
https://github.com/qgis/QGIS/pull/42179
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map","title":"map","text":"Restituisce una mappa con tutte le chiavi ed i valori passati come coppie di parametri.
Sintassi:
map(key1, value1, key2, value2 , \u2026_)
Argomenti:
Esempi:
map('1','one','2', 'two') \u2192 map: 1: 'one', 2: 'two'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#_1","title":"Maps","text":"Altri esempi:
Definisco una map con:
Restituisce tutte le chiavi di una mappa come un array.
Sintassi:
Argomenti:
Esempi:
map_akeys(map('1','one','2','two')) \u2192 array: '1', '2'\n
Altri esempi:
map_akeys( \n map('Area_Ha',$area/10000,'Perimetro_km',$perimeter/1000)) \u2192 ['Area_Ha','Perimetro_km']\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#compositore-di-stampe","title":"Compositore di stampe","text":"akeys
utilizzabile in ambito compositore stampe per conoscere tutte le variabili disponibili per ogni Mappa
inserita:
wordwrap( array_to_string( map_akeys( item_variables( 'Mappa 1') ) ),1,',')\n
risultato della espressione:
_project_transform_context\nitem_id\nitem_uuid\nlayer_ids\nlayers\nlayout_dpi\nlayout_name\nlayout_numpages\nlayout_page\nlayout_pageheight\nlayout_pageoffsets\nlayout_pagewidth\nlogo_osgeo4w\nmap_crs\nmap_crs_acronym\nmap_crs_definition\nmap_crs_description\nmap_crs_ellipsoid\nmap_crs_proj4\nmap_crs_projection\nmap_crs_wkt\nmap_end_time\nmap_extent\nmap_extent_center\nmap_extent_height\nmap_extent_width\nmap_id\nmap_interval\nmap_layer_ids\nmap_layers\nmap_rotation\nmap_scale\nmap_start_time\nmap_units\nproject_abstract\nproject_area_units\nproject_author\nproject_basename\nproject_creation_date\nproject_crs\nproject_crs_acronym\nproject_crs_definition\nproject_crs_description\nproject_crs_ellipsoid\nproject_crs_proj4\nproject_crs_wkt\nproject_distance_units\nproject_ellipsoid\nproject_filename\nproject_folder\nproject_home\nproject_identifier\nproject_keywords\nproject_last_saved\nproject_path\nproject_title\nproject_units\nqgis_locale\nqgis_os_name\nqgis_platform\nqgis_release_name\nqgis_short_version\nqgis_version\nqgis_version_no\nuser_account_name\nuser_full_name\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_avals","title":"map_avals","text":"Restituisce tutti valori di una mappa come un array.
Sintassi:
Argomenti:
Esempi:
map_avals(map('1','one','2','two')) \u2192 array: 'one', 'two'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_concat","title":"map_concat","text":"Restituisce una mappa con tutte le entit\u00e0 della mappe fornite. Se due mappe contengono la stessa chiave, viene restituito il valore della seconda mappa.
Sintassi:
map_concat(__map1, _map2, \u2026_)
Argomenti:
Esempi:
map_concat(map('1','one', '2','overridden'),map('2','two', '3','three')) \u2192 map: 1: 'one, 2: 'two', 3: 'three'\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_delete","title":"map_delete","text":"Restituisce una mappa con il valore della corrispondente chiave passata rimosso.
Sintassi:
map_delete(map, key)
Argomenti:
Esempi:
map_delete(map('1','one','2','two'),'2') \u2192 map: 1: 'one'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_exist","title":"map_exist","text":"Restituisce vero se la chiave passata esiste in mappa.
Sintassi:
map_exist(map, key)
Argomenti:
Esempi:
map_exist(map('1','one','2','two'),'3') \u2192 falso\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_get","title":"map_get","text":"Restituisce il valore di una mappa, passando la sua chiave.
Sintassi:
map_get(map, key)
Argomenti:
Esempi:
map_get(map('1','one','2','two'),'2') \u2192 'two'\n
Altri esempi:
map_get(\nmap_concat(map('Area_Ha',$area/10000,'Perimetro_km',$perimeter/1000)),\nmap(Proprietario','Pippo','CF','FNDCCCDDDEEEFFF'),'CF') \u2192 'FNDCCCDDDEEEFFF'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#compositore-di-stampe_1","title":"Compositore di stampe","text":"Nuova funzione item_variables
presente, nel gruppo Layout, solo se utilizzate all'interno di un contesto di composizione.
La funzione accetta un singolo argomento, l'id per un elemento all'interno della composizione e restituisce una mappa del nome della variabile sul valore per quell'elemento. Questo ti permette di fare cose come inserire il testo in un'etichetta che recuperi le propriet\u00e0 di un altro elemento nella composizione, ad es:
Inserisci la scala della mappa (Mappa 1
) in un'etichetta:
map_get( item_variables('Mappa 1'),'map_scale')\n
Inserisci la coordinata x del centro della mappa (Mappa 1
) in un'etichetta:
x(map_get( item_variables('Mappa 1'),'map_extent_center'))\n
Changelog QGIS 3.0
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_insert","title":"map_insert","text":"Restituisce una mappa con una chiave/valore aggiunto. Se la chiave esiste gi\u00e0, il suo valore verr\u00e0 sovrascritto.
Sintassi:
Argomenti:
Esempi:
map_insert(map('1','one'),'3','three') \u2192 map: 1: 'one', 3: 'three'\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_prefix_keys","title":"map_prefix_keys","text":"Restituisce una mappa con tutte le chiavi precedute da una data stringa.
Sintassi:
Argomenti:
Esempi:
map_prefix_keys(map('1','one','2','two'), 'prefix-') \u2192 { 'prefix-1': 'one', 'prefix-2': 'two' }\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_to_hstore","title":"map_to_hstore","text":"Unisci gli elementi della mappa in una stringa formattata in hstore.
Sintassi:
Argomenti:
Esempi:
map_to_hstore(map('qgis','rocks')) \u2192 \"qgis\"=>\"rocks\"}\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#map_to_json","title":"map_to_json","text":"Unisci gli elementi della mappa in una stringa formattata con json.
Sintassi:
Argomenti:
Esempi:
map_to_json(map('qgis','rocks')) \u2192 {\"qgis\":\"rocks\"}\n
nota bene:
Funzione eliminata a partire da QGIS 3.18
https://github.com/qgis/QGIS/pull/42179
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#to_json","title":"to_json","text":"Creare una stringa in formato JSON da una mappa, array o altro valore.
Sintassi:
Argomenti:
Esempi:
to_json(map('qgis','rocks')) \u2192 {\"qgis\":\"rocks\"}\nto_json(array(1,2,3)) \u2192 [1,2,3]\n
","tags":["gruppo"]},{"location":"gr_funzioni/maps/maps_unico/#url_encode","title":"url_encode","text":"Restituisce una stringa codificata come URL da una mappa. Trasforma tutti i caratteri nella loro forma correttamente codificata producendo una stringa di query completamente conforme. Nota che il segno pi\u00f9 '+' non viene convertito.
Sintassi:
Argomenti:
Esempi:
url_encode(map('a&+b', 'a and plus b', 'a=b', 'a equals b')) \u2192 'a%26+b=a%20and%20plus%20b&a%3Db=a%20equals%20b'\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/","title":"Gruppo Matematica","text":"Abstract
Questo gruppo contiene funzioni matematiche es. radice quadrata, seno e coseno.
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#abs","title":"abs","text":"Restituisce il valore assoluto di un numero.
Sintassi:
Argomenti:
Esempi:
abs(-2) \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#acos","title":"acos","text":"Restituisce l'arcocoseno del valore in radianti.
Sintassi:
Argomenti:
Esempi:
acos(0.5) \u2192 1.0471975511966\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#asin","title":"asin","text":"Restituisce l'arcoseno del valore in radianti.
Sintassi:
Argomenti:
Esempi:
asin(1.0) \u2192 1.5707963267949\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#atan","title":"atan","text":"Restituisce l'arcotangente del valore in radianti.
Sintassi:
Argomenti:
Esempi:
atan(0.5) \u2192 0.463647609000806\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#atan2","title":"atan2","text":"Restituisce la arcotangente di dy/dx usando i segni dei due argomenti per determinare il quadrante del risultato.
Sintassi:
Argomenti:
Esempi:
atan2(1.0, 1.732) \u2192 0.523611477769969\n
Wikipedia
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#azimuth","title":"azimuth","text":"Restituisce l'azimut dal nord quale angolo in radianti misurato in senso orario dalla verticale del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
degrees( azimuth( make_point(25, 45), make_point(75, 100) ) ) \u2192 42.273689\ndegrees( azimuth( make_point(75, 100), make_point(25,45) ) ) \u2192 222.273689\n
vedasi nel gruppo funzioni Geometria Azimuth
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#ceil","title":"ceil","text":"Arrotonda un numero all'intero superiore.
Sintassi:
Argomenti:
Esempi:
ceil(4.9) \u2192 5\nceil(-4.9) \u2192 -4\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#clamp","title":"clamp","text":"Limita un valore in ingresso a un intervallo specificato.
Sintassi:
Argomenti:
Esempi:
clamp(1,5,10) \u2192 5 (input \u00e8 compreso tra 1 e 10 per cui \u00e8 restituito invariato)\nclamp(1,0,10) \u2192 1 (input \u00e8 pi\u00f9 piccolo del valore minimo di 1, cos\u00ec la funzione restituisce 1)\nclamp(1,11,10) \u2192 10 (input \u00e8 pi\u00f9 grande del valore massimo di 10, cos\u00ec la funzione restituisce 10)\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#cos","title":"cos","text":"Restituisce il coseno di un angolo.
Sintassi:
Argomenti:
Esempi:
cos( 1.5707963267948966 ) \u2192 0.0\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#degrees","title":"degrees","text":"Converte da radianti a gradi decimali.
Sintassi:
Argomenti:
Esempi:
degrees(3.14159) \u2192 179.99984796050427\ndegrees(1) \u2192 57.2958\ndegrees(pi()) \u2192 180\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#exp","title":"exp","text":"Restituisce l'esponenziale di un valore.
Sintassi:
Argomenti:
Esempi:
exp(1.0) \u2192 2.71828182845905\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#floor","title":"floor","text":"Arrotonda un numero all'intero inferiore.
Sintassi:
Argomenti:
OSSERVAZIONE: Alla funzione Floor
(in alcuni casi) corrisponde l'operatore //
(Floor division)
Esempi:
floor(4.9) \u2192 4\nfloor(-4.9) \u2192 -5\nfloor(2/26) = 2//26\n
Esempi:
Vedi esempio conversione
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#inclination","title":"Inclination","text":"Restituisce l'inclinazione misurata dallo zenit (0) al nadir (180) del punto_a al punto_b.
Sintassi:
Argomenti:
Esempi:
inclination( make_point( 5, 10, 0 ), make_point( 5, 10, 5 ) ) \u2192 0.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 50, 100, 0 ) ) \u2192 90.0\ninclination( make_point( 5, 10, 0 ), make_point( 5, 10, -5 ) ) \u2192 180.0\n
vedasi nel gruppo funzioni Geometria Inclination
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#ln","title":"ln","text":"Restituisce il logaritmo naturale di un valore.
Sintassi:
Argomenti:
Esempi:
ln(1) \u2192 0\nln(2.7182818284590452354) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#log","title":"log","text":"Restituisce il valore del logaritmo della base e valore passati.
Sintassi:
Argomenti:
Esempi:
log(2, 32) \u2192 5\nlog(0.5, 32) \u2192 -5\nlog(2.7182818284590452354, 1) = ln(1) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#log10","title":"log10","text":"Restituisce il valore del logaritmo in base10 dell'espressione passata.
Sintassi:
Argomenti:
Esempi:
log10(1) \u2192 0\nlog10(100) \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#max","title":"max","text":"Restituisce il valore maggiore di un insieme di valori.
Sintassi:
Argomenti:
Esempi:
max(2,10.2,5.5) \u2192 10.2\nmax(20.5,NULL,6.2) \u2192 20.5\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#min","title":"min","text":"Restituisce il valore minore di un insieme di valori.
Sintassi:
Argomenti:
Esempi:
min(20.5,10,6.2) \u2192 6.2\nmin(2,-10.3,NULL) \u2192 -10.3\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#pi","title":"pi","text":"Restituisce il valore di Pi greco
Sintassi:
Esempi:
pi() \u2192 3.14159265358979\n
--
Wikipedia Pi greco Mai senza
Il mio logo personale:
L'unione di tre simboli matematici che hanno rivoluzionato il Mondo:
Con un po' di fantasia dovreste leggere il mio nome Tot\u00f2 \ud83d\ude0e
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#radians","title":"radians","text":"Converte da gradi decimali a radianti.
Sintassi:
Argomenti:
Esempi:
radians(180) \u2192 3.14159\nradians(57.2958) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#rand","title":"rand","text":"Restituisce un intero casuale nell'intervallo specificato fra un minimo ed un massimo (inclusi). Se viene fornito un seme, il reso sar\u00e0 sempre lo stesso, a seconda del seme.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
rand(1, 10) \u2192 8\nrand( 10, 100,1) \u2192 68\n
Osservazioni:
Novit\u00e0 introdotta nella QGIS 3.12
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#randf","title":"randf","text":"Restituisce un numero in virgola mobile casuale nell'intervallo specificato da un minimo ed un massimo (inclusi). Se viene fornito un seme, il reso sar\u00e0 sempre lo stesso, a seconda del seme.
Sintassi:
Argomenti:
Esempi:
randf(1, 10) \u2192 4.59258286403147\nrandf(1, 10,3) \u2192 6.028893906608612\n
Esempi:
Osservazioni
Novit\u00e0 introdotta nella QGIS 3.12
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#round","title":"round","text":"Arrotonda un numero ad un numero di cifre decimali.
Sintassi:
Argomenti:
Esempi:
round(1234.567, 2) \u2192 1234.57\nround(1234.567) \u2192 1235\nround(1234.567,-2) \u2192 1200\n
Esempi:
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#scale_exp","title":"scale_exp","text":"Trasforma un valore dato da un dominio in ingresso in un intervallo in uscita usando una curva esponenziale. Questa funzione pu\u00f2 essere usata per agevolare gradualmente in entrata o in uscita i valori dell'intervallo in uscita specificato.
Sintassi:
Argomenti:
Esempi:
scale_exp(5,0,10,0,100,2) \u2192 25 (agevolazione graduale in entrata, usando un esponente di 2)\nscale_exp(3,0,10,0,100,0.5) \u2192 54.772 (agevolazione graduale in uscita, usando un esponente di 0.5)\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#scale_linear","title":"scale_linear","text":"Trasforma un dato valore da un dominio in ingresso ad un intervallo in uscita usando un'interpolazione lineare.
Sintassi:
Argomenti:
Esempi:
scale_linear(5,0,10,0,100) \u2192 72\nscale_linear(0.2,0,1,0,360) \u2192 72 (per scalare un valore tra 0 e 1 in un angolo tra 0 e 360)\nscale_linear(1500,1000,10000,9,20) \u2192 10.22 (per scalare una popolazione che varia tra 1000 e 10000 in una dimensione del carattere tra 9 e 20)\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#sin","title":"sin","text":"Restituisce il seno di un angolo.
Sintassi:
Argomenti:
Esempi:
sin(1.571) \u2192 0.999999682931835\nsin(pi()/2) \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#sqrt","title":"sqrt","text":"Restituisce la radice quadrata di un valore.
Sintassi:
Argomenti:
Esempi:
sqrt(9) \u2192 3\n
","tags":["gruppo"]},{"location":"gr_funzioni/matematica/matematica_unico/#tan","title":"tan","text":"Restituisce la tangente di un angolo.
Sintassi:
Argomenti:
Esempi:
tan(1.0) \u2192 1.5574077246549\ntan(pi()/2) \u2192 infinito\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/","title":"Gruppo Operatori","text":"Abstract
**Questo gruppo contiene operatori es. + - ***
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#and","title":"AND","text":"Restituisce 1 quando le condizioni a e b sono vere.
Sintassi:
Argomenti:
Esempi:
TRUE AND TRUE \u2192 1\nTRUE AND FALSE \u2192 0\n4 = 2+2 AND 1 = 1 \u2192 1\n4 = 2+2 AND 1 = 2 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#diverso","title":"<> (diverso)","text":"Confronta due valori e pone a 1 se essi non sono uguali.
Sintassi:
Argomenti:
Esempi:
5 <> 4 \u2192 1\n4 <> 4 \u2192 0\n5 <> NULL \u2192 NULL\nNULL <> NULL \u2192 NULL\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#diviso","title":"/ (diviso)","text":"Divisione di due valori.
Sintassi:
Argomenti:
Esempi:
5 / 4 \u2192 1.25\n5 / NULL \u2192 NULL\nNULL / 5 \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#doppio-pipe","title":"|| (doppio pipe)","text":"Unisce due valori assieme in una stringa.
Se uno dei valori \u00e8 NULL il risultato sar\u00e0 NULL. Vedi la funzione CONCAT con caratteristiche differenti.
Sintassi:
Argomenti:
Esempi:
'Qui' || ' e ' || 'l\u00e0' \u2192 'Qui e l\u00e0'\n'Nothing' || NULL \u2192 NULL\n'Dia: ' || \"Diameter\" \u2192 'Dia: 25' (\"Diameter\" - un campo tabella attributi)\n1 || 2 \u2192 '12'\n
Osservazioni:
Puoi concatenare stringhe usando ||
o +
. Quest'ultimo significa anche somma nelle espressioni. Quindi se hai un intero (campo o valore numerico) questo pu\u00f2 essere soggetto a errori. In questo caso, dovresti usare ||
. Se si concatenano due valori stringa, \u00e8 possibile utilizzare entrambi.
Restituisce 1 se il primo parametro soddisfa senza tener conto delle maiuscole o minuscole il modello fornito. LIKE pu\u00f2 essere usato al posto di ILIKE per eseguire una comparazione che tenga conto delle maiuscole e minuscole. Funziona anche con i numeri.
Sintassi:
Argomenti:
'%'
come carattere jolly, '_'
come un singolo carattere e '\\'
per eseguire l'escape.Esempi:
'A' ILIKE 'A' \u2192 1\n'A' ILIKE 'a' \u2192 1\n'A' ILIKE 'B' \u2192 0\n'ABC' ILIKE 'b' \u2192 0\n'ABC' ILIKE 'B' \u2192 0\n'ABC' ILIKE '_b_' \u2192 1\n'ABC' ILIKE '_B_' \u2192 1\n'ABCD' ILIKE '_b_' \u2192 0\n'ABCD' ILIKE '_B_' \u2192 0\n'ABCD' ILIKE '_b%' \u2192 1\n'ABCD' ILIKE '_B%' \u2192 1\n'ABCD' ILIKE '%b%' \u2192 1\n'ABCD' ILIKE '%B%' \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#in","title":"IN","text":"Restituisce 1 se il valore viene trovato in una lista di valori.
Sintassi:
Argomenti:
Esempi:
'A' IN ('A','B') \u2192 1\n'A' IN ('C','B') \u2192 0\n
Osservazioni:
La funzione distingue maiuscolo dal minuscolo!!!
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#is","title":"IS","text":"Restituisce 1 se a \u00e8 uguale a b.
Sintassi:
Argomenti:
Esempi:
'A' IS 'A' \u2192 1\n*'A' IS 'a' \u2192 0\n4 IS 4 \u2192 1\n4 IS 2+2 \u2192 1\n4 IS 2 \u2192 0\n$geometry IS NULL \u2192 0, se la tua geometria non \u00e8 NULL\n
Osservazioni:
La funzione distingue maiuscolo dal minuscolo!!!
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#is-not","title":"IS NOT","text":"Restituisce 1 se a non \u00e8 uguale a b.
Sintassi:
Sintassi:
Argomenti:
Esempi:
'a' IS NOT 'b' \u2192 1\n'a' IS NOT 'a' \u2192 0\n4 IS NOT 2+2 \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#like","title":"LIKE","text":"Restituisce 1 se il primo parametro soddisfa il modello fornito. Funziona anche con i numeri.
Sintassi:
Argomenti:
'%'
come carattere jolly, '_'
come un singolo carattere e '\\'
per eseguire l'escape.Esempi:
'A' LIKE 'A' \u2192 1\n'A' LIKE 'a' \u2192 0\n'A' LIKE 'B' \u2192 0\n'ABC' LIKE 'B' \u2192 0\n'ABC' LIKE '_B_' \u2192 1\n'ABCD' LIKE '_B_' \u2192 0\n'ABCD' LIKE '_B%' \u2192 1\n'ABCD' LIKE '%B%' \u2192 1\n'1%' LIKE '1\\\\%' \u2192 1\n'1_' LIKE '1\\\\%' \u2192 0\n
Osservazioni:
La funzione distingue maiuscolo dal minuscolo!!!
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#not-between","title":"NOT BETWEEN","text":"Restituisce TRUE se il valore non \u00e8 all'interno dell'intervallo specificato. L'intervallo \u00e8 considerato comprensivo dei limiti.
Sintassi:
Argomenti:
Esempi:
'B' NOT BETWEEN 'A' AND 'C' \u2192 FALSE\n1.0 NOT BETWEEN 1.1 AND 1.2 \u2192 TRUE\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#between","title":"BETWEEN","text":"Restituisce TRUE se il valore rientra nell'intervallo specificato. L'intervallo \u00e8 considerato comprensivo dei limiti. Per verificare l'esclusione pu\u00f2 essere utilizzato NOT BETWEEN
.
Sintassi:
Argomenti:
Esempi:
'B' BETWEEN 'A' AND 'C' \u2192 TRUE\n2 BETWEEN 1 AND 3 \u2192 TRUE\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#maggiore","title":"> (maggiore)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 maggiore del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 > 4 \u2192 1\n5 > 5 \u2192 0\n4 > 5 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#maggiore-uguale","title":">= (maggiore uguale)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 maggiore o uguale del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 >= 4 \u2192 1\n5 >= 5 \u2192 1\n4 >= 5 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#operatore-meno","title":"Operatore - (meno)","text":"Sottrazione di due valori. Se uno dei due valori \u00e8 NULL il risultato sar\u00e0 NULL.
Sintassi
Argomenti:
Esempi:
5 - 4 \u2192 1\n5 - NULL \u2192 NULL\nto_datetime('2012-05-05 12:00:00') - to_interval('1 day 2 hours') \u2192 2012-05-04T10:00:00\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#minore","title":"< (minore)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 minore del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 < 4 \u2192 0\n5 < 5 \u2192 0\n4 < 5 \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#minore-uguale","title":"<= (minore uguale)","text":"Confronta due valori e pone a 1 se il valore a sinistra \u00e8 minore o uguale del valore a destra.
Sintassi:
Argomenti:
Esempi:
5 <= 4 \u2192 0\n5 <= 5 \u2192 1\n4 <= 5 \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#not","title":"NOT","text":"Nega una condizione.
Sintassi
Argomenti:
Esempi:
NOT 1 \u2192 0\nNOT 0 \u2192 1\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#or","title":"OR","text":"Restituisce 1 quando la condizione a oppure b \u00e8 vera.
Sintassi
Argomenti:
Esempi:
4 = 2+2 OR 1 = 1 \u2192 1\n4 = 2+2 OR 1 = 2 \u2192 1\n4 = 2 OR 1 = 2 \u2192 0\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#indice-operatore","title":"[] Indice operatore","text":"Restituisce un elemento da un array o valore mappa.
Sintassi:
Argomenti:
Esempi:
array(1,2,3)[0] \u2192 1\narray(1,2,3)[2] \u2192 3\narray(1,2,3)[-1] \u2192 3\nmap('a',1,'b',2)['a'] \u2192 1\nmap('a',1,'b',2)['b'] \u2192 2\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#potenza","title":"^ (potenza)","text":"Elevazione a potenza di due valori.
Sintassi:
Argomenti:
Esempi:
5 ^ 4 \u2192 625\n5 ^ NULL \u2192 NULL\nNULL ^ 5 \u2192 NULL\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#prodotto","title":"* (prodotto)","text":"Moltiplicazione di due valori.
Sintassi
Argomenti:
Esempi:
5 * 4 \u2192 20\n5 NULL \u2192 NULL\nNULL 5 \u2192 NULL\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#resto-divisione","title":"% (resto divisione)","text":"Resto della divisione. In aritmetica il resto \u00e8 la quantit\u00e0 di *dividendo che \u00e8 avanzata dalla divisione, cio\u00e8 quella quantit\u00e0 che non \u00e8 stata possibile dividere per il divisore affinch\u00e9 il risultato rimanga nell'insieme dei numeri interi
. Per definizione: Il resto di una divisione denota la quantit\u00e0 da sottrarre a un dividendo al fine di renderlo divisibile per un divisore.
Sintassi
Argomenti:
Esempio:
17 : 2 = 8 resto 1
Sottraendo a 17 il resto di 1 si ottiene 16, numero divisibile per due (la cui met\u00e0 \u00e8 8). Nella divisione tra 17 e 2, va tenuto da parte il resto, ossia quel numero che, se diviso, farebbe rientrare il risultato in un altro insieme numerico.
Il resto di una divisione denota la quantit\u00e0 da sottrarre a un dividendo al fine di renderlo divisibile per un divisore.
OSSERVAZIONE1: Se il dividendo fosse pi\u00f9 piccolo del Divisore, il resto sarebbe sempre uguale al Dividendo;
OSSERVAZIONE2 occhio al segno!!!
Esempi:
5 % 4 \u2192 1\n5 % NULL \u2192 NULL\nNULL % 5 \u2192 NULL\n10 % 20 \u2192 10\n-10 % 3 \u2192 -1\n10 % -3 \u2192 1\n
Altri esempi:
Un esempio molto utile nel campo GIS riguarda l'etichettatura curve di livello: supponiamo di voler etichettare le curve di livello (con passo 50 m) e visualizzare solo le etichette con passo 200 m, l'espressione da usare \u00e8 la seguente:
CASE WHEN ( \"ELEV\" % 200 ) = 0 THEN \"ELEV\" END\n
ecco il risultato:
PRIMA:
DOPO:
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#somma","title":"+ (somma)","text":"Addizione di due valori. Se uno dei due valori \u00e8 NULL il risultato sar\u00e0 NULL.
Sintassi
Argomenti:
Esempi:
5 + 4 \u2192 9\n5 + NULL \u2192 NULL\n'QGIS ' + 'ROCKS' \u2192 'QGIS ROCKS'\nto_datetime('2020-08-01 12:00:00') + '1 day 2 hours' \u2192 2020-08-02T14:00:00\n
Osservazioni:
Puoi concatenare stringhe usando ||
o +
. Quest'ultimo significa anche somma nelle espressioni. Quindi se hai un intero (campo o valore numerico) questo pu\u00f2 essere soggetto a errori. In questo caso, dovresti usare ||
. Se si concatenano due valori stringa, \u00e8 possibile utilizzare entrambi.
Esegue un'espressione regolare su di una stringa.
Sintassi
Argomenti:
\\\\d
Esempi:
'hello' ~ 'll' \u2192 1\n'hello' ~ '^ll' \u2192 0\n'hello' ~ 'llo$' \u2192 1\n
","tags":["gruppo"]},{"location":"gr_funzioni/operatori/operatori_unico/#uguale","title":"= (uguale)","text":"Confronta due valori e pone a 1 se essi sono uguali.
Sintassi
Argomenti:
Esempi:
5 = 4 \u2192 0\n4 = 4 \u2192 1\n5 = NULL \u2192 NULL\nNULL = NULL \u2192 NULL\n
Osservazioni:
1 significa Vero
0 significa falso
","tags":["gruppo"]},{"location":"gr_funzioni/raster/raster_unico/","title":"Gruppo Raster","text":"Abstract
Contiene funzioni che calcolano statistiche e valori raster.
","tags":["gruppo"]},{"location":"gr_funzioni/raster/raster_unico/#raster_statistic","title":"raster_statistic","text":"Restituisce statistiche da un raster.
Sintassi:
Argomento:
property una stringa che indica la propriet\u00e0 da restituire. Opzioni valide sono:
Esempi:
raster_statistic('lc',1,'avg') \u2192 Valore medio per la banda 1 da un raster layer 'lc'\nraster_statistic('ac2010',3,'min') \u2192 Valore minimo dalla banda 3 da un layer raster 'ac2010'\nraster_statistic( 'sicilia_dtm40',1,'max') \u2192 valore massimo del DTM\n
Nota bene
Queste statistiche sono riferite sempre a tutto il raster anche se la geometria \u00e8 pi\u00f9 o meno estesa del raster. Nel caso che segue ho popolato il campo raster del vettore punto con il valore max dell'intero DTM
","tags":["gruppo"]},{"location":"gr_funzioni/raster/raster_unico/#raster_value","title":"raster_value","text":"Restituisce il valore raster trovato nel punto fornito. NOVIT\u00c0 QGIS 3.4 OTTOBRE 2018
Sintassi:
Argomento:
Esempi:
raster_value( 'DTM_Pescaglia',1,$geometry) \u2192 631.2899169921875\n
Nota bene
Esempi:
Animazione
raster_value() con pi\u00f9 bande e pi\u00f9 layer
espressione usata:
'R ' || raster_value( 'Italia_tinitaly',1, $geometry ) \n|| '-' || \n'G ' || raster_value( 'Italia_tinitaly',2, $geometry ) \n|| '-' || \n'B ' || raster_value( 'Italia_tinitaly',3, $geometry ) \n|| '-' || \n'Z ' || raster_value( 'dtm_20m_32',1, $geometry ) \n
Video demo
","tags":["gruppo"]},{"location":"gr_funzioni/recente/recente/","title":"Recente","text":"Abstract
Questo gruppo contiene funzioni usate di recente. A seconda del contesto del suo utilizzo (selezione delle funzionalit\u00e0, calcolatrice di campo, generico), qualsiasi espressione applicata viene aggiunta all'elenco corrispondente (fino a venti espressioni), ordinata dalla pi\u00f9 recente alla meno recente. Ci\u00f2 aiuta a recuperare e riapplicare rapidamente qualsiasi espressione utilizzata in precedenza.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/","title":"Gruppo Record e Attributi","text":"Abstract
Questo gruppo contiene funzioni che operano sugli identificativi dei record.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#currentfeature","title":"$currentfeature","text":"Restituisce l'elemento corrente corrente da valutare. Questo pu\u00f2 essere usato con la funzione 'attribute' per valutare i valori dell'attributo dall'elemento corrente. ATTENZIONE: questa funzione \u00e8 deprecata (a partire da QGIS 3.28.0 Firenze). Si consiglia di utilizzare la variabile sostitutiva @feature.
Sintassi:
Esempi:
- attribute( $currentfeature, 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n- attribute( @feature, 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#id","title":"$id","text":"Restituisce l'id geometria della riga corrente. ATTENZIONE: Questa funzione \u00e8 deprecata (a partire da QGIS 3.28 Firenze). Si consiglia di utilizzare la variabile sostitutiva @id
Sintassi:
Esempi:
$id \u2192 71\n@id \u2192 71\n
Osservazioni:
Questa funzione inizia sempre da 0 con vettore shapefile da 1 con i database
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#is_attribute_valid","title":"is_attribute_valid","text":"(>= QGIS 3.30)
Restituisce TRUE se un attributo di caratteristica specifico soddisfa tutti i vincoli.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
is_attribute_valid('HECTARES') \u2192 TRUE se il valore dell'elemento corrente nel campo \"ETTARI\" soddisfa tutti i vincoli.\nis_attribute_valid('HOUSES',get_feature('my_layer', 'FID', 10), 'my_layer') \u2192 FALSE se il valore nel campo \"HOUSES\" dell'elemento con \"FID\"=10 in 'my_layer' non soddisfa tutti i vincoli.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#is_feature_valid","title":"is_feature_valid","text":"(>= QGIS 3.30)
Restituisce TRUE se un attributo di caratteristica specifico soddisfa tutti i vincoli.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
is_feature_valid(strength:='hard') \u2192 TRUE se tutti i campi della funzione corrente soddisfano i relativi vincoli rigidi.\nis_feature_valid(get_feature('my_layer', 'FID', 10), 'my_layer') \u2192 FALSE se tutti i campi dell'elemento con \"FID\"=10 in 'my_layer' non soddisfano tutti i vincoli.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#attribute","title":"attribute","text":"Restituisce un attributo da un elemento.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-1","title":"Variante 1","text":"Restituisce il valore di un attributo dall'elemento corrente.
Sintassi:
Argomenti:
Esempi:
attribute( 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-2","title":"Variante 2","text":"Consente di specificare l'elemento di destinazione e il nome dell'attributo.
Sintassi:
Argomenti:
Esempi:
attribute( $currentfeature, 'name' ) \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#attributes","title":"attributes","text":"Restituisce una mappa contenente tutti gli attributi di un elemento, con i nomi dei campi come chiavi della mappa.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-1_1","title":"Variante 1","text":"Restituisce una mappa di tutti gli attributi dall'attuale elemento.
Sintassi:
Esempi:o
attributes()['name'] \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente\n
per trasformare una feature (una riga di una tabella) in un array:
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-2_1","title":"Variante 2","text":"Consente di specificare la feature di destinazione.
Sintassi:
Argomenti:
Esempi:
attributes( @atlas_feature )['name'] \u2192 valore memorizzato nell'attributo 'name' per l'elemento corrente dell'atlante\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#display_expression","title":"display_expression","text":"Restituisce l'espressione visualizzata per un dato elemento in un layer. L'espressione \u00e8 sempre valutata. Pu\u00f2 essere usata con lo zero, uno o pi\u00f9 argomenti, vedi sotto per dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nessun-parametro","title":"Nessun parametro","text":"Se chiamata senza parametri, la funzione valuter\u00e0 l'espressione di visualizzazione dell'elemento corrente nel layer corrente.
Sintassi:
Esempi:
display_expression() \u2192 L'espressione visualizzata dell'elemento corrente nel layer corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#un-parametro-feature","title":"Un parametro 'feature'","text":"Se chiamata con il solo parametro 'feature', la funzione valuter\u00e0 l'elemento specificato nel layer corrente.
Sintassi:
Argomenti:
Esempi:
display_expression(@atlas_feature) \u2192 L'espressione visualizzata dell'elemento corrente dell'atlante.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#parametri-del-layer-ed-elementi","title":"Parametri del Layer ed elementi","text":"Se la funzione viene chiamata sia con un layer che con un elemento, valuter\u00e0 l'elemento specificato dal layer indicato.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
display_expression( 'streets', get_feature_by_id('streets', 1)) \u2192 L'espressione visualizzata dell'elemento con ID 1 sul layer 'streets'.\ndisplay_expression('a_layer_id', $currentfeature, 'False') \u2192 L'espressione visualizzata del dato elemento non \u00e8 stata valutata.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#feature_id","title":"feature_id","text":"(>= QGIS 3.30)
Restituisce l'ID univoco di una funzione o NULL se la funzione non \u00e8 valida.
Sintassi:
Argomenti:
Esempi:
feature_id( @feature ) \u2192 l'ID dell'elemento corrente\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#get_feature","title":"get_feature","text":"Restituisce il primo elemento di un layer che corrisponde ad un dato valore di attributo.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-a-valore-singolo","title":"Variante a valore singolo","text":"Insieme all'ID livello, vengono specificati una singola colonna e un valore.
Sintassi:
Argomenti:
Esempi:
get_feature('streets','name','main st') \u2192 prima geometria trovata nel vettore \"streets\" con valore \"main st\" nel campo \"name\"\nget_feature( 'streets', 'fid', attribute( $currentfeature, 'name') ) \u2192 Restituisce la prima feature nel layer \"streets\" il cui campo \"fid\" ha lo stesso valore del campo \"nome\" della feature corrente` (una sorta di JOIN)\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#variante-map","title":"Variante map","text":"QGIS >= 3.24
Insieme all'ID livello, una mappa contenente le colonne (chiave) e il rispettivo valore da utilizzare.
Sintassi:
Argomenti:
Esempi:
get_feature('streets',map('name','main st','lane_num','4')) \u2192 primo elemento trovato in 'streets' con il valore 'main st' nel campo 'name' e il valore '4' nel campo 'lane_num'\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#get_feature_by_id","title":"get_feature_by_id","text":"Restituisce l'id dell'elemento della riga corrente.
Sintassi:
Argomenti:
Esempi:
get_feature_by_id('streets', 1) \u2192 l'elemento con id 1 nel vettore \"streets\"\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#is_selected","title":"is_selected","text":"Restituisce Vero se \u00e8 selezionata una funzione. Pu\u00f2 essere usato con zero, uno o due argomenti, vedi sotto per i dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#senza-parametri","title":"Senza parametri","text":"Se chiamata senza parametri, la funzione restituir\u00e0 vero se \u00e8 selezionata la feature corrente nel layer corrente.
Sintassi:
Esempi:
is_selected() \u2192 True (vero) se l'elemento corrente \u00e8 selezionato.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#una-feature-come-parametro","title":"Una Feature come parametro","text":"Se chiamata con il solo parametro 'feature', la funzione restituisce true se l'elemento specificato \u00e8 selezionato nel layer attuale.
Sintassi:
Argomenti:
Esempi:
is_selected(@atlas_feature) \u2192 Vero se l'elemento corrente dell'atlante \u00e8 selezionato.\nis_selected(get_feature('streets', 'name', 'Main St.'))) \u2192 Vero se l'unico elemento con nome \"Main St.\" sul layer \"streets\" attivo \u00e8 selezionato.\nis_selected(get_feature_by_id('streets', 1)) \u2192 Vero se l'elemento con l'ID 1 sul layer \"streets\" attivo \u00e8 selezionato.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#due-parametri","title":"Due parametri","text":"Se la funzione \u00e8 chiamata sia con un layer che con un elemento, questa restituir\u00e0 vero se l'elemento specificato del layer specificato \u00e8 selezionato.
Sintassi:
Argomenti:
Esempi:
is_selected( 'streets', get_feature('streets', 'name', \"street_name\")) \u2192 Vero se \u00e8 selezionata la strada dell'edificio corrente (supponendo che il layer edifici abbia un campo denominato 'street_name' e il layer strade abbia un campo denominato 'name' con valori univoci).\nis_selected( 'streets', get_feature_by_id('streets', 1)) \u2192 Vero se l'elemento con l'ID 1 nel layer \"streets\" \u00e8 selezionato.\n
Esempio etichettatura tramite regola:
Esempio tematizzazione tramite regola:
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#maptip","title":"maptip","text":"Restituisce il suggerimento mappa di un dato elemento in un vettore. Per impostazione predefinita, l'espressione \u00e8 valutata. Pu\u00f2 essere usata con zero, uno o pi\u00f9 argomenti, vedi sotto per dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nessun-parametro_1","title":"Nessun parametro","text":"Se chiamata senza parametri, la funzione valuter\u00e0 il suggerimento mappa dell'elemento corrente nel layer corrente.
Sintassi:
Esempi:
maptip() \u2192 Il suggerimento mappa dell'elemento corrente nel layer corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#un-parametro-feature_1","title":"Un parametro 'feature'","text":"Se chiamata con il solo parametro 'feature ', la funzione valuter\u00e0 l'elemento specificato nel layer corrente.
Sintassi:
Argomenti:
Esempi:
maptip(@atlas_feature) \u2192 Il suggerimento mappa dell'elemento corrente dell'atlante.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#parametri-del-layer-ed-elementi_1","title":"Parametri del Layer ed elementi","text":"Se la funzione viene chiamata sia con un layer che con un elemento, valuter\u00e0 l'elemento specificato dal layer indicato.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
maptip('streets', get_feature_by_id('streets', 1)) \u2192 Il suggerimento mappa dell'elemento con ID 1 sul vettore 'streets'.\nmaptip('a_layer_id', $currentfeature, 'False') \u2192 Il suggerimento mappa del dato elemento non valutato.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#num_selected","title":"num_selected","text":"Restituisce il numero di geometrie selezionate in un vettore dato. Per impostazione predefinita funziona sul vettore sul quale l'espressione \u00e8 valutata.
Sintassi:
Argomenti:
Esempi:
num_selected() \u2192 Il numero di geometrie selezionate nel vettore corrente.\nnum_selected('streets') \u2192 Il numero di geometrie selezionate nel vettore streets\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#represent_attributes","title":"represent_attributes","text":"Restituisce una mappa con i nomi degli attributi come chiavi ed i valori di rappresentazione configurati come valori. Il valore di rappresentazione per gli attributi dipende dal tipo di widget configurato per ogni attributo. Pu\u00f2 essere usato con zero, uno o pi\u00f9 argomenti, vedi sotto per i dettagli.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nessun-paramentro","title":"Nessun paramentro","text":"Se chiamata senza parametri, la funzione restituisce la rappresentazione degli attributi dell'elemento corrente nel layer corrente.
Sintassi:
Esempio:
represent_attributes() \u2192 La rappresentazione degli attributi per l'elemento corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#un-parametro-feature_2","title":"Un parametro feature","text":"Se chiamata solo con un parametro 'feature', la funzione restituisce la rappresentazione degli attributi dell'elemento specificato dal layer corrente.
Sintassi:
Argomenti:
Esempio:
represent_attributes($currentfeature) \u2192 La rappresentazione degli attributi per l'elemento corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#parametri-layer-e-feature","title":"Parametri layer e feature","text":"Se chiamata con un parametro 'layer' e un parametro 'feature', la funzione restituir\u00e0 la rappresentazione degli attributi dell'elemento specificato dal layer specificato
Sintassi:
Argomenti:
Esempio:
represent_attributes(@layer, $currentfeature) \u2192 La rappresentazione degli attributi per l'elemento corrente.\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#represent_value","title":"represent_value","text":"Restituisce il metodo di rappresentazione configurato per un valore di un campo. Esso dipende dal tipo di widget configurato. Spesso, questo \u00e8 molto utile per i widget 'Mappa Valore'.
Sintassi:
Argomenti:
Esempi:
represent_value(\"field_with_value_map\") \u2192 Descrizione per il valore\nrepresent_value('static value', 'field_name') \u2192 Descrizione per il valore statico\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#sqlite_fetch_and_increment","title":"sqlite_fetch_and_increment","text":"Gestisce i valori incrementali nei database sqlite.
I valori predefiniti in SQlite possono essere applicati all'inserimento e non possono venir elaborati con il prefetch.
Ci\u00f2 rende impossibile l'acquisizione e l'incremento della chiave primaria tramite l'AUTO_INCREMENT prima della creazione della riga nel database. Note a margine: con postgres, questo funziona tramite l'opzione valuta i valori predefiniti.
Quando vengono aggiunti nuovi elementi che hanno relazioni, \u00e8 veramente grazioso poter aggiungere elementi figlio per un genitore, mentre il modulo dei genitori \u00e8 ancora aperto e l'elemento genitore non \u00e8 ancora salvato.
Per sorpassare questa limitazione, questa funzione pu\u00f2 essere usata per gestire valori sequenziali in una tabella separata basata su un formato sqlite come il gpkg.
La tabella sequenza sar\u00e0 filtrata per un id sequenziale (filter_attribute e filter_value) ed il valore attuale dell'id_field sar\u00e0 incrementato di 1 e verr\u00e0 restituto il valore incrementato.
Se colonne aggiuntive richiedono che per esse debbano venir specificati valori, i default_values map possono essere usati per questo scopo.
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#nota","title":"Nota","text":"Questa funzione modifica la tabella sqlite di destinazione. Essa \u00e8 intesa per l'uso con la configurazione predefinita per gli attributi. Quando il parametro \u00e8 un layer ed il layer \u00e8 in modo transazione, il valore viene recuperato solo una volta durante il tempo di vita di una transazione e memorizzato ed incrementato. Ci\u00f2 rende insicuro lavorare sullo stesso database con diversi processi in parallelo.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
sqlite_fetch_and_increment(@layer, 'sequence_table', 'last_unique_id', 'sequence_id', 'global', map('last_change', 'date(''now'')', 'user', '''' || @user_account_name || '''')) \u2192 0\nsqlite_fetch_and_increment(layer_property(@layer, 'path'), 'sequence_table', 'last_unique_id', 'sequence_id', 'global', map('last_change', 'date(''now'')', 'user', '''' || @user_account_name || '''')) \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/record_e_attributi/record_e_attributi_unico/#uuid","title":"uuid","text":"Genera un Universally Unique Identifier (UUID) per ciascun record usando il metodo Qt QUuid::createUuid. Aggiornato dalla QGIS 3.18
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
uuid() \u2192 '{0bd2f60f-f157-4a6d-96af-d4ba4cb366a1}'\nuuid('WithoutBraces') \u2192 '0bd2f60f-f157-4a6d-96af-d4ba4cb366a1'\nuuid('Id128') \u2192 '0bd2f60ff1574a6d96afd4ba4cb366a1'\n
1.png)
","tags":["gruppo"]},{"location":"gr_funzioni/reference/dbquery/","title":"dbquery","text":"--
"},{"location":"gr_funzioni/reference/dbquery/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbquery/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbquery/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbquery/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/dbsql/","title":"dbsql","text":"--
"},{"location":"gr_funzioni/reference/dbsql/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbsql/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbsql/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbsql/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/","title":"dbvalue","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbvalue/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbvalue/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/","title":"dbvaluebyid","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/dbvaluebyid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/dbvaluebyid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/","title":"geomcontains","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomcontains/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomcontains/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/","title":"geomcrosses","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomcrosses/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomcrosses/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/","title":"Geomdisjoint","text":""},{"location":"gr_funzioni/reference/geomdisjoint/#funzione-geomdisjoint","title":"Funzionegeomdisjoint
","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomdisjoint/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomdisjoint/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/","title":"geomdistance","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomdistance/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomdistance/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomequals/","title":"geomequals","text":"--
"},{"location":"gr_funzioni/reference/geomequals/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomequals/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomequals/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomequals/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/","title":"geomintersects","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomintersects/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomintersects/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/","title":"geomnearest","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomnearest/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomnearest/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/","title":"geomoverlaps","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomoverlaps/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomoverlaps/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomredef/","title":"geomredef","text":"--
"},{"location":"gr_funzioni/reference/geomredef/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomredef/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomredef/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomredef/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/","title":"geomtouches","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomtouches/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomtouches/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/","title":"geomwithin","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/geomwithin/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/geomwithin/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/","title":"Intersecting geom count","text":""},{"location":"gr_funzioni/reference/intersecting_geom_count/#funzione-intersecting_geom_count","title":"Funzioneintersecting_geom_count
","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/intersecting_geom_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/","title":"Intersecting geom sum","text":""},{"location":"gr_funzioni/reference/intersecting_geom_sum/#funzione-intersecting_geom_sum","title":"Funzioneintersecting_geom_sum
","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/intersecting_geom_sum/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/intersecting_geom_sum/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/reference/","title":"Reference","text":"Questo gruppo \u00e8 presente SOLO dopo aver installato il plugin refFunctions. Plugin che aggiunge funzioni utente personalizzate al calcolatore di campi di QGIS per fare riferimento, analiticamente o spazialmente, tra i livelli, ad esempio recuperare un valore da un livello usando come valore di campo o una condizione spaziale (interseca, disgiunti ....) come parametro.
Funzione Descrizione Funzioni della tabella: dbvalue Recupera il primo valore targetField da targetLayer quando keyField \u00e8 uguale a conditionValue dbvaluebyid Recupera il valore targetField da targetLayer usando l'ID della caratteristica interna dbquery Recupera il primo valore targetField da targetLayer quando whereClause \u00e8 true dbsql Recupera i risultati dalla query SQL Funzioni WKT: WKTcentroid Restituisce il centro di massa della geometria data come geometria del punto WKT WKTpointonsurface Restituisce il punto all'interno della geometria data WKTlenght Restituisce la lunghezza della geometria WKT fornita WKTarea Restituisce l'area della geometria WKT indicata Funzioni geometriche: geomRedef ridefinire la geometria della feature corrente con una nuova geometria WKT (sperimentale!) geomnearest Recupera il valore del campo target dalla funzione di destinazione pi\u00f9 vicina nel livello di destinazione geomdistance Recupera il valore del campo target dalla funzione target nel livello di destinazione se la funzione target \u00e8 in distanza geomwithin Recupera il valore del campo obiettivo quando la funzione di origine si trova all'interno della funzione di destinazione nel livello di destinazione geomtouches Recupera il valore del campo obiettivo quando la funzione sorgente tocca la funzione di destinazione nel livello di destinazione geomintersects Recupera il valore del campo obiettivo quando la caratteristica sorgente interseca la caratteristica obiettivo nel livello di destinazione geomcontains Recupera il valore del campo obiettivo quando la funzione di origine contiene la funzione di destinazione nel livello di destinazione geomcwithin Recupera il valore del campo obiettivo quando la funzione di origine \u00e8 disgiunta dalla funzione di destinazione nel livello di destinazione geomequals Recupera il valore del campo obiettivo quando la funzione di origine \u00e8 uguale alla funzione di destinazione nel livello di destinazione geomoverlaps Recupera il valore del campo obiettivo quando la funzione sorgente si sovrappone alla funzione di destinazione nel livello di destinazione geomcrosses Recupera il valore del campo obiettivo quando la caratteristica sorgente attraversa la caratteristica obiettivo nel livello di destinazione geomdisjoint Recupera il valore del campo obiettivo quando la funzione di origine \u00e8 disgiunta dalla funzione di destinazione nel livello di destinazione intersecting_geom_count Ottieni il conteggio delle funzionalit\u00e0 nel livello di destinazione intersecate dalla funzione di origine intersecting_geom_sum Somma gli attributi delle geometrie del livello di destinazione intersecati dalla funzione di origine "},{"location":"gr_funzioni/reference/wktarea/","title":"wktarea","text":"--
"},{"location":"gr_funzioni/reference/wktarea/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktarea/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktarea/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktarea/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/","title":"wktcentroid","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktcentroid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktcentroid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/","title":"wktlenght","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktlenght/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktlenght/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/","title":"wktpointonsurface","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/#esempi","title":"Esempi","text":""},{"location":"gr_funzioni/reference/wktpointonsurface/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/reference/wktpointonsurface/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/relazioni/relazioni/","title":"Relazioni","text":"Abstract
Questo gruppo contiene tutte le relazioni del progetto, sar\u00e0 visibile solo se il progetto ha delle relazioni tra layer.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/","title":"Gruppo Stringhe di Testo","text":"Abstract
Questo gruppo contiene le funzioni che operano sulle stringhe es. sostituzione, conversione in maiuscolo.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#ascii","title":"ascii","text":"Restituisce il codice unicode associato al primo carattere di una stringa.
Sintassi:
Argomenti:
Esempi:
ascii('Q') \u2192 81\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#char","title":"char","text":"Restituisce il carattere associato ad un codice unicode.
Sintassi:
Argomenti:
Esempi:
char(81) \u2192 'Q'\nchar(178) \u2192 '\u00b2'\nchar(179) \u2192 '\u00b3'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#concat","title":"concat","text":"Concatena svariate stringhe in una sola. Valori NULL sono convertiti in stringhe vuote. Altri valori (come i numeri) sono convertiti in stringa.
Sintassi:
Argomenti:
Esempi:
concat('To', 't\u00f2') \u2192 'Tot\u00f2'\nconcat('a','b','c','d','e') \u2192 'abcde'\nconcat('Anno ', 2018) \u2192 'Anno 2018'\nconcat('QGIS 3.0', NULL) \u2192 'QGIS 3.0'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#format","title":"format","text":"Formatta una stringa usando gli argomenti forniti.
Sintassi:
Argomenti:
Esempi:
format('This %1 a %2','is', 'test') \u2192 'Questo \u00e8 un test'\nformat('This is %2','a bit unexpected but 2 is lowest number in string','normal') \u2192 'This is a bit unexpected but 2 is lowest number in string'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#format_date","title":"format_date","text":"Formatta una data o una stringa in un formato stringa personalizzato. Usa le Qt date/time format strings. Vedi QDateTime::toString.
Sintassi:
Argomenti:
Queste espressioni possono essere usate per la parte time della stringa da formattare:
Espressione Risultato h l'ora senza lo zero iniziale (da 0 a 23 o da 1 a 12 se visualizzi AM/PM) hh l'ora con lo zero iniziale (da 00 a 23 o da 01 a 12 se visualizzi AM/PM) H l'ora senza lo zero iniziale (da 0 a 23, anche se visualizzi AM/PM) HH l'ora con lo zero iniziale (da 00 a 23, anche se visualizzi AM/PM) m il minuto senza lo zero iniziale (da 0 a 59) mm il minuto con lo zero iniziale (da 00 a 59) s il secondo senza lo zero iniziale (da 0 a 59) ss il secondo con lo zero iniziale (da 00 a 59) z i millisecondi senza gli zeri iniziali (da 0 a 999) zzz i millisecondi con gli zeri iniziali (da 000 a 999) AP o A interpretato come un orario nel formato AM/PM. AP deve essere \"AM\" oppure \"PM\". ap o a interpretato come un orario nel formato AM/PM. ap deve essere \"am\" oppure \"pm\".Esempi:
format_date('2012-05-15','dd.MM.yyyy') \u2192 '15.05.2012'\nformat_date('2012-05-15','d MMMM yyyy','fr') \u2192 '15 mai 2012'\nformat_date('2012-05-15','dddd') \u2192 'Tuesday', se la lingua corrente \u00e8 una variante inglese\nformat_date('2012-05-15 13:54:20','dd.MM.yy') \u2192 '15.05.12'\nformat_date('13:54:20','hh:mm AP') \u2192 '01:54 PM'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#format_number","title":"format_number","text":"Restituisce un numero formattato con il separatore locale per le migliaia. Inoltre tronca il numero al numero di posti forniti.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
format_number(10000000.332,2) \u2192 '10,000,000.33' se ad es. la locale corrente \u00e8 una variante inglese\nformat_number(10000000.332,2,'fr') \u2192 '10 000 000,33'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#left","title":"left","text":"Restituisce una sottostringa che contiene gli n caratteri pi\u00f9 a sinistra della stringa.
Sintassi:
Argomenti:
Esempi:
left('Hello World',5) \u2192 'Hello'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#length","title":"length","text":"Restituisce il numero di caratteri in una stringa o la lunghezza di una geometria di tipo linestring.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-stringa","title":"Variabile stringa","text":"Restituisce il numero di caratteri contenuti in una stringa.
Sintassi:
Argomenti:
Esempi:
length('hello') \u2192 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-geometria","title":"Variabile geometria","text":"Calcola la lunghezza di un oggetto a geometria lineare. I calcoli sono sempre planimetrici nel Sistema di Riferimento Spaziale (SR) di detta geometria, e l'unit\u00e0 di misura della lunghezza restituita \u00e8 conforme all'unit\u00e0 di misura del SR. Ci\u00f2 differisce dal calcolo eseguito dalla funzione $length, la quale esegue calcoli ellissoidici basati sull'ellissoide del progetto e sulle impostazioni delle unit\u00e0 di distanza.
Sintassi:
Argomenti:
Esempi:
length(geom_from_wkt('LINESTRING(0 0, 4 0)')) \u2192 4\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#lower","title":"lower","text":"Converte una stringa in lettere minuscole.
Sintassi:
Argomenti:
Esempi:
lower('HELLO World') \u2192 'hello world'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#lpad","title":"lpad","text":"Restituisce una stringa riempita a sinistra fino alla larghezza specificata, utilizzando un carattere di riempimento. Se la larghezza della destinazione \u00e8 inferiore alla lunghezza della stringa, la stringa viene troncata.
Sintassi:
Argomenti:
Esempi:
lpad('Hello', 10, 'x') \u2192 'xxxxxHello'\nlpad('Hello', 3, 'x') \u2192 'Hel'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#altri-esempi-utili","title":"Altri esempi utili","text":"se volessi popolare un campo in modo da ottenere segnale01.png, segnale02.png...segnale99.png
id path 10 segnale01.png 15 segnale02.png 22 segnale03.png .. .. 520 segnale99.pngespressione utilizzata:
'segnale' || lpad( @row_number ,2, '00' )|| '.png' \u2192 'segnale01.png'\n
--
per ricostruire un identificativo univoco CODICE_ASC
lpad(\"CODICE_STR\",8,0)||\nlpad( \"NUM_CIV\",5,0) ||\ncoalesce(\"BARRATO\",'')\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#ltrim","title":"ltrim","text":"Rimuove la stringa pi\u00f9 lunga contenente solo i caratteri specificati (un carattere spazio come impostazione predefinita) dall'inizio della stringa.
Sintassi:
Argomenti:
Esempi:
ltrim(' hello world ') \u2192 'hello world '\nltrim('zzzytest', 'xyz') \u2192 'test'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#regexp_match","title":"regexp_match","text":"Restituisce la prima posizione di corrispondenza che soddisfa un'espressione regolare all'interno di una stringa, o 0 se la sottostringa non viene trovata.
Sintassi:
Argomenti:
Esempi:
regexp_match('QGIS ROCKS','\\\\sROCKS') \u2192 5\nregexp_match('Buda\u010d','uda\u010d\\\\b') \u2192 2\n
Osservazioni:
link Wikipedia
[ ]
\u00abparentesi quadre\u00bb tutti i caratteri all\u2019interno delle [ ] sono accettati: le due parentesi si comportano come un singolo carattere[^ ]
\u00abparentesi quadre con apice\u00bb tutti i caratteri tranne quelli all\u2019interno delle [ ] sono accettatilink1
link2
regexp_match('QGIS ROCKS ciao come stai','$') = length ('QGIS ROCKS ciao come stai')+1\n
--
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#altri-esempi","title":"Altri esempi","text":"vedi qui
regexp_matches( \"catasto\" ,'^(.+)\\\\.(.+)\\\\.(.+)\\\\.(.+)_(.+)\\\\.(.+)$')[x]\n\ncon x che varia da 0 a 5\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#regexp_replace","title":"regexp_replace","text":"Restituisce una stringa con la parte che soddisfa l'espressione regolare sostituita.
Sintassi:
Argomenti:
\\\\1
, \\\\2
, etc.Esempi:
regexp_replace('QGIS SHOULD ROCK','\\\\sSHOULD\\\\s',' DOES ') \u2192 'QGIS DOES ROCK'\nregexp_replace('ABC123','\\\\d+','') \u2192 'ABC'\nregexp_replace('my name is John','(.*) is (.*)','\\\\2 is \\\\1') \u2192 'Il mio nome \u00e8 Giovanni'\n
Esempi:o 2
Tabella:
id particella 1 00AXJ 2 000BBG 3 0JJUAggiornare il campo particella
togliendo gli zeri iniziali:
espressione da usare:
regexp_replace( \"particella\" ,'^0+','')`\n
risultato:
id particella 1 AXJ 2 BBG 3 JJUecco un tool dove provare le regexp: https://regex101.com/r/SSDBmj/1
Esempi:o 3
id valore 1 data20200224 2 data20200225 3 data20200226eliminare data e inserire un simbolo tra anno, mese e giorno
espressione da usare:
regexp_replace(\"valore\" ,'(data)(....)(..)(..)','\\\\2-\\\\3-\\\\4')`\n
risultato:
id valore 1 2020-02-24 2 2020-02-25 3 2020-02-26Esempi:o 4
Tabella:
id particella 1 00AXJ.su 2 000BBG.cot 3 0JJU.1234Aggiornare il campo particella
togliendo tutto quello dopo il punto (.):
espressione da usare:
regexp_replace( 'xxxxx.yyy','\\\\.(.+)$','')`\n
risultato:
id particella 1 00AXJ 2 000BBG 3 0JJUqui altri esempi
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#regexp_substr","title":"regexp_substr","text":"Restituisce la porzione di una stringa che soddisfa l'espressione regolare passata.
Sintassi:
Argomenti:
\"\\\\s\"
per selezionare un carattere spazio).Esempi:
regexp_substr('abc123','(\\\\d+)') \u2192 '123'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#replace","title":"replace","text":"Restituisce una stringa con la stringa, array o mappa di stringhe passate sostituite.
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-stringa-array","title":"Variabile stringa & array","text":"Restituisce una stringa con la stringa o array di stringa passate sostituite da una stringa o un array di stringhe.
Sintassi:
Argomenti:
Esempi:
replace('QGIS SHOULD ROCK','SHOULD','DOES') \u2192 'QGIS DOES ROCK'\nreplace('QGIS ABC',array('A','B','C'),array('X','Y','Z')) \u2192 'QGIS XYZ'\nreplace('QGIS',array('Q','S'),'') \u2192 'GI'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#variabile-mappa","title":"Variabile mappa","text":"Restituisce una stringa con le chiavi della mappa fornite sostituite dai valori abbinati. Sono valutate per prime le chiavi della mappa pi\u00f9 lunghe.
Sintassi:
Argomenti:
Esempi:
replace('APP SHOULD ROCK',map('APP','QGIS','SHOULD','DOES')) \u2192 'QGIS DOES ROCK'\nreplace('forty two',map('for','4','two','2','forty two','42')) \u2192 '42'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#right","title":"right","text":"Restituisce una sottostringa che contiene gli n caratteri pi\u00f9 a destra della stringa.
Sintassi:
Argomenti:
Esempi:
right('Hello World',5) \u2192 'World'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#rpad","title":"rpad","text":"Restituisce una stringa riempita a destra della larghezza specificata, utilizzando un carattere di riempimento. Se la larghezza della destinazione \u00e8 inferiore alla lunghezza della stringa, la stringa viene troncata.
Sintassi:
Argomenti:
Esempi:
rpad('Hello', 10, 'x') \u2192 'Helloxxxxx'\nrpad('Hello', 3, 'x') \u2192 'Hel'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#rtrim","title":"rtrim","text":"Rimuove la stringa pi\u00f9 lunga contenente solo i caratteri specificati (un carattere spazio come impostazione predefinita) dalla fine della stringa.
Sintassi:
Argomenti:
Esempi:
rtrim(' hello world ') \u2192 ' hello world'\nrtrim('testxxzx', 'xyz') \u2192 'test'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#strpos","title":"strpos","text":"Restituisce la prima posizione di corrispondenza di una sottostringa dentro in un'altra stringa o 0 se la sottostringa non viene trovata.
Sintassi:
Argomenti:
Esempi:
strpos('HELLO WORLD','WORLD') \u2192 7\nstrpos('HELLO WORLD','GOODBYE') \u2192 0\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#substr","title":"substr","text":"Restituisce una parte di una stringa.
Sintassi:
[ ] indica componenti opzionali
Argomenti:
Esempi:
substr('HELLO WORLD',3,5) \u2192 'LLO W'\nsubstr('HELLO WORLD',3,5) \u2192 'WORLD'\nsubstr('HELLO WORLD',-5) \u2192 'WORLD'\nsubstr('HELLO',3,-1) \u2192 'LL'\nsubstr('HELLO WORLD',-5,2) \u2192 'WO'\nsubstr('HELLO WORLD',-5,-1) \u2192 'WORL'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#title","title":"title","text":"Converte tutte le parole in \"title case\" (tutte le parole in minuscolo con la prima lettera maiuscola)
Sintassi:
Argomenti:
Esempi:
title('hello WOrld') \u2192 'Hello World'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#to_string","title":"to_string","text":"Converte un numero in stringa.
Sintassi:
Argomenti:
Esempi:
to_string(123.23) \u2192 '123.23'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#trim","title":"trim","text":"Rimuove tutti gli spazi vuoti (spazi, tabulazioni, etc.) all'inizio e alla fine di una stringa.
Sintassi:
Argomenti:
Esempi:
trim(' hello world ') \u2192 'hello world'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#upper","title":"upper","text":"Converte una stringa in lettere maiuscole.
Sintassi:
Argomenti:
Esempi:
upper('hello WOrld') \u2192 'HELLO WORLD'\n
","tags":["gruppo"]},{"location":"gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico/#wordwrap","title":"wordwrap","text":"Restituisce una stringa posta a capo ad un massimo/minimo numero di caratteri.
Sintassi:
Argomenti:
Esempi:
wordwrap('UNIVERSITY OF QGIS',13) \u2192 'UNIVERSITY OF \nQGIS'\nwordwrap('UNIVERSITY OF QGIS',-3) \u2192 'UNIVERSITY OF \nQGIS'\n
Per legende con testo lungo, tipico delle legende per carte geologiche:
wordwrap(@symbol_label ,50)\n
","tags":["gruppo"]},{"location":"gr_funzioni/variabili/_file_tipo/","title":"nome_variabile","text":"--
"},{"location":"gr_funzioni/variabili/_file_tipo/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/_file_tipo/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/_file_tipo/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/_file_tipo/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/algorithm_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/algorithm_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/algorithm_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/algorithm_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/algorithm_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/animation_end_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/animation_end_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/animation_end_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/animation_end_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/animation_end_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/animation_interval/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/animation_interval/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/animation_interval/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/animation_interval/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/animation_interval/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/animation_start_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/animation_start_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/animation_start_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/animation_start_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/animation_start_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_feature/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_feature/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_feature/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_feature/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_feature/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featureid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_featureid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featureid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_featureid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featureid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_featurenumber/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_filename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_filename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_filename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_filename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_filename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_geometry/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_geometry/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_geometry/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_geometry/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_geometry/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layerid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_layerid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layerid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_layerid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layerid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layername/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_layername/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layername/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_layername/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_layername/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_pagename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_pagename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_pagename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_pagename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_pagename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/atlas_totalfeatures/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/canvas_cursor_point/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/cluster_color/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/cluster_color/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/cluster_color/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/cluster_color/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/cluster_color/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/cluster_size/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/cluster_size/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/cluster_size/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/cluster_size/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/cluster_size/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_feature/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_feature/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_feature/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_feature/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_feature/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_geometry/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_geometry/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_geometry/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_geometry/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_geometry/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_feature/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_parent_feature/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_feature/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_parent_feature/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_feature/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/current_parent_geometry/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/form_mode/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/form_mode/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/form_mode/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/form_mode/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/form_mode/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/frame_duration/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/frame_duration/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/frame_duration/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/frame_duration/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/frame_duration/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/frame_number/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/frame_number/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/frame_number/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/frame_number/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/frame_number/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/frame_rate/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/frame_rate/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/frame_rate/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/frame_rate/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/frame_rate/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxx/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_maxy/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_minx/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_minx/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_minx/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_minx/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_minx/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_miny/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/fullextent_miny/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_miny/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/fullextent_miny/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/fullextent_miny/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_part_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_part_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_num/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_part_num/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_num/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_part_num/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_part_num/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_point_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_point_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_num/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_point_num/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_num/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_point_num/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_point_num/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/geometry_ring_num/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/grid_axis/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/grid_axis/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/grid_axis/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/grid_axis/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/grid_axis/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/grid_number/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/grid_number/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/grid_number/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/grid_number/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/grid_number/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/item_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/item_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/item_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/item_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/item_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/item_uuid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/item_uuid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/item_uuid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/item_uuid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/item_uuid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_crs/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_crs/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_crs/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_crs/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_crs/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_ids/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_ids/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_ids/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_ids/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_ids/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layer_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layer_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layer_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layer_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layer_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layers/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layers/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layers/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layers/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layers/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_dpi/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_dpi/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_dpi/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_dpi/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_dpi/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_numpages/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_numpages/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_numpages/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_numpages/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_numpages/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_page/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_page/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_page/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_page/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_page/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageheight/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_pageheight/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageheight/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_pageheight/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageheight/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_pageoffsets/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/layout_pagewidth/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_column_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_column_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_column_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_column_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_column_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_by_map/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_filter_out_atlas/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_split_layers/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_split_layers/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_split_layers/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_split_layers/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_split_layers/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_title/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_title/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_title/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_title/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_title/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/legend_wrap_string/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_acronym/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_definition/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_definition/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_definition/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_definition/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_definition/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_description/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_description/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_description/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_description/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_description/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_ellipsoid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_proj4/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_projection/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_projection/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_projection/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_projection/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_projection/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_crs_wkt/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_end_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_end_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_end_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_end_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_end_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_center/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent_center/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_center/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent_center/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_center/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_height/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent_height/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_height/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent_height/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_height/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_width/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_extent_width/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_width/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_extent_width/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_extent_width/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_interval/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_interval/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_interval/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_interval/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_interval/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_layer_ids/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_layer_ids/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_layer_ids/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_layer_ids/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_layer_ids/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_layers/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_layers/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_layers/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_layers/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_layers/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_rotation/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_rotation/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_rotation/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_rotation/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_rotation/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_scale/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_scale/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_scale/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_scale/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_scale/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_start_time/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_start_time/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_start_time/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_start_time/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_start_time/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/map_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/map_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/map_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/map_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/map_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_folder/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_folder/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_folder/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_folder/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_folder/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_group/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_group/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_group/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_group/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_group/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/model_path/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/model_path/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/model_path/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/model_path/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/model_path/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/notification_message/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/notification_message/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/notification_message/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/notification_message/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/notification_message/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/parent/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/parent/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/parent/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/parent/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/parent/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_abstract/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_abstract/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_abstract/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_abstract/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_abstract/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_area_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_area_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_area_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_area_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_area_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_author/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_author/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_author/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_author/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_author/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_basename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_basename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_basename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_basename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_basename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_creation_date/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_creation_date/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_creation_date/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_creation_date/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_creation_date/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_arconym/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_definition/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_definition/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_definition/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_definition/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_definition/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_description/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_description/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_description/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_description/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_description/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_ellipsoid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_proj4/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_crs_wkt/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_distance_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_distance_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_distance_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_distance_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_distance_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_ellipsoid/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_filename/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_filename/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_filename/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_filename/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_filename/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_folder/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_folder/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_folder/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_folder/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_folder/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_home/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_home/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_home/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_home/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_home/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_identifier/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_identifier/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_identifier/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_identifier/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_identifier/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_keywords/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_keywords/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_keywords/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_keywords/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_keywords/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_last_saved/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_last_saved/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_last_saved/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_last_saved/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_last_saved/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_path/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_path/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_path/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_path/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_path/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_title/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_title/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_title/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_title/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_title/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/project_units/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/project_units/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/project_units/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/project_units/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/project_units/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_locale/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_locale/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_locale/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_locale/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_locale/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_os_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_os_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_os_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_os_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_os_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_platform/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_platform/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_platform/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_platform/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_platform/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_release_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_release_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_release_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_release_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_release_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_short_version/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_short_version/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_short_version/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_short_version/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_short_version/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_version/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_version/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version_no/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/qgis_version_no/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version_no/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/qgis_version_no/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/qgis_version_no/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/row_number/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/row_number/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/row_number/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/row_number/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/row_number/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/scale_value/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/scale_value/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/scale_value/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/scale_value/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/scale_value/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/snapping_results/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/snapping_results/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/snapping_results/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/snapping_results/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/snapping_results/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_angle/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_angle/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_angle/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_angle/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_angle/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_color/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_color/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_color/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_color/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_color/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_id/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_id/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_id/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_id/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_id/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_label/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_label/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_label/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_label/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_label/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_count/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_layer_index/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_column/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/symbol_marker_row/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/user_account_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/user_account_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/user_account_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/user_account_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/user_account_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/user_full_name/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/user_full_name/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/user_full_name/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/user_full_name/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/user_full_name/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/value/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/value/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/value/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/value/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/value/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/variabili/","title":"Variabili","text":"
Funzionalit\u00e0 introdotta da Nyall Dawson nella QGIS 2.12 Lyon
Questo gruppo contiene variabili dinamiche relative all'applicazione, al file di progetto e ad altre impostazioni. Significa che alcune funzioni potrebbero non essere disponibili in base al contesto:
In QGIS, puoi utilizzare le variabili per memorizzare dati utili con valori ricorrenti (ad esempio il titolo del progetto o il nome completo dell\u2019utente) che possono essere utilizzati nelle espressioni. Le variabili possono essere definite a livello globale dell\u2019applicazione, a livello di progetto, a livello di layer, a livello di composizione e a livello di elemento del compositore. Proprio come le regole CSS a cascata, le variabili possono essere sovrascritte, ad esempio una variabile a livello di progetto sovrascrive le variabili di livello globale di qualsiasi applicazione impostate con lo stesso nome.
Puoi utilizzare queste variabili per creare stringhe di testo o altre espressioni personalizzate utilizzando il carattere '@' prima del nome della variabile.
Video di Nyall Dawson sulle espressioni, varibile e sovrascrittura definita dai dati
"},{"location":"gr_funzioni/variabili/variabili/#elenco-variabili","title":"Elenco variabili","text":"Riguardano (aggiornato a QGIS 3.20 Odense):
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/variabili/variabili/#screenshot-livelli","title":"Screenshot livelli","text":"Gruppo sul calcolatore di campi,Seleziona per espressione
Generatore di geometria- stile
Selezione per espressione
Calcolatore di campi,Seleziona per espressione
Compositore di stampe
--
"},{"location":"gr_funzioni/variabili/with_variable/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/with_variable/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/with_variable/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/with_variable/#osservazioni","title":"osservazioni","text":"--
"},{"location":"gr_funzioni/variabili/zoom_level/","title":"nome_variabile","text":"
--
"},{"location":"gr_funzioni/variabili/zoom_level/#sintassi","title":"Sintassi","text":"--
"},{"location":"gr_funzioni/variabili/zoom_level/#esempi","title":"Esempi","text":"bla bla\n
"},{"location":"gr_funzioni/variabili/zoom_level/#nota-bene","title":"nota bene","text":"--
"},{"location":"gr_funzioni/variabili/zoom_level/#osservazioni","title":"osservazioni","text":"--
"},{"location":"img/","title":"Index","text":""},{"location":"img/#cartella-immagini","title":"Cartella
Immagini
","text":"Questo cartella contiene gli screenshot, suddivisi per argomento, utilizzati nei vari gruppi di funzioni e/o espressioni.
"},{"location":"release/intro_novita/","title":"Novit\u00e0","text":"Abstract
In questa sezione verranno documentate le principali novit\u00e0 implementate nel calcolatore di campi e tabella degli attributi, come per esempio nuove funzioni o nuove funzionalit\u00e0 legate alle tabelle.
"},{"location":"release/intro_novita/#release","title":"Release","text":"Release Data changelog nuove funzioni numero QGIS 3.32 Lima 23/06/2023 ltrim, rtrim +2 QGIS 3.30 's-Hertogenbosch 03/03/2023 load_layer, is_feature_valid(), is_attribute_valid(), x_at, y_at, z_at, m_at +4 QGIS 3.28 Firenze 21/10/2022 make_valid, geometries_to_array, concave_hull, shared_paths, @feature, @id e @geometry +7 QGIS 3.26 Buones Aires 18/06/2022 BETWEEN, NOT BETWEEN +2 QGIS 3.24 Tisler 18/02/2022 scale, triangular_wave, square_wave, wave, triangular_wave_randomized, square_wave_randomized, wave_randomized, overlay_nearest+, apply_dash_pattern, force_polygon_cw, force_polygon_ccw, densify_by_count, densify_by_distance, roundness, overlay_intersects+, geometry_n+, geometry_type, get_feature+, represent_attributes, map_prefix_keys, url_encode, rotate +17 QGIS 3.22 Bia\u0142owie\u017ca 22/10/2021 exif, exif_geotag, sinuosity, $z, affine_transform, straight_distance_2d, vertex_as_point, vertex_z +8 QGIS 3.20 Odense 21/06/2021 length3D, array_count, array_priorize, array_replace, mime_type +5 QGIS 3.18 Z\u00fcrich 22/02/2021 UUID, array_get, array_min, arra_max, array_majority, array_sum, array_mean, array_median, map_credits, @layer_crs +10 QGIS 3.16 Hannover 23/10/2020 main_angle, to_decimal, overlay_* +10 QGIS 3.14 Pi 19/06/2020 ascii, is_multipart, min_z, max_z, min_m, max_m, close_line, make_date, make_time, make_datetime, make_interval +11 QGIS 3.12 Bucure\u0219ti 21/02/2020 rand, randf, is_valid, is_empty, is_empty_or_null, rotate, datetime_from_epoch, format_date, hash, md5, sha256, geom_to_wkb, geom_from_wkb +13 QGIS 3.10 A Coru\u00f1a 25/10/2019 attributes, to_date, to_datetime, to_time, collect_geometries, make_line +6 QGIS 3.8 Zanzibar 21/06/2019 concatenate_unique, array_all, ecc... QGIS 3.6 Noosa 22/02/2019 force_rhr, make_rectangle_3points, make_square, decode_uri, nullif, try, from_jsom, to_json, sqlite_fecth_and_increment ecc... QGIS 3.4 Madeira 26/10/2018 raster_value(), line_substring, array_foreach, generate_series, array_filter, to_dm, to_dms, hstore_to_map, json_to_map, map_to_hstore, map_to_json, ecc... QGIS 3.2 Bonn 22/06/2018 nuove variabili, ecc... QGIS 3.0 Girona 23/02/2018 vedi changelog"},{"location":"release/intro_novita/#grafico","title":"Grafico","text":""},{"location":"release/novita_30/","title":"Novit\u00e0 rilevanti introdotte nella 3.0 Girona","text":"https://www.qgis.org/it/site/forusers/visualchangelog30/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_30/#changelog","title":"Changelog","text":"Expressions
","tags":["novit\u00e0"]},{"location":"release/novita_310/","title":"Novit\u00e0 rilevanti introdotte nella 3.10 A Coru\u00f1a","text":"https://www.qgis.org/it/site/forusers/visualchangelog310/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_310/#nuove-funzioni","title":"Nuove funzioni","text":"","tags":["novit\u00e0"]},{"location":"release/novita_310/#gruppo-record-e-attributi","title":"Gruppo Record e Attributi","text":"https://github.com/qgis/QGIS/pull/30440
","tags":["novit\u00e0"]},{"location":"release/novita_310/#aggiorna-campi","title":"Aggiorna campi","text":"[https://github.com/qgis/QGIS/pull/31065
","tags":["novit\u00e0"]},{"location":"release/novita_310/#gruppo-data","title":"Gruppo Data","text":"https://github.com/qgis/QGIS/pull/31231
","tags":["novit\u00e0"]},{"location":"release/novita_310/#memorizza-filtro-tabella-attributi","title":"Memorizza Filtro tabella attributi","text":"https://github.com/qgis/QGIS/pull/31349
","tags":["novit\u00e0"]},{"location":"release/novita_310/#gruppo-geometria","title":"Gruppo Geometria","text":"make_line
, ora accetta anche arraycollect_geometries
https://github.com/qgis/QGIS/pull/31480
","tags":["novit\u00e0"]},{"location":"release/novita_312/","title":"Novit\u00e0 rilevanti introdotte nella 3.12 Bucaresti","text":"https://www.qgis.org/it/site/forusers/visualchangelog312/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_312/#nuove-funzioni","title":"Nuove funzioni","text":"https://github.com/qgis/QGIS/pull/32630 (chiuso)
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-matematica","title":"Gruppo Matematica","text":"rand
randf
qui PR: https://github.com/qgis/QGIS/pull/33204
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-geometria","title":"Gruppo Geometria","text":"is_valid
qui PR: https://github.com/qgis/QGIS/pull/32900
geom_from_wkb
geom_to_wkb
qui PR: https://github.com/qgis/QGIS/pull/32561
is_empty
is_empty_or_null
qui PR: https://github.com/qgis/QGIS/pull/33333
rotate
qui PR: https://github.com/qgis/QGIS/pull/33125
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-data-e-ora","title":"Gruppo Data e ora","text":"datetime_from_epoch
qui PR: https://github.com/qgis/QGIS/pull/32551
format_date
qui PR: https://github.com/qgis/QGIS/pull/32908
","tags":["novit\u00e0"]},{"location":"release/novita_312/#gruppo-conversioni","title":"Gruppo Conversioni","text":"hash
(value, method) md5
(value)sha256
(value)qui PR: https://github.com/qgis/QGIS/pull/31726
","tags":["novit\u00e0"]},{"location":"release/novita_312/#tag-espressioni","title":"tag espressioni","text":"PR: https://github.com/qgis/QGIS/pull/33197
","tags":["novit\u00e0"]},{"location":"release/novita_312/#tabella-attributi","title":"Tabella attributi","text":"PR: https://github.com/qgis/QGIS/pull/33322 -- chiusa
","tags":["novit\u00e0"]},{"location":"release/novita_312/#interfaccia","title":"Interfaccia","text":"List referenced layer values
qui PR: https://github.com/qgis/QGIS/pull/33436
Stored expressions
https://github.com/qgis/QGIS/pull/33437 -- IDEA MIA!!!Organize Columns
https://github.com/qgis/QGIS/pull/33918 -- ANCORA APERTA!!!https://www.qgis.org/it/site/forusers/visualchangelog314/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_314/#nuove-funzioni","title":"Nuove funzioni","text":"https://github.com/qgis/QGIS/pull/36988
","tags":["novit\u00e0"]},{"location":"release/novita_316/","title":"Novit\u00e0 rilevanti introdotte nella 3.16 Hannover","text":"https://www.qgis.org/it/site/forusers/visualchangelog316/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_316/#miglioramenti-help-in-linea","title":"Miglioramenti help in linea","text":"help in linea: https://github.com/qgis/QGIS/pull/37532
help in linea : https://github.com/qgis/QGIS/pull/37771
","tags":["novit\u00e0"]},{"location":"release/novita_316/#nuove-funzioni","title":"Nuove funzioni","text":"main_angle
: https://github.com/qgis/QGIS/pull/37798to_decimal()
: https://github.com/qgis/QGIS/pull/38025overlay_intersects(layer[,expression][,filter][,limit][,cache])\noverlay_contains(layer[,expression][,filter][,limit][,cache])\noverlay_crosses(layer[,expression][,filter][,limit][,cache])\noverlay_equals(layer[,expression][,filter][,limit][,cache])\noverlay_touches(layer[,expression][,filter][,limit][,cache])\noverlay_disjoint(layer[,expression][,filter][,limit][,cache])\noverlay_within(layer[,expression][,filter][,limit][,cache])\noverlay_nearest(layer[,expression][,filter][,limit][,max_distance][,cache])\n
https://www.qgis.org/it/site/forusers/visualchangelog318/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_318/#espressioni","title":"Espressioni","text":"UUID
https://github.com/qgis/QGIS/pull/39414Array_get
(supporta indici negativi) https://github.com/qgis/QGIS/pull/39921array_min/max
, array_majority
, array_sum/mean/median
https://github.com/qgis/QGIS/pull/40364map_credits
https://github.com/qgis/QGIS/pull/40919@layer_crs
recente
singola linea https://github.com/qgis/QGIS/pull/41545https://www.qgis.org/it/site/forusers/visualchangelog32/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_32/#generatore-di-espressioni-piu-utile","title":"Generatore di espressioni pi\u00f9 utile.","text":"Il generatore di espressioni ora semplifica la creazione di espressioni in QGIS!
Ctrl + clic
su un nome di funzione nell'espressione corrente aprir\u00e0 automaticamente l'aiuto per quella funzioneconsente l'implementazione di filtri complessi e dinamici all'interno di moduli di attributo QGIS. La funzionalit\u00e0 pu\u00f2 essere utilizzata per implementare moduli \"drill-down\" all'interno di QGIS, in cui i valori disponibili in un campo dipendono dai valori di altri campi:
Questa funzionalit\u00e0 consente agli utenti di creare espressioni \"value-relation\" basate sul valore corrente di un altro campo nella stessa form. Quando l'utente modifica il valore di un campo, le scelte disponibili in tutti i campi correlati vengono filtrate in modo che corrispondano al nuovo valore, consentendo una strategia di filtraggio gerarchica (drill down o cascading) all'interno di un modulo o nella tabella degli attributi.
qui un video di Alessandro Pasotti
Le espressioni implementate per realizzare quanto descritto sopra sono tre, una funzione e due variabili:
intersects( buffer(@current_geometry ,1000),$geometry)
NB: nella cartella esempi trovate un geopackage con i dati e un progetto esempio
video:
","tags":["novit\u00e0"]},{"location":"release/novita_320/","title":"Novit\u00e0 rilevanti introdotte nella 3.20 Odense","text":"https://www.qgis.org/it/site/forusers/visualchangelog320/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_320/#espressioni","title":"espressioni","text":"length3D
: https://github.com/qgis/QGIS/pull/41127array_count
: https://github.com/qgis/QGIS/pull/41338array_priorize
: https://github.com/qgis/QGIS/pull/41338array_replace
: https://github.com/qgis/QGIS/pull/41338mime_type
: https://github.com/qgis/QGIS/pull/41191alias
: https://github.com/qgis/QGIS/pull/42179https://github.com/qgis/QGIS/pull/41276
https://github.com/qgis/QGIS/pull/42026
","tags":["novit\u00e0"]},{"location":"release/novita_320/#guiui","title":"GUI/UI","text":"https://changelog.qgis.org/en/qgis/version/3.22/
"},{"location":"release/novita_322/#espressioni","title":"Espressioni","text":"exif() e exif_geotag()
: https://github.com/qgis/QGIS/pull/44081sotto elenco completo dei tag disponibili:
Exif.GPSInfo.GPSAltitude\nExif.GPSInfo.GPSAltitudeRef\nExif.GPSInfo.GPSDateStamp\nExif.GPSInfo.GPSLatitude\nExif.GPSInfo.GPSLatitudeRef\nExif.GPSInfo.GPSLongitude\nExif.GPSInfo.GPSLongitudeRef\nExif.GPSInfo.GPSProcessingMethod\nExif.GPSInfo.GPSTimeStamp\nExif.GPSInfo.GPSVersionID\nExif.Image.0xea1c\nExif.Image.Artist\nExif.Image.DateTime\nExif.Image.ExifTag\nExif.Image.GPSTag\nExif.Image.ImageLength\nExif.Image.ImageWidth\nExif.Image.Make\nExif.Image.Model\nExif.Image.ResolutionUnit\nExif.Image.Software\nExif.Image.XPKeywords\nExif.Image.XResolution\nExif.Image.YCbCrPositioning\nExif.Image.YResolution\nExif.Iop.InteroperabilityVersion\nExif.Iop.RelatedImageLength\nExif.Iop.RelatedImageWidth\nExif.Photo.0xea1c\nExif.Photo.ColorSpace\nExif.Photo.ComponentsConfiguration\nExif.Photo.Contrast\nExif.Photo.DateTimeDigitized\nExif.Photo.DateTimeOriginal\nExif.Photo.DigitalZoomRatio\nExif.Photo.ExifVersion\nExif.Photo.ExposureBiasValue\nExif.Photo.ExposureMode\nExif.Photo.ExposureProgram\nExif.Photo.ExposureTime\nExif.Photo.FNumber\nExif.Photo.Flash\nExif.Photo.FlashpixVersion\nExif.Photo.FocalLength\nExif.Photo.GainControl\nExif.Photo.ISOSpeedRatings\nExif.Photo.ImageUniqueID\nExif.Photo.InteroperabilityTag\nExif.Photo.LightSource\nExif.Photo.MaxApertureValue\nExif.Photo.MeteringMode\nExif.Photo.PixelXDimension\nExif.Photo.PixelYDimension\nExif.Photo.Saturation\nExif.Photo.SceneCaptureType\nExif.Photo.Sharpness\nExif.Photo.UserComment\nExif.Photo.WhiteBalance\nExif.Thumbnail.Compression\nExif.Thumbnail.JPEGInterchangeFormat\nExif.Thumbnail.JPEGInterchangeFormatLength\nExif.Thumbnail.ResolutionUnit\nExif.Thumbnail.XResolution\nExif.Thumbnail.YResolution\n
- exif_geotag()
sinuosity
: https://github.com/qgis/QGIS/pull/44401straight_distance_2d
: https://github.com/qgis/QGIS/pull/44767$z
: https://github.com/qgis/QGIS/pull/44776affine_transform
: https://github.com/qgis/QGIS/pull/44771https://github.com/qgis/QGIS/pull/45484
"},{"location":"release/novita_322/#tabella-attributi","title":"Tabella attributi","text":"saranno aggiunte in futuro maggiori info
selezione tramite espressione
: https://github.com/qgis/QGIS/pull/44835$vertex_as_point and $vertex_z functions
: https://github.com/qgis/QGIS/pull/44786In Memorium: Questa versione prende il nome \"Tisler\" da una piccola isola norvegese che era uno dei luoghi di visita preferiti di H\u00e5vard Tveite, scomparso nel maggio 2021. H\u00e5vard era un membro molto attivo della comunit\u00e0 QGIS, fornendo un prezioso contributo alla documentazione, sviluppando numerosi plugin e occupandosi del QGIS Resources Sharing Repository per citare solo alcuni dei suoi contributi. La mappa nella schermata iniziale di QGIS 3.24 \u00e8 una mappa di orientamento creata da H\u00e5vard. Gli piaceva passare un po' di tempo ogni anno a creare mappe a Tisler.
https://changelog.qgis.org/en/qgis/version/3.24/
"},{"location":"release/novita_324/#espressioni","title":"Espressioni","text":""},{"location":"release/novita_324/#gruppo-geometria","title":"Gruppo Geometria","text":"funzione link PR descrizione scale https://github.com/qgis/QGIS/pull/45505 nuova funzione triangular/square/curved https://github.com/qgis/QGIS/pull/45583 nuove funzione (6) overlay_nearest https://github.com/qgis/QGIS/pull/45744 miglioramenti apply_dash_pattern https://github.com/qgis/QGIS/pull/45734 nuova funzione force_polygon_cw/ccw https://github.com/qgis/QGIS/pull/45718 nuove funzione (2) densify_by_count/distance https://github.com/qgis/QGIS/pull/45894 nuove funzione (2) roundness https://github.com/qgis/QGIS/pull/45154 nuova funzione overlay_intersects https://github.com/qgis/QGIS/pull/46185 miglioramenti overlay_intersects https://github.com/qgis/QGIS/pull/46683 miglioramenti geometry_n https://github.com/qgis/QGIS/pull/46684 modifica definizione geometry_type https://github.com/qgis/QGIS/pull/46716 nuova funzione rotate https://github.com/qgis/QGIS/pull/45748 miglioramento"},{"location":"release/novita_324/#gruppo-record-e-attributi","title":"Gruppo Record e Attributi","text":"funzione link PR descrizione get_feature https://github.com/qgis/QGIS/pull/43352 miglioramenti represent_attributes https://github.com/qgis/QGIS/pull/46502 nuova funzione"},{"location":"release/novita_324/#gruppo-array","title":"Gruppo Array","text":"funzione link PR descrizione array_remove_at https://github.com/qgis/QGIS/pull/46942 miglioramento"},{"location":"release/novita_324/#gruppo-maps","title":"Gruppo Maps","text":"funzione link PR descrizione map_prefix_keys https://github.com/qgis/QGIS/pull/46087 nuova funzione url_encode https://github.com/qgis/QGIS/pull/46384 nuova funzione"},{"location":"release/novita_324/#pr-chiusa","title":"PR chiusa","text":"annotazioni
: https://github.com/qgis/QGIS/pull/45114 chiusa!!!
esponi i nomi dei campi da layer richiamati
: https://github.com/qgis/QGIS/pull/46505
ricerca migliorata
: https://github.com/qgis/QGIS/pull/46672
qui i tag per la ricerca.
"},{"location":"release/novita_324/#guiux","title":"GUI/UX","text":"apri tabella attributi
: https://github.com/qgis/QGIS/pull/46328| Nuovo bottone!
Gli utenti possono utilizzare espressioni come array(1,2,3)
o map('key1','value','key2','value')
espressioni nel calcolatore di campo e nella barra dei campi della tabella degli attributi per aggiornare i valori. https://github.com/qgis/QGIS/pull/47046
https://github.com/qgis/QGIS/pull/47049
"},{"location":"release/novita_326/","title":"Novit\u00e0 rilevanti introdotte in QGIS 3.26","text":"\"La versione ricca di funzionalit\u00e0 di QGIS 3.26 Buenos Aires include un vasto numero di miglioramenti a una gamma di funzionalit\u00e0 di base avanzate. Ci\u00f2 include numerosi miglioramenti alle funzionalit\u00e0 3D, strumenti migliorati per le nuvole di punti e l'introduzione di un nuovo framework di tracciatura dei profili per la creazione di sezioni trasversali e profili di elevazione. Soprattutto, il nuovo framework di plottaggio utilizza le funzionalit\u00e0 di rendering QGIS native e viene fornito con tutte le propriet\u00e0 di stile, simbologia e guida dei dati che tutti conosciamo e amiamo subito!\"
https://changelog.qgis.org/en/qgis/version/3.26/
"},{"location":"release/novita_326/#espressioni","title":"Espressioni","text":""},{"location":"release/novita_326/#gruppi","title":"Gruppi","text":"funzione link PR descrizione BETWEEN e NOT BETWEEN https://github.com/qgis/QGIS/pull/47771 Nuovi Operatori @symbol_frame https://github.com/qgis/QGIS/pull/48152 Nuova variabile @parent https://github.com/qgis/QGIS/pull/48488 Miglioramento"},{"location":"release/novita_326/#gui-field-calc","title":"GUI Field Calc","text":"copia valore espressione anteprima fielc calc
: https://github.com/qgis/QGIS/pull/47680omogenizzate i valori booleani
: https://github.com/qgis/QGIS/pull/47866aggiorna descrizione operatore AND
: https://github.com/qgis/QGIS/pull/48118scorrimento tabella attributi in orizzontale
: https://github.com/qgis/QGIS/pull/47764Nomi dei campi definiti dall'utente nell'esportazione: https://github.com/qgis/QGIS/pull/47630
"},{"location":"release/novita_328/","title":"Novit\u00e0 rilevanti introdotte in QGIS 3.28 Firenze","text":"QGIS 3.28 Firenze introduces various feature updates, UX modifications, usability enhancements, and improved integration with various proprietary services and data backends. It is also set to introduce the long-awaited features provided by previous releases into the long-term support release, as outlined in the QGIS Roadmap.
The splash screen features a rare and extraordinary 1847 map of Firenze, or Florence, Italy by Giuseppe Molini. This magnificently engraved map was originally drawn in 1731 by the Florentine architect Ferdinando Ruggieri. Oriented to the south, the map covers the old walled center of Florence as it extends on both sides of the Arno River. The upper right quadrant features the lily symbol of Florence. Though printed in 1847, this map has been prepared in the 17th-century style by copperplate engraving on thick-laid paper. Firenze in 1847 was on the cusp of political transformation. One year following the production of this rare map the Grand Duke of Tuscany, responding to political demonstrations throughout Florence, granted Tuscany its first constitution.
https://changelog.qgis.org/en/qgis/version/3.28/
genesi dello splashscreen:
https://github.com/pigreco/splashscreen_QGIS328_Firenze
"},{"location":"release/novita_328/#espressioni","title":"Espressioni","text":"nuove espressioni:
funzione link PR descrizione Adds the $m, $z_at and $m_at expressions https://github.com/qgis/QGIS/pull/49765 CHIUSA!!! make_valid e geometries_to_array https://github.com/qgis/QGIS/pull/49993 nuove funzioni concave_hull https://github.com/qgis/QGIS/pull/48865 nuova funzione to_int https://github.com/qgis/QGIS/pull/49990 PR ancora aperta shared_paths https://github.com/qgis/QGIS/pull/50080 nuova funzione @feature, @id e @geometry https://github.com/qgis/QGIS/pull/50134 nuove variabiliAnche nel gruppo Campi e Valore:
"},{"location":"release/novita_328/#gui-field-calc","title":"GUI Field Calc","text":"Per evitare di perdere le modifiche alle espressioni nel Field Calc
The 3.30 's-Hertogenbosch release of the groundbreaking QGIS project introduces a wide range of changes and optimizations from the QGIS developer community.
The splash screen features a fragment of the \u201cGemeentekaart\u201d, or Municipality map, of 's-Hertogenbosch from 1867. It is part of a series of 1200 maps of all the communities in The Netherlands from that time, which were published in an atlas for each of the 11 regions. All maps were drawn in the same size, although for large municipalities a double format was used and scaled to match the page. The series was internationally rewarded because of its accuracy and completeness. The map was drawn by Jacob Kuyper (1821-1908), the most famous geographer and cartographer of his time in The Netherlands. Text and splash map image provided by atlasandmap.com
Importantly, support for backward compatibility of Symbol Styling has been removed for QGIS 3.16, providing significant optimizations to the project file structure, but limiting the capability of older releases of QGIS for rendering symbologies developed with later releases.
The native GeoNode integration has also been migrated to an external plugin, leveraging the powerful extensions to the QGIS API for plugins implemented in recent releases.
Users can also look forward to new functionality and UX enhancements, including support for raster attribute tables, intelligent and configurable sorting for layer loading, improvements to GPS utilities, more dynamic form widgets, native rich media previews for attachments, better integration with cloud services, extensions to the QGIS metadata standards, and a host of other noteworthy additions.
https://changelog.qgis.org/en/qgis/version/3.30/
"},{"location":"release/novita_330/#espressioni","title":"Espressioni","text":"nuove espressioni:
funzione link PR descrizione load_layer (solo in Processing) https://github.com/qgis/QGIS/pull/51293 nuova funzione is_feature_valid() e is_attribute_valid() https://github.com/qgis/QGIS/pull/51303 nuove funzioni feature_id https://github.com/qgis/QGIS/pull/51441 nuova funzione [ltrim], [rtrim] https://github.com/qgis/QGIS/pull/51786 nuove funzioni - ancora congelate!!! x_at, y_at, z_at e m_at https://github.com/qgis/QGIS/pull/50853 nuove funzioni ($x_at() e $y_at() sono state deprecate)"},{"location":"release/novita_330/#tabella-degli-attributi","title":"Tabella degli attributi","text":"QGIS 3.32 is a major release of the QGIS Project that brings a significant advancement in geospatial technology to the Open Source World. The developer community has introduced several new features and improvements to leverage the potential of geospatial data.
Amongst numerous quality of life improvements across a broad spectrum of existing features, the 3.32 release features the long awaited functionality for Native Point Cloud Processing in QGIS, allowing QGIS Desktop to become a powerful processing utility for LiDAR data.
This milestone achievement is thanks in large part to the contributions of the community to the effective crowd funding campaign which funded this development, the QGIS community and Enhancement Proposals used for the effective governance of these contributions, the collaborative efforts of the development agencies involved, and of course the extraordinary contributions of individual developers who build these tools for the benefit of all.
This release also includes a wide variety of developer experience enhancements, extensions to new functionalities like the profile plots and processing frameworks, and a new framework for sensor data to tightly integrate QGIS with data collection apparatus and facilitate the creation of next-generation intelligent solutions.
QGIS is a community effort, and we would like to extend a big thank you to the developers, documenters, testers, and the many folks out there who volunteer their time and effort (or fund people to do so) to make these releases possible. From the QGIS community, we hope you enjoy this release! If you wish to donate time, money, or otherwise contribute towards making QGIS more awesome, please wander along to QGIS.ORG and lend a hand!
QGIS is supported by donors and sustaining members. A current list of donors who have made financial contributions large or small to the project can be seen on our list of donors. If you would like to become an official project sustaining member, please visit our sustaining member page for more details. Sponsoring QGIS helps us to fund our regular developer meetings, maintain project infrastructure, and fund bug-fixing efforts. A complete list of current sponsors is provided below - our very great thank you to all of our sponsors!
QGIS is free software and you are under no obligation to pay anything to use it - in fact, we want to encourage people far and wide to use it regardless of their financial or social status - we believe that empowering people with spatial decision-making tools will result in a better society for all of humanity.
https://changelog.qgis.org/en/qgis/version/3.32/
"},{"location":"release/novita_332/#novita-versione","title":"Novit\u00e0 versione","text":"https://www.qgis.org/it/site/forusers/visualchangelog34/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_34/#nuovoi-gruppoi-funzionei-nel-calcolatore-di-campi","title":"Nuovo/i gruppo/i funzione/i nel calcolatore di campi","text":"","tags":["novit\u00e0"]},{"location":"release/novita_34/#nuove-funzioni","title":"Nuove funzioni","text":"prima \u2192 ora
array: 1, 2, 3 \u2192 [ 1, 2, 3 ]
prima \u2192 ora
map: one: 1, two: 2, 3: three \u2192 {'one': 1, 'two': 2, 3: 'three'}
https://www.qgis.org/it/site/forusers/visualchangelog36/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_36/#nuove-funzioni","title":"Nuove funzioni","text":"","tags":["novit\u00e0"]},{"location":"release/novita_36/#gruppo-geometria","title":"Gruppo Geometria","text":"https://www.qgis.org/it/site/forusers/visualchangelog38/index.html
","tags":["novit\u00e0"]},{"location":"release/novita_38/#nuove-funzioni","title":"Nuove funzioni","text":"","tags":["novit\u00e0"]},{"location":"release/novita_38/#gruppo-aggregates","title":"Gruppo Aggregates","text":"Intro
In questa sezioni sono raccolti i concetti fondamentali sulla tabella degli attributi. La conoscenza di questi concetti permette di velocizzare il lavoro e capire il comportamento della tabella.
QGIS-DOC
La tabella degli attributi (F6) \u00e8 una tabella che contiene i dati alfanumerici (attributi) dello strato vettoriale e rappresenta una delle differenze fondamentali tra un vettore CAD e uno GIS.
Negli shapefile la tabella degli attributi rappresenta il file .dbf
che \u00e8 uno dei tre file fondamentali che caratterizzano lo shapefile (.shp, .shx, .dbf) la mancanza di uno di questi rende inutilizzabile lo strato.
Una tabella \u00e8 caratterizzata da righe (rosso) e colonne (verde), le righe rappresentano i record (nello specifico una feature), le colonne (o campi) rappresentano gli attributi:
Osservazione: la geometria \u00e8 anch'essa un attributo (speciale) ma non viene visualizzato nella tabella degli attributi per scelta degli sviluppatori. Per richimare tale attributo basta utilizzare $geometry
.
La tabella attributi di QGIS \u00e8 caratterizzata da vari elementi:
barra degli strumenti;
nella Vista Modulo \u00e8 presente un ulterione menu:
Questa barra \u00e8 visibile solo se \u00e8 attiva la modalit\u00e0 modifica e consente di applicare rapidamente calcoli a tutte o parte delle feature del livello. Questa barra utilizza le stesse espressioni del calcolatore di campi
Esempio di uso della barra (vedi screenshot sotto):
nel nostro caso (vedi screenshot sotto), se cliccassi su 4 (aggiorna tutto) aggiornerei tutti i valori del campo \"COD_REG\" con il valore 19; se cliccassi su 5 (Aggiorna selezione) aggiornerei solo le quattro righe selezionate.
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#corpo-della-tabella","title":"Corpo della tabella","text":"\u00c8 possibile interagire con il corpo della tabella usando il tasto destro del mouse: sulla intestazione dei campi oppure sulle celle:
nel caso dell'intestazione colonna compare un tendina con la possibilit\u00e0 di: 1. nascondere la colonna; 2. definire la larghezza della colonna; 3. Imposta Tutte le larghezze di Colonna (>= QGIS 3.18) 4. autodimensiona la larghezza colonna; 5. Autodimensione Tutte le Colonne (>= QGIS 3.18) 6. Organizza le colonne; 7. Ordina.
nel caso delle celle (vedi screen sotto) compare un tendina con la possibilit\u00e0 di: 1. selezionare tutte le righe (Ctrl+A); 2. Copiare il contenuto della cella; 3. Zoom alla Geometria; 4. Sposta alla Geometria; 5. Lampeggia Geometria; 6. Apri modalit\u00e0 Modulo
PS: Find/Replace \u00e8 un plugin!
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#rinominare-i-campi","title":"Rinominare i campi","text":"A partire da QGIS 2.16 \u00e8 possibile rinominare i campi della tabella degli attributi (shp, gpkg) con un semplice doppio click sul nome, dopo aver messo in modifica il layer:
riferimento : https://gis.stackexchange.com/a/206956/73605
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#dockify-tabella","title":"Dockify tabella","text":"nuovo pulsante (Novit\u00e0 introdotta nella QGIS 3.4) nella barra degli strumenti della tabella degli attributi per passare dalla modalit\u00e0 docked alla modalit\u00e0 finestra
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#memorizza-filtro-tabella-attributi","title":"Memorizza Filtro tabella attributi","text":"Salva Filtro
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#opzioni-extra-apertura-tabella","title":"Opzioni Extra Apertura Tabella","text":"PR >= QGIS 3.20
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tabella_attributi/tabella_attributi/#mostra-nella-tabella","title":"Mostra nella Tabella","text":"Mostra nella Tabella >= QGIS 3.24
","tags":["concetti","propedeutico","tabella","rinomina","campi"]},{"location":"tag_espressioni/funzioni-tags/","title":"Funzioni tags","text":"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":"tag_espressioni/tags_esplose/","title":"Tags esplose","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"},{"location":"webmaster/gbvitrano/","title":"Webmaster","text":"Questo sito \u00e8 stato realizzato da:
"},{"location":"webmaster/gbvitrano/#giovan-battista-vitrano","title":"Giovan Battista Vitrano","text":"Giovan Battista Vitrano \u00e8 famoso con il nikname gbvitrano
.
Dipendente del Comune di Palermo impegnato nell'Area tecnica della riqualificazione urbana e delle infrastrutture, specializzato in cose&robe e free&mancia. Civic hacker nel tempo libero e attivista di cose&robe... Per prima cosa, bisogna fare le robe, una prima fase \u00e8 mettere a fuoco le cose da fare, poi c\u2019\u00e8 una seconda fase in cui si da un nome alle singole robe da fare, perch\u00e9 fare delle robe senza sapere di cosa stai parlando \u00e8 stato sempre un problema! La terza fase \u00e8 pi\u00f9 complessa! Una volta che hai le robe giuste, \u00e8 tutta un\u2019altra cosa! Con queste robe, cose da fare c\u2019\u00e8 ne sono tante, dalle cose pi\u00f9 semplici alle cose pi\u00f9 complesse, senza dimenticarsi quelle robe li! Un esempio concreto \u00e8\u2026che con i dataset ci sono un sacco di cose che si fanno, perch\u00e9 fare le cose \u00e8 una roba concreta, \u00e8 un modello che funziona! Quando c\u2019\u00e8 voglia di fare le cose e le robe, \u00e8 solo questione di prime e seconde fasi\u2026 Se siamo in tanti a fare cose sul territorio sono sicuro che ci viene bene\u2026 c\u2019\u00e8 chi fa pi\u00f9 robe, c\u2019\u00e8 chi fa pi\u00f9 cose, ma se queste cose e queste robe li mettiamo al servizio del Paese, avremo tanti territori pieni di cose e di robe che funzionano e la gente ne ha bisogno, ma attenzione a con confondere le cose con le robe, altrimenti si impazzisce! Crozza\u2026docet
"},{"location":"webmaster/gbvitrano/#contatti","title":"Contatti","text":"\u00a0\u00a0 Twitter \u00a0\u00a0 Facebook \u00a0\u00a0 coseerobe.gbvitrano.it
"},{"location":"blog/archive/2023/","title":"2023","text":""},{"location":"blog/category/espressioni/","title":"espressioni","text":""},{"location":"blog/category/help/","title":"help","text":""},{"location":"blog/category/variabili/","title":"variabili","text":""},{"location":"blog/category/custom/","title":"custom","text":""},{"location":"blog/category/array/","title":"array","text":""},{"location":"blog/category/progetto/","title":"progetto","text":""},{"location":"blog/category/misure/","title":"misure","text":""},{"location":"blog/category/news/","title":"News","text":""},{"location":"tags/","title":"\ud83c\udff7\ufe0f Tags","text":"Abstract
Elenco di tag utilizzati per la ricerca
"},{"location":"tags/#adiacenza","title":"adiacenza","text":"