Suite

Contourner la limite de 10 caractères du nom de champ dans les fichiers de formes ?


J'exporte la géométrie avec les attributs de texte attachés de la base de données Oracle au format de fichier de formes esri (.shp) avec la bibliothèque Java et Geotools.

Les colonnes d'attributs de notre base de données ont des noms de plus de 10 caractères, et Geotools force à les tronquer. Je comprends que cela est dû à la spécification des fichiers .shp ou .dbf.

Je peux contourner ce problème en créant un simple fichier txt avec "shrtname"="Le nom complet et long", mais il ne sera évidemment pas compris et importé par un autre logiciel que le nôtre.

Existe-t-il un moyen officiel de faire le mappage des noms de champs courts aux noms de texte intégral longs ?

Par exemple, le fichier xml à côté de tous les autres fichiers .shp .dbf .shx.


Désolé, la réponse est non. Vous devez déployer votre propre mappeur de terrain et seul un logiciel qui utilise votre mappeur le comprendra. Vous pouvez cependant utiliser d'autres formats qui n'ont pas cette limitation (par exemple, géodatabase fichier, spatialite, etc.).


Quelques conseils sur les solutions de contournement tirés de l'expérience personnelle.

Lorsque les gens choisissent des fichiers de formes (et insistent sur eux) comme format principal, il est généralement choisi pour interopérabilité - Pensez-y comme adhérer à une spécification. Si vous choisissez de lancer votre propre mappeur de champ, vous faites essentiellement le contraire - puisque vous faites des choses en dehors d'une spécification - vous avez créé votre "spécification étendue".

Est-ce que j'ai fait ça dans le passé ? Oui. Et cela devient très certainement plus pénible que de résoudre un problème, car chaque fois que vous essayez d'ouvrir les fichiers de formes dans tout autre élément pouvant lire/écrire des fichiers de formes, vous vous retrouvez avec une table avec tout un tas de champs difficiles à comprendre. .

À ce stade, je vous demanderais pourquoi utilisez-vous des fichiers de formes ? Proposez une solution de flux de travail qui respecte la spécification du fichier de formes et ses limites, ou modifiez les formats de fichier. Tout le reste n'est qu'une recette pour les maux de tête.


Il existe un moyen standard de gérer cela, bien que vos clients puissent ne pas être complètement satisfaits : vous exportez deux fichiers, un fichier de formes et un fichier de données dans un format que leur logiciel peut lire. Le fichier de formes n'a qu'un identifiant unique, [Id], pour les attributs. Le fichier de données a plusieurs attributs : [Id] pour correspondre à la forme, [Field] pour fournir le nom du champ, [Type] pour indiquer son type et un attribut de chaque type de données possible pour stocker la valeur. Chaque champ du fichier d'origine est stocké en tant qu'enregistrement dans ce fichier de données.

Par exemple, une table source ressemblant à ceci :

[Forme] [Id] [Nom] [Population2010] shape1 A1 Californie 37253956 shape2 A2 Texas 25145561 shape3 A3 Wyoming 563626

aurait un fichier de données correspondant

[Id] [Champ] [Type] [Texte] [Entier] A1 Nom Texte Californie  A1 Population2010 Entier  37253956 A2 Nom Texte Texas  A2 Population2010 Entier  25145561 A3 Nom Texte Wyoming  A3 Population2010 Entier  563262

Il devrait être évident de savoir comment utiliser ces données dans n'importe quel SGBDR et comment convertir entre les deux formats.


Si votre client utilise ArcGIS, vous pouvez fournir un script pour attribuer des alias de champ en bloc. Cela leur donnerait l'apparence de noms de champs longs lorsqu'ils utiliseraient les données.

Des scripts similaires peuvent également fonctionner pour fournir des alias dans d'autres packages SIG.


La route la plus simple à prendre est de stocker UNIQUEMENT votre géométrie sous forme de fichier de formes, pour les excellentes capacités d'édition de géométrie qui existent dans de nombreuses applications SIG, ENCORE stocker toutes vos données de terrain (ou la majeure partie d'entre elles) dans sqlite sous forme de tableaux. Rejoignez-les si nécessaire pour rechercher vos données de terrain.

MAIS si vous devez éditer les tables tout en effectuant des requêtes spatiales ou en sélectionnant les entités du fichier de formes dans QGIS, vous devrez oublier [les fichiers de formes joints aux tables sqlite] en tant qu'option, et à la place tout exporter vers Spatialite. Apprenez à utiliser Qspatialite et Spatialite_GUI (ils sont tous deux complémentaires avec de nombreuses fonctionnalités qui manquent à l'autre - vous aurez besoin et utiliserez les deux si vous faites beaucoup de choses avec SQLITE)

Il est important de garder à l'esprit que ces tables (jointes au fichier de formes) ne seraient pas modifiables en même temps que la jointure. Et donc migrer vers Spatialite serait une excellente alternative aux fichiers de formes. Il conserve la simplicité et la portabilité des fichiers de formes tout en offrant la plupart des avantages d'une base de données SQL, sans la complexité de PostgreSQL.


Un correctif temporaire peut être, l'enregistrement en tant que fichier TAB, qui peut avoir des noms de colonne jusqu'à 31 caractères.