Suite

Convertir les coordonnées x y en fichier de formes polyligne

Convertir les coordonnées x y en fichier de formes polyligne


J'essaie de traiter la sortie d'un modèle qui simule le mouvement des particules dans les eaux souterraines. Le programme affiche le numéro d'identification de la particule, les coordonnées x et y et l'heure à laquelle la particule se trouve à ces coordonnées spécifiques. Chaque ligne contient l'ID, X, Y et T. Par exemple :

Non_1… 2,34546E+03… 7,73783E+03… 1,20647E+04
Non_2… 5.37637E+03… 8.52437E+03… 1.37673E+04
Non_1… 2,37357E+03… 7,74387E+03… 1,21567E+04

Il existe des centaines de particules et chaque particule a plusieurs centaines de valeurs x,y,t. La taille des fichiers peut facilement dépasser 100 Go. Je peux trier/grouper le fichier afin que chaque particule soit répertoriée par ordre croissant de temps de trajet.

Existe-t-il un moyen de convertir un fichier texte avec ces coordonnées en un fichier de formes contenant une polyligne continue pour chaque particule, de son premier emplacement x,y à son emplacement final x,y ? Je ne vais rien faire avec les polylignes à part les afficher, donc les attributs ne sont pas vraiment importants. Je n'ai pas besoin de les identifier ou de les sélectionner en fonction de l'ID de particule, par exemple.


QGIS avec le plugin Points2One semble être le bon choix.

  1. Convertissez vos fichiers texte en fichier de formes de points

Calque/Ajouter un calque/Ajouter un calque de texte délimité

  1. Utilisez Points2One pour convertir en lignes :

Je ne sais pas comment il gérera les tailles de fichiers de 100 Go.


Je travaille dans ArcGIS, donc mon flux de travail consisterait à analyser les données dans une table avec des paires de coordonnées "De" et "À". Je garderais les attributs, en particulier la couche modèle.

Je pense qu'une meilleure solution serait de trouver un logiciel existant capable d'exporter les lignes de chemin. L'aide de MODPATH version 6 semble indiquer que vous pouvez utiliser MODPATH Examiner pour exporter les lignes de chemin, entre guillemets : "Les données de sortie de la grille du modèle et des particules (telles que les extrémités, les lignes de chemin et les points de la série temporelle) peuvent être exportées sous forme de fichiers de formes." http://pubs.usgs.gov/tm/6a41/pdf/TM_6A_41.pdf page 58.

EDIT : J'ai appris dans les commentaires que nous devons pouvoir convertir les fichiers de sortie MODPATH en lignes sans utiliser de logiciel de modélisation des eaux souterraines. J'ai testé une conversion manuelle d'un fichier de chemins MODPATH (ptl) en lignes dans ArcGIS. J'ai d'abord ouvert un fichier ptl dans un éditeur de texte et supprimé l'en-tête. J'ai analysé le fichier ptl (dans MS Access), ajouté des en-têtes de colonne et chargé la table dans une géodatabase. Ensuite, j'ai utilisé une suggestion de Nir (dans les commentaires) pour exécuter "Points to Line" sur une couche d'événements publiée à partir de la table. Cela ne m'a pris que quelques minutes, mais mon fichier ptl n'avait que quelques centaines de milliers de points.


Pour lire un shapefile, créez un nouvel objet "Reader" et transmettez-lui le nom d'un shapefile existant. Le format shapefile est en fait une collection de trois fichiers. Vous spécifiez le nom de fichier de base du fichier de formes ou le nom de fichier complet de l'un des fichiers de composants du fichier de formes.

OU l'un des 5+ autres formats qui font potentiellement partie d'un fichier de formes. La bibliothèque ne se soucie pas des extensions de fichiers.

Lecture de fichiers de formes à l'aide du gestionnaire de contexte

La classe "Reader" peut être utilisée comme gestionnaire de contexte, pour s'assurer que les objets de fichiers ouverts sont correctement fermés une fois la lecture des données terminée :

Lecture de fichiers de formes à partir d'objets de type fichier

Vous pouvez également charger des fichiers de formes à partir de n'importe quel objet de type fichier Python en utilisant des arguments de mot-clé pour spécifier l'un des trois fichiers. Cette fonctionnalité est très puissante et permet de charger des shapefiles à partir d'une URL, d'un fichier zip, d'un objet sérialisé ou dans certains cas d'une base de données.

