Spatial Join con condizione

Il quesito nasce da questa challenge, proposta da Ujaval Gandhi e chiede:

Dato uno strato poligonale di aree urbane e uno strato puntuale di luoghi. Come etichettare il poligono con il nome della città con popolazione maggiore?

Per rispondere al quesito occorre utilizzare una spatial join con condizione visto che occorre etichettare con il nome della città con popolazione maggiore.

L’ espressione che suggerisco di utilizzare è:

with_variable('max',
overlay_contains(
layer:='ne_10m_populated_places_simple', expression:= "pop_max"),
attribute(overlay_contains(
layer:='ne_10m_populated_places_simple',
expression:= @feature)[array_find(@max,array_max(@max))],'name'))

e per posizionare l’etichetta del poligono in corrispondenza del punto della città con popolazione maggiore:

l’espressione è:

with_variable('max',
  overlay_contains(
  layer:='ne_10m_populated_places_simple',expression:= "pop_max"),
overlay_contains(
  layer:='ne_10m_populated_places_simple',
  expression:= $geometry)[array_find(@max,array_max(@max))])

La tecnica utilizzata nell’espressione si basa sull’indice degli array, ovvero, con la variabile @max costruisco un array di valori di popolazione per ogni poligono, successivamente determino, per ogni poligono, un array che contiene le feature (righe tabella attributi del layer puntuale) dei punti contenuti; alla fine basta usare la funzione attribute e chiedere il campo desiderato, nel nostro caso il nome della città. In questo lavoro ci aiuta molto la funzione array_filter che restituisce la posizione del valore massimo della popolazione dentro gli array.

NOTE FINALI: L’autore della challenge ha dato una soluzione che si basa sull’uso delle espressioni aggregate, queste sono meno performanti rispetto le espressioni che ho utilizzato io, ovvero le overlay_*.


RIFERIMENTI

RINGRAZIEMENTI


I MIEI CANALI – ISCRIVITI


Se il blog post Ti è piaciuto cliccate su ‘Mi piace’, grazie!!!
if you liked the blog post click on ‘Like’, thank you !!!

SE IL POST/BLOG TI È STATO UTILE CONTRIBUISCI A MANTENERLO AGGIORNATO PAYPAL


Lascia un commento

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.