Dans QGIS, il y a deux fichiers de formes représentant les données en mouvement entre les cellules et une couche supplémentaire, voir l'image ci-dessous
Déplacement de données défini par:
Polygone
"LayerA"
(carrés transparents avec contour rouge). En outre, il concerne également les cercles représentant les mouvements à l'intérieur des cellules, visualisés sur la position des"LayerA"
géocentroïdes.Couche de polyligne
"Flows"
(flèches jaunes / grises), transmet des valeurs via des connexions entre géocentroïdes d'"LayerA"
entités
Couche cible:
De plus, j'ai déjà transféré "FLUX"
et déplacé des valeurs dans des cellules de "LayerA"
vers des "LayerB"
polygones, voir ma question précédente: valeurs héritées entre polygones dans QGIS? . Il a été fait en utilisant le %
de $area
calcul.
Il pourrait y avoir une solution / approche significative de transfert / transmission / transformation des connexions de flux représentées par "Flows"
et ses valeurs de relations de "LayerA"
en relations de "LayerB"
.
Comment puis-je réaliser ces connexions en tant que polylignes?
De plus, les nouveaux flux hériteront d'un style similaire à "Flows"
.
À la demande, je peux fournir un échantillon des données.
Les flux n'existeront pas entre les caractéristiques de "LayerA"
, mais entre les caractéristiques de "LayerB"
. L'objectif principal est d'obtenir l'attribut "FLUX"
(c'est-à-dire de / à) pour les connexions entre "LayerB"
possible comme table / matrice origine-destination.
Certaines exigences / certains critères doivent être respectés:
1. Il n'y a pas de connexions de flux entre les pièces des entités (sélectionnées en jaune) dans la même cellule
2. Il n'y a pas de connexions entre la même fonction, même si ses parties sont dans des cellules différentes
3. Des connexions existent entre des parties d'entités "LayerB"
(basées sur la "Union"
sortie) si elles se trouvent entièrement dans deux "LayerA"
entités de cellule distinctes
4. La nouvelle valeur "FLUX"
transmise sera calculée comme indiqué sur l'image ci-dessous.
Par exemple, il existe une connexion entre deux cellules I
et II
, où "FLUX"
est 100
. En supposant d'autres valeurs, l' "NEW_FLUX"
entre A'
et B''
sera autour 1.5625
. 100
n'est qu'un seul exemple.
Les références:
- Des valeurs héritées entre les polygones dans QGIS?
- Ajustement des styles de carte de flux dans QGIS 2
- Calculer l'aire proportionnelle du polygone dans le polygone d'une autre couche
- Randonnées SIG gratuites et open source | Données de mouvement dans le SIG: problèmes et idées
- Préservation de la géométrie avec Virtual Layer dans QGIS 2
la source
Réponses:
Avec les couches virtuelles, théoriquement, c'est possible (avec les fichiers de formes, le processus sera très long, mais si les couches sont dans une base de données spatiale, je pense que c'est beaucoup plus rapide).
Voici le code:
La sortie graphique ressemblera à
Le résultat a été testé manuellement. La différence de
"FLUX"
valeurs est négligeable.La sortie finale héritera des styles
"Flow"
et ressemblera àJe recommande de le tester avec quelques données, et si cela prend trop de temps pour les grands ensembles de données, exécutez pas à pas les requêtes (
"inter_ab"
,"new_flux"
) et enregistrez le résultat et exécutez la requête suivante.la source
Polygon_b
couche, et son champ clé estid_geofla
. J'ai fait la correction.Vous pouvez faire une jointure entre les trois couches, puis agréger par
layerB
. Les couches virtuelles peuvent probablement être utilisées. Je ne sais pas si les données importantes sont danslayerA
ou dans laflow
couche .. Voici une possibilité (non testée):la source
"Flows"
.sum(f.flow_var)
ou mêmesum(fl.flow_var * a.poly_var)