Notez que dans les exemples ci-dessus, le fichier shx ​​n'est jamais utilisé. Le fichier shx ​​est un index d'enregistrements fixes très simple pour les enregistrements de longueur variable dans le fichier shp. Ce fichier est facultatif pour la lecture. S'il est disponible, PyShp utilisera le fichier shx ​​pour accéder aux enregistrements de forme un peu plus rapidement, mais s'en passera très bien.

Lecture des métadonnées du fichier de formes

Les fichiers de formes ont un certain nombre d'attributs pour inspecter le contenu du fichier. Un fichier de formes est un conteneur pour un type spécifique de géométrie, et cela peut être vérifié à l'aide de l'attribut shapeType.

Les types de formes sont représentés par des nombres compris entre 0 et 31, tels que définis par la spécification du fichier de formes et répertoriés ci-dessous. Il est important de noter que le système de numérotation a plusieurs numéros réservés qui n'ont pas encore été utilisés, donc les numéros des types de formes existants ne sont pas séquentiels :

  • NULL = 0
  • POINT = 1
  • POLYLIGNE = 3
  • POLYGONE = 5
  • MULTIPOINT = 8
  • POINTZ = 11
  • POLYLINEZ = 13
  • POLYGONE = 15
  • MULTIPOINTZ = 18
  • POINTM = 21
  • POLYLINEM = 23
  • POLYGONE = 25
  • MULTIPOINTM = 28
  • MULTIPATCH = 31

Sur cette base, nous pouvons voir que notre fichier de formes de groupes de blocs contient des formes de type polygone. Les types de formes sont également définis comme des constantes dans le module shapefile, afin que nous puissions comparer les types de manière plus intuitive :

Pour plus de commodité, vous pouvez également obtenir le nom du type de forme sous forme de chaîne :

D'autres éléments de métadonnées que nous pouvons vérifier incluent le nombre d'entités et la zone de délimitation couverte par le fichier de formes :

Enfin, si vous préférez travailler avec l'intégralité du fichier de formes dans un format différent, vous pouvez tout convertir en dictionnaire GeoJSON, même si vous risquez de perdre certaines informations au cours du processus, telles que les valeurs z et m :

Lecture de la géométrie

La géométrie d'un fichier de formes est l'ensemble de points ou de formes constitués de sommets et d'arcs implicites représentant des emplacements physiques. Tous les types de fichiers de formes ne stockent que des points. Les métadonnées sur les points déterminent la façon dont ils sont gérés par le logiciel.

Vous pouvez obtenir une liste de la géométrie du fichier de formes en appelant la méthode shape().

La méthode shape renvoie une liste d'objets Shape décrivant la géométrie de chaque enregistrement de forme.

Pour lire une seule forme en appelant son index, utilisez la méthode shape(). L'index est le nombre de formes à partir de 0. Donc, pour lire le 8ème enregistrement de forme, vous utiliseriez son index qui est 7.

>>> # Lire la bbox de la 8ème forme pour vérifier
>>> # Arrondir les coordonnées à 3 décimales
>>> ['%.3f' % coord pour coord in s.bbox]
['-122.450', '37.801', '-122.442', '37.808']

