在shapefile中绕过字段名称的10个字符限制?


42

我正在使用Java和Geotools库将具有附加文本属性的几何图形从oracle数据库导出为esri shapefile格式(.shp)。

我们数据库中的属性列具有超过10个字符的名称,Geotools会强制截断它们。我了解这是由于.shp或.dbf文件规范引起的。

我可以通过使用“ shrtname” =“全名和长名”创建一些简单的txt文件来解决此问题,但是很明显,除了我们的软件,其他任何软件都不会理解和导入该文件。

从短字段名称到长全文名称的映射有官方的方法吗?

例如,所有其他.shp .dbf .shx文件旁边的xml文件。

Answers:


53

对不起,答案是否定的。您必须推出自己的字段映射器,只有使用您的映射器的软件才能理解它。您可以使用其他不受此限制的格式(例如文件地理数据库,spatialite等)。


关于个人变通办法的一些建议。

当人们选择shapefile(并坚持使用它们)作为其主要格式时,通常出于互操作性的考虑而选择它-将其视为遵循规范。如果选择滚动自己的字段映射器,则基本上是相反的操作-因为您做的事情超出规范-您已经创建了“扩展规范”。

我过去做过吗?是。而且,与每次实际解决问题相比,它无疑总是带来更多的痛苦,因为每次您尝试将shapefile打开为其他任何可以读取/写入shapefile的内容时,最终都会得到一个包含大量难以理解字段的表。

到那时,我会问你,为什么要使用shapefile?要么提出一个符合shapefile规范及其限制的工作流解决方案,要么更改文件格式。其他一切只是头痛的良方。


不幸的是,我们的客户需要shapefile:/
denu

那么没有其他选择了:(
拉吉·亚瑟·布尔胡姆

1
其他选项是变通办法,下面建议其中一些。

我在上面更新了我的答案,以解释为什么当客户只需要shapefile时,变通方法不是一个好主意。
Ragi Yaser Burhum 2011年

6
作为顾问,我的经验是,找到一种帮助客户的方法几乎总是比说“没有办法”更可取。找出为什么他们需要shapefile是一个好的开始,您也许可以在替代方案上达成共识,但情况并非总是如此。顺便说一句,获得变通办法想法的最佳方法之一是在Web上发布一个告示,上面写着“没有其他选择”。:-)
豪伯

16

有一种标准的处理方法,尽管您的客户可能并不完全满意:以软件可以读取的格式导出两个文件,shapefile和数据文件。shapefile仅具有属性的唯一标识符[Id]。数据文件具有多个属性:用于匹配形状的[Id],用于提供字段名称的[Field],用于指示其类型的[Type]以及每种可能的数据类型的一个属性来存储值。原始文件中的每个字段都作为记录存储在此数据文件中。

例如,如下所示的源表:

[Shape] [Id] [Name]     [Population2010]
shape1  A1   California         37253956
shape2  A2   Texas              25145561
shape3  A3   Wyoming              563626

将有一个对应的数据文件

[Id] [Field]        [Type]  [Text]     [Integer]
A1   Name           Text    California    <Null>
A1   Population2010 Integer <Null>      37253956
A2   Name           Text    Texas         <Null>
A2   Population2010 Integer <Null>      25145561
A3   Name           Text    Wyoming       <Null>
A3   Population2010 Integer <Null>        563262

显而易见,如何在任何RDBMS中使用这些数据,以及如何在两种格式之间来回转换。


7

如果您的客户使用的是ArcGIS,则可以提供一个脚本来批量分配字段别名。当他们使用数据时,这将使他们看起来像长字段名。

类似的脚本也可以在其他GIS软件包中提供别名。


4
我当然很高兴看到我的一个高度重视的答案,但是该答案适用于地理数据库,而不适用于shapefile。它们不能保存别名,尽管在Arcgis中可以保存一个记住别名的图层文件。
马特·威尔基(Matt wilkie),2011年

注意,并感谢您的澄清。还要注意,别名也可以用MXD保存。我建议应将脚本提供给客户,因为每次将shapefile添加到新地图时都必须重新运行这些脚本。

2

最简单的方法是仅将几何图形存储为shapefile,因为许多GIS应用程序中都具有出色的几何图形编辑功能,因此,YET将所有字段数据(或其中的大部分)存储在sqlite中作为表格。根据需要加入他们以研究您的现场数据。

但是,如果您需要在进行空间查询时编辑表,或者在QGIS中选择shapefile功能,则需要忽略[加入sqlite表的shapefile],而是将所有内容导出到Spatialite。学习使用Qspatialite和Spatialite_GUI(它们互为补充,并具有许多其他功能所欠缺的功能-如果您对SQLITE进行很多操作,则将需要并使用两者)

重要的是要记住,这些表(连接到shapefile的表)在连接的同时不可编辑。因此,迁移到Spatialite将是shapefile的绝佳替代选择。它保持了shapefile的简单性和可移植性,同时提供了SQL数据库的大多数优点,而没有PostgreSQL的复杂性。


-2

临时修复可以保存为TAB文件,其列名最多可以包含31个字符。


1
不确定这是否真的回答了问题
nmtoken
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.