Comment puis-je convertir un fichier Excel avec des colonnes x, y en un fichier de formes?

26

Comment puis-je convertir un fichier Excel avec des colonnes x, y en un fichier de formes ponctuelles?

Il existe des exigences quelque peu facultatives en plus de la création correcte d'un fichier de formes:

  1. Les types de colonnes (selon les spécificateurs de format d'Excel) doivent être conservés (en particulier les types de date)
  2. Les noms des colonnes doivent être extraits de l'en-tête
  3. Je tiens à le faire depuis la ligne de commande
  4. Si je peux inclure des références spatiales hétérogènes pour les points dans une troisième colonne, je serais très heureux :)
fmark
la source
jetez un œil à ce gis.stackexchange.com/questions/86369/…
AndroidNijx

Réponses:

24

Je recommanderais d'utiliser OGR / GDAL , qui fait partie de la bibliothèque GDAL . OGR prend en charge un format virtuel qui permet la spécification via un fichier XML. Si vous convertissez votre feuille de calcul Excel en CSV, vous pouvez générer un VRT pour accéder aux données.

En supposant que vous ayez quelque chose comme ceci example.csv:

Lat,Long,Year,Name
34.0,-120.0,2010-05-01,Off Santa Rosa Island

Vous pouvez créer un VRT example.vrtcomme suit:

<OGRVRTDataSource>
    <OGRVRTLayer name="example">
        <SrcDataSource>example.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

À partir de GDAL 1.7, vous pouvez en outre spécifier les types de données des champs d'attribut en utilisant l' <Field>élément à l'intérieur de <OGRVRTLayer>, comme ceci:

    <Field name="date" src="Year" type="Date" />

Gardez à l'esprit que les fichiers de formes stockent les attributs au format DBASE IV , qui offre moins de flexibilité dans les types de données qu'Excel. Une fois que vous avez spécifié votre fichier VRT, vous pouvez utiliser la chaîne d'outils OGR normale pour convertir les données en Shapefile:

ogr2ogr -f "ESRI Shapefile" example.shp example.vrt

Malheureusement, # 4 n'est pas possible - la spécification du fichier de formes permet une seule projection (visible ici example.prjaprès la dernière étape).

scw
la source
Le seul inconvénient de ceci est que je dois comprendre les types de données des colonnes par programme afin d'écrire la <Field>balise. Je suppose que je trouverai celui-là par moi-même :)
fmark
Droite. Si vous voulez une solution automatisée et avez accès à ArcGIS, vous pouvez le faire avec l'outil Ajouter des coordonnées XY tinyurl.com/38jm55k à la place, qui devrait faire cette étape pour vous.
scw
Une considération importante consiste à obtenir votre fichier Excel dans un format adapté au fichier de formes ESRI en premier - il existe des limitations sur les noms de colonnes, la longueur des noms et si vous utilisez l'outil Ajouter XY, la manière dont ESRI automatise le type de champ qui pourrait provoquer problèmes. webhelp.esri.com/arcgisdesktop/9.2/…
spg
3
Service en ligne pour aider à créer un fichier vrt correctement formaté: vrtbuilder.appspot.com
matt wilkie
9

