Ici, il y a deux couches avec la représentation des rues et l'idée est: Nous voulons mettre à jour la couche la plus récente (avec la ligne rouge) avec certaines des données stockées dans l'autre (le bleu clair), mais ces couches sont similaire dans la position géographique qui peut être très proche et un peu plus éloignée selon l'endroit sur la carte et un seul attribut correspond dans les cas où une ligne est la même dans l'autre (codlog x codlog5).
Par exemple: Au milieu de l'image, il y a un carré dans les deux calques, mais comment faire sur la carte pour reconnaître le bleu est le même que le vert et mettre à jour le calque récent?
Comment puis-je le faire? Existe-t-il un plugin ou un outil qui vous aide?
qgis
layers
latitude-longitude
Jhonatan Oliveira
la source
la source
Réponses:
C'est une excellente question, j'ai dû faire quelque chose de similaire récemment, mais avec un ensemble de données beaucoup plus petit, j'ai donc pu utiliser une simple intersection avec une vérification de qualité visuelle supplémentaire et c'était bien.
Mais voici une idée pour cela, même si je n'ai pas de code, et c'est une sorte de processus lourd. Effectuez d'abord un test avec un échantillon de l'ensemble de données complet. Vous pouvez probablement trouver du code utile ici. (L'indentation est devenue un peu bizarre ci-dessous.):
prenez le bon ensemble de géométrie (où vous voulez que les attributs finissent) et créez-en un tampon *
parcourir chacune des fonctionnalités du tampon:
2a. calculer l'orientation générale de l'entité (max_y - min_y / max_x - min_x ou quelque chose comme ça)
2b. faire une requête de sélection par emplacement sur l'autre couche en utilisant cette seule fonctionnalité
vous aurez plus d'une fonctionnalité qui correspond à la requête de sélection par emplacement, alors parcourez ces fonctionnalités sélectionnées et calculez l'orientation de chacune
obtenir les attributs de la fonction dont l'orientation est la plus proche de celle de la fonction tampon.
* Je commencerais par une très petite distance (une unité de carte ou quelque chose), puis exécuter ce processus avec des distances croissantes, en prenant soin de ne pas écraser les attributs que vous avez déjà transférés.
** Vous pourriez en fait renoncer à créer les fonctionnalités du tampon et simplement faire la requête de sélection par emplacement avec une distance de tampon. Je ne connais pas très bien QGIS, mais je suis sûr que vous pourriez le faire.
Il n'y a aucun moyen que cela fonctionne parfaitement pour toutes vos fonctionnalités, mais c'est un début, puis cela revient à développer une bonne stratégie QA / QC pour vérifier et terminer le transfert.
EDIT En y réfléchissant davantage, voici un exemple de base qui briserait complètement le système si vous débutiez avec une très petite distance de tampon et en choisissant la fonctionnalité avec l'orientation la mieux adaptée comme je l'ai recommandé:
Les attributs de la mauvaise ligne rouge seraient pris. Pour éviter cela, vous pouvez créer une sorte de tolérance et ne prendre les attributs de l'entité que si son orientation (par rapport à l'orientation de l'entité bleue d'origine) se situe dans cette tolérance.
EDIT 2 Oups, sont ces polygones? Je suppose que je viens de supposer qu'il s'agissait de lignes sur fond gris. S'ils sont des polygones, je ne sais pas vraiment si ce concept d'orientation est bon. Mais vous pouvez sélectionner toutes les entités qui se croisent et déterminer celle qui a le plus de chevauchement (exécutez un outil de type Union, puis utilisez le polygone avec la plus grande surface ...).
la source
Si vous souhaitez ajouter des attributs du calque rouge au calque bleu et qu'un attribut est commun aux deux calques, vous devez utiliser Ajouter une jonction vectorielle .
J'ai écrit à ce sujet ici .
C'est ça.
Voici un exemple avec des captures d'écran.
la source
Je préfère de loin la réponse de @ dmh126 car sa méthode permet à votre couche red_line d'être mise à jour assez facilement.
Juste pour ajouter une alternative, vous pouvez utiliser l' outil de table des attributs de jointure de la boîte à outils de traitement et sélectionner vos couches avec le champ commun. Notez que cette méthode crée un nouveau fichier de formes au lieu de mettre à jour un fichier existant:
la source
Si vous avez un ID unique dans les deux couches que vous pouvez utiliser pour joindre facilement des valeurs à une nouvelle couche de l'ancienne, c'est un jeu d'enfant. Mais cela ne semble pas être le cas.
Sinon, c'est un problème assez difficile. Je me demande pourquoi le commentaire de user30184 suggérant d'utiliser OpenJUMP et le plugin http://www.vividsolutions.com/products.asp?catg=spaapp&code=roadmatcher n'a pas été publié à la place comme réponse car il me semble tout à fait légitime dans ce cas.
Sinon, je ne pense pas que vous puissiez le faire sans codage. Avec QGIS, vous pouvez utiliser la forme et lors de la combinaison de la mise en mémoire tampon et de l'intersection, vous devriez pouvoir effectuer une vérification automatique importante.
Une approche pourrait être de comparer un tampon raisonnablement grand de lignes rouges avec des lignes bleues et d'obtenir des attributs et un rapport de correspondance. En pseudo-code:
la source