Suite

Conversion sans perte de fichiers de formes en XML/JSON/Text

Conversion sans perte de fichiers de formes en XML/JSON/Text


Je suis un développeur de logiciels et j'ai besoin de créer un outil personnalisé qui importe les fichiers de formes ESRI (shp + shx + dbf), manipule le contenu, puis exporte de nouveaux fichiers de formes. Pour éviter une lecture binaire complexe des 3 formats, j'aimerais convertir les fichiers d'entrée dans un format textuel "bien connu" (JSON, XML, texte brut,… ) et je souhaite pouvoir annuler la conversion.

J'ai essayé d'utiliser gdal/ogr2ogr pour convertir les fichiers de formes en CSV mais la sortie semble n'inclure que le contenu de la base de données (fichier dbf). Cela signifie que, si j'essaie de reconvertir le CSV en fichiers de formes, je perds toutes les coordonnées du polygone.

J'ai ensuite essayé de convertir en GeoJSON, ce qui était bien meilleur, mais quelques données semblent à nouveau manquer (comme les limites de forme et les index de polygone).

Existe-t-il une option dans gdal pour une conversion "sans perte" entre les fichiers de formes et tout format lisible par l'homme ?


Tous les formats vectoriels pris en charge par GDAL/OGR sont répertoriés ici. Avec chaque pilote, consultez les options de création pour contrôler la sortie. Ceux-ci sont transmis à ogr2ogr en utilisant-dcoet-lcodrapeaux.

Les bons pilotes de sortie textuels incluent :

  • CSV - assurez-vous d'utiliser-lco GEOMETRIE=AS_WKTpour obtenir la géométrie de texte bien connue
  • GeoJSON
  • GML
  • KML
  • LIBKML.

Ce que vous recherchez, c'est le langage de balisage géographique (GML). Il est lisible par l'homme et devrait tout maintenir.

-f gml

en gdal/ogr.

Ne négligez pas non plus KML. Les deux sont des normes OGC vectorielles lisibles par l'homme prises en charge dans gdal / ogr.

Vous pouvez ouvrir les deux dans les éditeurs de texte.


Du haut de ma tête, je ne pense pas que vous obtiendrez une chaîne de ligne ou une chaîne de polgon de valeurs x et y en csv. Je pense que vous ne recevrez des valeurs de points que si vous choisissez csv. Vous aurez une colonne pour x et une colonne pour y.

Les bibliothèques gdal qui lisent les fichiers de formes traitent les trois fichiers comme un seul animal. Ces bibliothèques font déjà tout le travail de lecture des trois formats de fichiers complexes, si vous incluez leurs fichiers d'en-tête dans votre projet. GeoJSON, GML et KML seraient de bons formats intermédiaires pour ce que vous essayez de faire.

"Importer" est le mot clé dans votre question. Selon votre cible d'importation, gdal/ogr peut avoir une base de données cible ou un format de fichier supplémentaire. Cela éviterait d'écrire du code que d'autres ont déjà vérifié. Taper

ogr2ogr --formats

sur la ligne de commande. L'option formats listera tous les formats de fichiers qui ont été compilés dans votre version de l'application gdal/ogr que vous utilisez. Les versions précompilées peuvent offrir plus ou moins des formats de fichiers disponibles. Vérifiez également la version que vous utilisez car de nouveaux formats sont disponibles d'une version à l'autre. Encore une fois, les formats disponibles dépendent de ce qui a été compilé pour vous.

En ce qui concerne vos problèmes d'alignement, assurez-vous d'utiliser un système de référence spatiale ou SRS. Utilisation-x_srsoptions où x fait référence à l'une des options srs nommées. Il s'agit d'une mesure de sécurité pour vous assurer que vous êtes explicite dans le système de référence que vous attendez de gdal lors de la conversion. J'ai entendu parler de suffisamment de problèmes et d'arrachages de cheveux où les options SRS n'étaient pas explicitement utilisées, que je les utilise toujours pour éviter cette douleur et cette souffrance. Cela étant dit, il peut y avoir une certaine distorsion héritée dans toute conversion que vous effectuez. Cela fait cependant partie de la prise de valeurs sur une boule d'aspect rond et d'essayer de les faire ressembler sur un plan de coordonnées 2D.