Vous pouvez utiliser le plugin Texte délimité fourni avec QGIS (http://qgis.org ) pour charger le fichier texte, puis l'enregistrer en tant que fichier de formes.

gsherman
la source
Je suis souvent en proie à des erreurs d'analyse en utilisant cet outil. Aucun conseil?
fmark
1
Avez-vous des exemples précis?
gsherman
@fmark - Je reçois également ces erreurs, et c'est généralement dû à MS Excel qui gère le csv
dassouki
6

Bien que cela ne provienne pas de la ligne de commande, vous pouvez le faire dans ArcGIS App. Depuis 9.3.1, il suffit d'ajouter le XLS directement dans ArcMap. Créez une couche d'événements XY à partir de XLS (c.-à-d. Choisissez les colonnes X, Y et définissez votre référence spatiale). Ensuite, exportez cette couche d'événements XY vers un nouveau fichier .shp Cela pourrait facilement être automatisé avec un simple script python / VBA ou un modèle dans modelbuilder . Heureux de vous aider sur ce flux de travail de base si vous avez besoin de plus d'informations.

Simon
la source
1
Si vous utilisez Python, vous pouvez exécuter un outil de géotraitement à partir de la ligne de commande.
jswise
6

J'ai cherché mais je n'ai pas trouvé de page d'aide sur Afficher les données XY dans l'aide Web, mais le processus est simple.

  1. Utilisez Ajouter des données (ou faites glisser et déposez depuis la fenêtre Catalogue) pour rechercher votre feuille de calcul (dans la feuille de calcul) et l'ajouter à votre carte
  2. Cliquez avec le bouton droit pour choisir et utiliser Afficher les données XY pour ajouter une couche d'événements
  3. Cliquez avec le bouton droit sur la couche d'événements que vous venez de créer et utilisez Données | Exporter les données pour créer un fichier de formes

Pour ce faire, vous n'avez besoin que du niveau de licence ArcView (de base) d'ArcGIS (for) Desktop.

PolyGeo
la source
Dois-je faire quoi que ce soit avec les colonnes supérieures qui ne font pas partie des données?
Zoran
Quelles deux colonnes ne font pas partie de vos données? La procédure que j'ai décrite doit utiliser les colonnes longues / latentes que vous choisissez pour générer les géométries de points, puis, je pense, stocker le reste en tant qu'attributs. La meilleure chose à faire est de l'essayer et si le résultat n'est pas comme prévu, décrivez alors votre observation vs votre attente.
PolyGeo
Je pense que j'ai mal lu le haut pour deux - et je suppose que vous voulez dire la ligne du haut (des en-têtes). Ils devraient simplement devenir des noms de champs après l'ajout de données.
PolyGeo
Je ne sais pas si c'est toujours le cas, mais les espaces dans les noms d'en-tête dans le fichier Excel étaient un vrai casse-tête pour Ajouter XY.
Chad Cooper
1
Le chargement de fichiers Excel directement dans ArcGIS fonctionne à merveille, sauf quand ce n'est pas le cas! A surveiller: dates mutilées, chiffres tronqués. La première étape de dépannage consiste toujours à exporter vers CSV avec toutes les colonnes définies comme du texte et à les charger à la place pour voir les problèmes persévérer. Cette mise en garde de côté. L'affichage en X / Y fonctionne très bien.
matt wilkie
4

Il y a toujours l'option aventureuse. Vous pouvez écrire le fichier de forme vous-même. ESRI publie la spécification des fichiers de formes, que vous pouvez lire ici:

http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

Vous devrez probablement également écrire un fichier DBF. Vous pouvez lire sur le format ici:

http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_STRUCT

C'est sans aucun doute exagéré, mais cela vous donnerait l'avantage d'avoir le contrôle sur l'ensemble du processus.

Scott Wisniewski
la source
En fait, je tend de cette façon - j'utiliserai OGR au lieu d'écrire directement le fichier de formes!
fmark
2
Excel peut probablement écrire directement le DBF, bien que j'ai eu différents niveaux de succès en utilisant ces DBF en tant que composant DBF d'un fichier de formes.
mwalker
Excel n'écrit pas les fichiers dbf.
user30184
3

Personnellement, je préfère utiliser FME de Safe Software (http://www.safe.com), qui non seulement me permet de tracer des points à partir des valeurs XY, mais me donne la possibilité de transformer les coordonnées d'une projection à une autre avant de tracer, spécifiez le type de délimiteur, la ligne de départ (dans le cas où le fichier texte contient des informations d'en-tête), attachez des attributs dans le cas où le fichier texte contient X, Y, des informations d'attribut pour les données de point. Si vous souhaitez visualiser ces données dans Google Earth, vous pouvez les écrire au format KML tout en spécifiant le style de point KML. ~ SRG

SRG
la source
2

Si vous souhaitez effectuer un autre traitement sur les données x, y, vous pouvez charger les données dans postgres, utiliser geomfromtext avec concaténation pour créer un type de données de géométrie, puis utiliser pgsql2shp pour exporter vers la forme. Cette approche vous permettra également de conserver les données du système de référence spatiale hétérogène dans une autre colonne, que vous pourrez ensuite utiliser pour convertir tous vos points en un système de référence commun dans la base de données avant d'exporter en forme. Je me rends compte que cela implique plus d'étapes que l'ogr / gdal mais cela vous donnera beaucoup plus de flexibilité.

John Powell
la source
J'ai utilisé cette approche dans le passé, et c'est une bonne approche. Je pense que ma pierre d'achoppement cohérente ici est de détecter les types de données Excel de manière fiable ....
fmark
1
Je suppose que vous pourriez écrire quelque chose dans Excel vba pour réorganiser vos colonnes en premier afin que la date, x, y soit toujours les 3 premières colonnes. Sans une sorte de convention de dénomination des colonnes, je pense qu'il serait difficile d'automatiser complètement ce que vous avez en tête.
John Powell
1

Qu'en est-il du chargement de vos fichiers CSV dans spatiallite, puis de l'utilisation d'OGR ou de QGIS pour exporter vers un fichier de formes.

http://www.gaia-gis.it/spatialite-2.2/index.html

Vous pouvez même exporter directement de spatialite dans un fichier de formes.

http://www.gaia-gis.it/spatialite-2.2/spatialite-2.2_tutorial.html#t3.1

TheSteve0
la source
Spatialite peut importer des fichiers Excel directement s'ils sont de l'ancien format .xls (Excel 97-2003). Les coordonnées X et Y doivent être converties en géométries entières avec SQL après l'importation initiale.
user30184
Si cela ne vous dérange pas d'utiliser Java, vous pouvez utiliser le projet POI pour déchirer les fichiers Excel, puis utiliser GeoTools pour écrire le nouveau fichier de formes
TheSteve0
0

Pour une transformation plus basique, vous pouvez utiliser le transformateur 2Dpointreplacer dans FME 2013. Vous devez indiquer dans quelles colonnes se trouvent les valeurs X et Y, puis FME transformera ces valeurs en par exemple un fichier de forme avec des points.
Les noms et types de colonnes peuvent être définis selon les besoins

Gel
la source