Skip to content

Commit

Permalink
add 83esiomo esempio
Browse files Browse the repository at this point in the history
  • Loading branch information
pigreco committed Aug 7, 2023
1 parent 50d5265 commit 103fe58
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 2 deletions.
2 changes: 1 addition & 1 deletion docs/changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,4 @@ data | descrizione
17/02/2023 | aggiunto [82esimo](esempi/estrarre_numeri_iniziali.md) esempio
12/03/2023 | aggiunto le novità rilevanti della [QGIS 3.30 's-Hertogenbosch](release/novita_330.md)
24/06/2023 | aggiunto le novità rilevanti della [QGIS 3.32 Lima](release/novita_332.md)

07/08/2023 | aggiunto [83esimo](esempi/spatial_join_condizionato.md) esempio
2 changes: 1 addition & 1 deletion docs/esempi/lista_esempi.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ nro|Esempio|Descrizione|Autore | Livello | funzioni utilizzate
80|[seleziona poligoni con max area sovrapposta](selezionare_poligoni_max_area_sovrapposta.md)|Come prendere attributi da layer sovrapposti|Salvatore Fiandaca | 3 | [maximum](../gr_funzioni/aggrega/aggrega_unico.md#maximum), [intersection](../gr_funzioni/geometria/geometria_unico.md#intersection), [area](../gr_funzioni/geometria/geometria_unico.md#area), [overlay_intersects](../gr_funzioni/geometria/geometria_unico.md#overlay_intersects), [$geometry](../gr_funzioni/geometria/geometria_unico.md#geometry)
81|[tracciare punti a distanza prefissata lungo una linea](tracciare_punti_adistanzaprefissata_lungo_linea.md)|Come tracciare puntia distanza prefissata lungo una linea|Salvatore Fiandaca | 3 | [overlay_nearest](../gr_funzioni/geometria/geometria_unico.md#overlay_nearest), [collect_geometries](../gr_funzioni/geometria/geometria_unico.md#collect_geometries), [line_interpolate_point](../gr_funzioni/geometria/geometria_unico.md#line_interpolate_point), [\$geometry](../gr_funzioni/geometria/geometria_unico.md#geometry), [array_foreach](../gr_funzioni/array/array_unico.md#array_foreach), [array](../gr_funzioni/array/array_unico.md#array)
82|[estrarre numeri inizialia](estrarre_numeri_iniziali.md)|Come estrarre i numeri iniziali di un testo|Salvatore Fiandaca | 3 | [regexp_replace](../gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico.md#regexp_replace), [array_foreach](../gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico.md#array_foreach), [string_to_array](../gr_funzioni/array/array_unico/#string_to_array)

83|[spatial join condizionato](spatial_join_condizionato.md)|Spatial join con condizione: nome città con popolazione maggiore|Salvatore Fiandaca | 4 | [@parent](../gr_funzioni/variabili/parent.md),[with_variable](../gr_funzioni/variabili/with_variable.md),[aggregate](../gr_funzioni/aggrega/aggrega_unico.md#aggregate),[geometry](../gr_funzioni/geometria/geometria_unico.md#geometry),[to_string](../gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico.md#to_string),[intersects](../gr_funzioni/geometria/geometria_unico.md#intersects),[$geometry](../gr_funzioni/geometria/geometria_unico.md#geometry),[overlay_contains](../gr_funzioni/geometria/geometria_unico.md#overlay_contains),[map](../gr_funzioni/maps/maps_unico.md#map),[map_akeys](../gr_funzioni/maps/maps_unico.md#map_akeys)

## Tags

Expand Down
70 changes: 70 additions & 0 deletions docs/esempi/spatial_join_condizionato.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
---
tags:
- spatial-join
- aggregare
- challenge
---

# Spatial join con condizione

L’unione spaziale di attributi è 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à in più, ovvero, una condizione.

Il quesito nasce da [questa](https://twitter.com/spatialthoughts/status/1684895102001614848) challenge, proposta da [Ujaval Gandhi](https://twitter.com/spatialthoughts) e chiede:

```
Hai uno strato poligonale di aree urbane e uno strato puntuale di luoghi. Puoi fare una join spaziale condizionale per aggiungere il nome del luogo all'interno del poligono con la popolazione più alta?
```

[![](https://pbs.twimg.com/media/F2HzGagbcAA8NpB?format=jpg&name=large)](https://pbs.twimg.com/media/F2HzGagbcAA8NpB?format=jpg&name=large)

qui i dati: <https://t.co/fqEKY68uGC>

## Soluzione proposta da Ujaval Gandhi

```
array_get(aggregate(
layer:='ne_10m_populated_places_simple',
aggregate:='array_agg',
expression:="name",
filter:=intersects($geometry, geometry(@parent)), order_by:="POP_MAX"), -1)
```

nel linguaggio umano:<br>
Ordina in modo crescente (oreder_by) la popolazione relativa ai punti che ricadono dentro (aggregate) i poligoni ed estrai il nome della città.
dove:
- array_agg: crea un array che contiene i nomi delle città dentro i poligoni;
- il filtro ordina i punti usando la popolazione

video youtube: <https://youtu.be/qpiFT8UHhwM>

## Soluzione proporta da Totò Fiandaca

nel linguaggio umano:<br>
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à), 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',
overlay_contains(
layer:='ne_10m_populated_places_simple',expression:= "pop_max"),
map_akeys(
overlay_contains(
layer:='ne_10m_populated_places_simple',
expression:= map("name","pop_max"))[array_find(@max,array_max(@max))])[0])
```

video youtube: <https://youtu.be/NOgDku2S9ws>

---

Funzioni e variabili utilizzate:

* [@parent](../gr_funzioni/variabili/parent.md)
* [with_variable](../gr_funzioni/variabili/with_variable.md)
* [aggregate](../gr_funzioni/aggrega/aggrega_unico.md#aggregate)
* [geometry](../gr_funzioni/geometria/geometria_unico.md#geometry)
* [to_string](../gr_funzioni/stringhe_di_testo/stringhe_di_testo_unico.md#to_string)
* [intersects](../gr_funzioni/geometria/geometria_unico.md#intersects)
* [$geometry](../gr_funzioni/geometria/geometria_unico.md#geometry)
* [overlay_contains](../gr_funzioni/geometria/geometria_unico.md#overlay_contains)
* [map](../gr_funzioni/maps/maps_unico.md#map)
* [map_akeys](../gr_funzioni/maps/maps_unico.md#map_akeys)
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -286,6 +286,7 @@ nav:
- Seleziona poligoni con max area sovrapposta: esempi/selezionare_poligoni_max_area_sovrapposta.md
- Tracciare puntia distanza prefissata lungo una linea: esempi/tracciare_punti_adistanzaprefissata_lungo_linea.md
- Estrarre i numeri iniziali di un testo: esempi/estrarre_numeri_iniziali.md
- Spatial join con condizione: esempi/spatial_join_condizionato.md
- Provaci tu: mettiti_alla_prova.md

- Corsi di Formazione:
Expand Down

0 comments on commit 103fe58

Please sign in to comment.