Comment convertir un fichier de formes en CSV avec des nœuds et des liens?

12

Existe-t-il un moyen de convertir un fichier de formes linéaire en un fichier CSV au format suivant:

Node_1, Node_2, attribute_1, ...., attribute_x
     1       2       "hello"        567845.334

J'ai regardé GDAL / OGR2OGR et PostGIS et je ne pense pas non plus que les données soient converties au format que je veux.

Cela ne me dérange pas d'écrire un script pour le faire, si je suis guidé dans la bonne direction.

dassouki
la source
Dans votre exemple, Node_1, Node_2 sont les coordonnées réelles de votre entité, non? Je veux dire, d'après votre exemple, je suppose que vous voulez exporter la topologie à partir du fichier de formes; comme dans Node_1 est votre FNODE, Node_2 est votre TNODE et la géométrie n'est stockée qu'une seule fois. Si c'est le cas, la réponse est très différente et vous aurez besoin d'autre chose que OGR pour construire la topologie.
Ragi Yaser Burhum
@rburhum je veux implémenter ma table dans un algorithme de réseau classique. Le format est généralement, du nœud 1 au nœud 2 avec un coût de X
dassouki

Réponses:

8

Les programmes utilitaires inclus dans OGR (OGR2OGR) ne le feront pas directement, mais il sera très facile d'utiliser OGR pour y parvenir.

Vous devrez écrire un script / programme dans l'une des langues prises en charge par OGR. Vous pouvez simplement lui faire ouvrir le fichier de formes, lire chaque entité et écrire les points + données au format CSV.

L' exemple de code C ++ sur le Wiki montre en fait presque tous les appels d'API OGR requis pour cela.

Reed Copsey
la source
Merci pour la réponse rapide. Je regarde gdal.org/ogr/ogr%5Fapitut.html premier exemple de python, qui sort d'un fichier SHP vers CSV. L'exemple est fait pour une couche ponctuelle, y a-t-il une différence significative pour la convertir en couche linéaire? Quel serait le format du nom du nœud? Sera-ce un nombre? Puis-je le lier à une autre couche de points contenant tous les noms de nœuds?
dassouki
En ligne, les fonctionnalités seront ogr.wkbLine au lieu de ogr.wkbPoint. Vous pouvez renvoyer le nom sous forme de chaîne à l'aide de feature.GetFieldAsString (col). Il n'y a aucun moyen de gérer la "liaison" directement dans OGR, vous devez donc ouvrir l'autre table de données et la rechercher vous-même, ou copier d'abord les noms dans le SIG.
Reed Copsey
Ça a du sens; eh bien je vais l'essayer et je vous tiendrai au courant de ma façon de faire. Je fais tout cela pour que je puisse faire une analyse de réseau sur une couche ligne.
dassouki