Chaque enregistrement de forme (à l'exception des points) contient les attributs suivants. Les enregistrements de shapeType Point n'ont pas de cadre de délimitation 'bbox'.

shapeType : un entier représentant le type de forme tel que défini par la spécification du fichier de formes.

shapeTypeName : une représentation sous forme de chaîne du type de forme tel que défini par shapeType. Lecture seulement.

bbox : si le type de forme contient plusieurs points, ce tuple décrit la coordonnée inférieure gauche (x, y) et la coordonnée du coin supérieur droit créant une boîte complète autour des points. Si le shapeType est un Null (shapeType == 0) alors une AttributeError est levée.

parts : les pièces regroupent simplement des ensembles de points en formes. Si l'enregistrement de forme comporte plusieurs parties, cet attribut contient l'index du premier point de chaque partie. S'il n'y a qu'une partie, une liste contenant 0 est renvoyée.

points : l'attribut points contient une liste de tuples contenant une coordonnée (x,y) pour chaque point de la forme.

Dans la plupart des cas, cependant, si vous devez faire plus qu'une simple vérification de type ou de limites, vous souhaiterez peut-être convertir la géométrie au format GeoJSON plus lisible, où les lignes et les polygones sont regroupés pour vous :

Les résultats de la méthode shape() prennent en charge de la même manière la conversion en GeoJSON :

Lecture des enregistrements

Un enregistrement dans un fichier de formes contient les attributs de chaque forme de la collection de géométries. Les enregistrements sont stockés dans le fichier dbf. Le lien entre la géométrie et les attributs est le fondement de tous les systèmes d'information géographique. Ce lien critique est impliqué par l'ordre des formes et des enregistrements correspondants dans le fichier de géométrie shp et le fichier d'attributs dbf.

Les noms de champs d'un shapefile sont disponibles dès que vous lisez un shapefile. Vous pouvez appeler l'attribut "fields" du shapefile en tant que liste Python. Chaque champ est une liste Python contenant les informations suivantes :

  • Nom de champ : le nom décrivant les données à cet index de colonne.
  • Type de champ : le type de données à cet index de colonne. Les types peuvent être :
    • "C": Caractères, texte.
    • "N": Nombres, avec ou sans décimales.
    • « F » : flotteurs (identiques à « N »).
    • "L" : Logique, pour les valeurs booléennes Vrai/Faux.
    • "D" : Dates.
    • "M": Memo, n'a aucune signification dans un SIG et fait plutôt partie de la spécification xbase.

    Pour voir les champs de l'objet Reader ci-dessus (sf), appelez l'attribut "fields":

    Vous pouvez obtenir une liste des enregistrements du fichier de formes en appelant la méthode records() :

    Pour lire un seul enregistrement, appelez la méthode record() avec l'index de l'enregistrement :

    Chaque enregistrement est un objet Record de type liste contenant les valeurs correspondant à chaque champ de la liste des champs. Les valeurs d'un enregistrement sont accessibles par indexation positionnelle ou découpage. Par exemple, dans le fichier de formes des groupes de blocs, les 2e et 3e champs sont l'identifiant du groupe de blocs et le nombre de population de 1990 de ce groupe de blocs de San Francisco :

    Pour un accès plus simple, les champs d'un enregistrement sont également accessibles via le nom du champ, soit en tant que clé, soit en tant que nom d'attribut. L'identifiant du groupe de blocs (BKG_KEY) du fichier de formes des groupes de blocs peut également être récupéré sous la forme :

    Les valeurs d'enregistrement peuvent être facilement intégrées à d'autres programmes en les convertissant en un dictionnaire de valeurs de champ :

    Si ultérieurement vous devez vérifier la position de l'index de l'enregistrement dans le fichier de formes d'origine, vous pouvez le faire via l'attribut "oid":

    Lecture simultanée de la géométrie et des enregistrements

    Vous souhaiterez peut-être examiner à la fois la géométrie et les attributs d'un enregistrement en même temps. Les méthodes shapeRecord() et shapeRecords() vous permettent de faire exactement cela.

    L'appel de la méthode shapeRecords() renverra la géométrie et les attributs de toutes les formes sous forme de liste d'objets ShapeRecord. Chaque instance de ShapeRecord a un attribut "shape" et "record". L'attribut shape est un objet Shape comme expliqué dans la première section "Lecture de la géométrie". L'attribut record est un objet de type liste contenant des valeurs de champ, comme illustré dans la section "Lecture des enregistrements".

    Lisons la clé du groupe de blocs et la population pour le 4e groupe de blocs :

    Les résultats de la méthode shapeRecords() sont un objet de type liste qui peut être facilement converti en GeoJSON via la __geo_interface__ :

    La méthode shapeRecord() lit une seule paire forme/enregistrement à l'index spécifié. Pour obtenir le 4e enregistrement de forme à partir du fichier de formes des groupes de blocs, utilisez le troisième index :

    Chaque enregistrement de forme individuel prend également en charge __geo_interface__ pour le convertir en GeoJSON :

    La clé du groupe de blocs et le nombre de population :


    Mrthdrb

    Que signifient les broches de transmission et de réception positives et négatives (+/-) sur les câbles Ethernet ?

    Un narrateur devrait-il jamais décrire les choses en se basant sur le point de vue d'un personnage plutôt que sur des faits ?

    Posez le téléphone / Posez le téléphone

    Existe-t-il un pays commun à visiter pour les personnes titulaires de visas britanniques et Schengen ?

    Le danger de mort dans la littérature de niveau intermédiaire

    Pourquoi « la Gestapo » est-elle féminine ?

    Vérification des antécédents préalable à l'emploi avec consentement pour les vérifications futures

    Quelles propriétés font qu'une arme magique convient plus à un voleur qu'à un combattant basé sur DEX ?

    Raisons pour lesquelles les états des broches MCU par défaut sont tirés vers le haut/bas de la réinitialisation

    Quelle est la signification de « Vous n'avez jamais rencontré un graphique que vous n'avez pas aimé ? »

    Ai-je fait une erreur en ccing email au patron à d'autres?

    Un sort de coup peut-il ouvrir la porte du magnifique manoir de Mordenkainen ?

    Erreur dans le mémoire de maîtrise, je ne sais pas quoi faire

    Comment préserver l'électronique (ordinateurs, ipads, téléphones) pendant des centaines d'années ?

    Extraire la sous-chaîne selon regexp avec sed ou grep

    Hachage du mot de passe pour augmenter l'entropie

    Une espèce primitive serait-elle capable d'apprendre l'anglais en lisant des livres seule ?

    Pourquoi la vitesse indiquée plutôt que la vitesse sol est-elle utilisée pendant la course au décollage ?

    Les locuteurs natifs utilisent-ils fréquemment « ultima » et « proxima » en anglais parlé ?

    Création de points avec des attributs à partir de coordonnées dans ArcPy

    Script Python pour ajouter des champs aux classes d'entitésComment créer un fichier de formes côté ArcGIS Server?Comment créer des polylignes à partir d'une classe d'entités ponctuelle reliant tous les points à l'aide d'arcpyDistance des points de forme à partir d'une lat-long donnéCréer plusieurs fichiers de formes à partir d'une date dans la même boucle for à l'aide d'ArcPy? Création d'une entité ponctuelle à partir d'un dictionnaire dans ArcPy ? Utilisez UpdateCursor en combinaison avec la méthode .distanceTo dans ArcPyFrom List dans ArcPy Feature Class avec InsertCursorCréation d'une entité ponctuelle en cliquant en mémoire à l'aide du gestionnaire de compléments ArcPyObtenir (X,Y) les coordonnées projetées du point au lieu de sa longitude et de sa latitude dans ArcPy ? Mesurer la distance à deux points dans ArcPy ?

    Je sais créer des points par coordonnées avec arcpy en utilisant le code suivant :

    Mais dans mon cas, chaque paire de coordonnées a également un attribut de texte supplémentaire qui doit être écrit dans le fichier de formes. Quelle serait l'approche?

    Avez-vous vu ces threads Python Script pour ajouter des champs aux classes d'entités et ajouter des coordonnées au fichier de formes à l'aide d'ArcPy ?

    Toujours utilisez le paramètre SpatialReference lors de la construction de PointGeometry à partir de Point, ou vous risquez de perdre en précision lors de la construction.

    Je sais créer des points par coordonnées avec arcpy en utilisant le code suivant :

    Mais dans mon cas, chaque paire de coordonnées a également un attribut de texte supplémentaire qui doit être écrit dans le fichier de formes. Quelle serait l'approche?

    Avez-vous vu ces threads Python Script pour ajouter des champs aux classes d'entités et ajouter des coordonnées au fichier de formes à l'aide d'ArcPy ?

    Toujours utilisez le paramètre SpatialReference lors de la construction de PointGeometry à partir de Point, ou vous risquez de perdre en précision lors de la construction.

    Je sais créer des points par coordonnées avec arcpy en utilisant le code suivant :

    Mais dans mon cas, chaque paire de coordonnées a également un attribut de texte supplémentaire qui doit être écrit dans le fichier de formes. Quelle serait l'approche?

    Je sais créer des points par coordonnées avec arcpy en utilisant le code suivant :

    Mais dans mon cas, chaque paire de coordonnées a également un attribut de texte supplémentaire qui doit être écrit dans le fichier de formes. Quelle serait l'approche?

    Avez-vous vu ces threads Python Script pour ajouter des champs aux classes d'entités et ajouter des coordonnées au fichier de formes à l'aide d'ArcPy ?

    Toujours utilisez le paramètre SpatialReference lors de la construction de PointGeometry à partir de Point, ou vous risquez de perdre en précision lors de la construction.

    Avez-vous vu ces threads Python Script pour ajouter des champs aux classes d'entités et ajouter des coordonnées au fichier de formes à l'aide d'ArcPy ?

    Toujours utilisez le paramètre SpatialReference lors de la construction de PointGeometry à partir de Point, ou vous risquez de perdre en précision lors de la construction.

    Avez-vous vu ces threads Python Script pour ajouter des champs aux classes d'entités et ajouter des coordonnées au fichier de formes à l'aide d'ArcPy ?

    Avez-vous vu ces threads Python Script pour ajouter des champs aux classes d'entités et ajouter des coordonnées au fichier de formes à l'aide d'ArcPy ?

    Toujours utilisez le paramètre SpatialReference lors de la construction de PointGeometry à partir de Point, ou vous risquez de perdre en précision lors de la construction.

    Toujours utilisez le paramètre SpatialReference lors de la construction de PointGeometry à partir de Point, ou vous risquez de perdre en précision lors de la construction.