地理数据库和shapefile中的字符编码支持


11

我有几个地理数据库,其中很多属性中都包含带有希腊字母的要素类。当我尝试从ArcCatalog中将要素类导出为shapefile时,属性被夹在shapefile数据中,这是某种字符编码问题(它们在形状中看起来像:“ etr” e?)。当我在FWtools中使用ogr2​​ogr将图层从MDB转换为KML,shp等时,会发生同样的事情。

有没有人有尝试处理GIS数据格式中的编码格式的经验?

真正的目标是从这些Esri地理数据库中获取一些数据到Postgres / PostGIS数据库中,但是坏掉的编码将无法工作。我打算从geoDB导出到shapefile,然后使用加载它们shp2pgsql。那是到达那里的最简单的方法吗?


2
您可以使用QGIS导入带有CP1256选项的shapfile,并使用UTF8导出它,以避免非Unicode问题

Answers:


10

我想你在那儿。您可以用于iconv将一种编码转换为另一种编码,并将其用作shp2pgsql过程的一部分。例如:

shp2pgsql *postgrestablename* | iconv -f *sourceencoding* -t *targetencoding* | psql -d *yourdatabase*

如果您在Linux环境中工作,则iconv应该已经安装。对于Windows,我找到了Windows的LibIconv。但是我没有iconv在Windows 下使用的经验,所以我不能保证。

希望这可以帮助!


在可以应用shp2pgsql之前,将出现问题。如果我理解正确,shapefile中的属性已经损坏。
昏暗


在黑暗中,你是对的。在进入shp2pgsql步骤之前,数据是错误的。
colemanm

谢谢,mwalker ...到目前为止,该解决方案的效果非常好!我将CodePage格式更改为UTF-8,shapefile DBF数据现在显示正确的字符。并且使用QGIS中的PostGIS shapefile加载器,PostGIS数据库中的数据也是正确的。
colemanm

6

在我用来将具有阿拉伯语字段的File GeoDataBase转换为具有UTF-8编码的shapefile的过程的详细信息之下,该文件在QGIS和ArcMap中均能愉快地打开,并且正确显示了阿拉伯语和英语(不使用扩展名进行导出或读取):

  • 基本思想是:从FGDB导出包含.dbf的shapefile(使用错误的编码),然后导出与文本相同层的属性表(使用正确的编码,即UTF-8),并使用另一个程序用正确的UTF-8数据字段替换shapefile .dbf的内容,并以UTF-8编码保存.dbf。然后将.cpg文件添加到每个shapefile中,以通知ArcGIS .dbf的新编码。脚步:

1)将FGDB中的图层添加到ArcMap中(我使用的是10.1,但是绝对没有理由在早期版本中不使用它,因为编码位稍后才在Arc之外)。要导出,请右键单击图层,然后选择“数据”->“导出数据”,在导出对话框中单击文件夹按钮以显示“保存”对话框,然后选择“ Shapefile”作为输出格式。

1b)以上方法的替代方法:在ArcCatalog中导航到FGDB,右键单击它,选择“导出”->“到Shapefile(多个),然后通过一次操作将整个FGCB导出为充满shapefile的文件夹”。

2)现在,您有了一组带有乱码的shapefile,阿拉伯语脚本应该位于其中(在我的计算机上,它显示问号代替字符)。在Excel或其他工具中打开的shapefile的.dbf部分具有乱码而不是阿拉伯语;这不仅仅是GIS程序中的显示问题,还在于.dbf文件本身不包含阿拉伯字符。暂时还没有帮助。

3)在ArcMap中,从FGDB打开图层的属性表。该表将打开,并且正确显示了英语和阿拉伯语(这就是为什么首先使用FGDB的原因)。在“属性表”窗口的“表选项”菜单中,选择“导出”,然后在“导出数据”对话框中单击“输出文件夹”按钮,进入“保存数据”对话框,在其中选择“文本文件”作为输出类型。现在,您将拥有一个文本文件,该文件将在记事本中打开,并带有逗号分隔符,编码为UTF-8,同时正确编码了英语和阿拉伯语(此时阿拉伯语应在记事本中正确显示)。

现在,将这些信息获取到shapefile的.dbf部分中!

4)打开LibreOffice Calc,这是一个免费的开源Excel克隆,可轻松打开,操作和保存.dbf文件,以打开shapefile的.dbf文件。

顺便说一句,出于意识形态的原因,在这种情况下,我没有使用LibreOffice而不是MS Office,只是因为我无法弄清楚如何使Excel保存.dbf文件(在Calc中很容易),实际上这是在Calc中打开并修改.dbf文件后,单击“保存”时的默认选项,而Excel实际上指出该文件“无法以当前格式保存”,因此不能“将其另存为最新格式” (没有.dbf选项出现)。有一些Excel扩展程序/插件可以完成这项工作(

Calc中的.dbf文件仍然显示乱码代替阿拉伯语。旁边,打开从同一shapefile的属性表中导出的.csv,并确保在打开的对话框中将UTF-8指定为编码(逗号作为定界符)。文本文件应在第二个Calc电子表格中打开,并正确显示阿拉伯语,并且它们应包含与.dbf相同的列以及开头的OBJECTID列。将包含正确阿拉伯语的.csv列复制粘贴到.dbf中(实际上,我只是将整个表复制粘贴到了表格中,最左边的ID列除外,以节省时间;该信息始终是相同的)。在LibreOffice中修改后的.dbf中单击Save(它会询问您是否真的要使用.dbf这样的奇怪格式;是的,您会这样做)。

对FGDB中shapefile的所有.dbf组件重复此过程,将所有乱码列替换为阿拉伯字符串。

5)在粘贴了阿拉伯语列的基础上重新保存.dbf部分后,您可以在QGIS中打开shapefile,并且只要在导入矢量中指定UTF-8作为编码,它们就可以在两种语言中正常工作。文件对话框。但是,它们仍然无法在ArcGIS中正常工作(或至少在所有版本中都不能正常工作),因为当将shapefile添加到项目中时,ArcGIS无法自动识别编码或让您选择编码。Arc需要shapefile的单独组件(称为代码页转换(.cpg)文件)来指示要读取哪种编码。

6)使用文本编辑器(记事本,nano或其他任何东西,但不包括Word或任何其他文字处理器)来创建仅包含五个字符“ UTF-8”的文本文件。将其保存为每个shapefile的.cpg(我只需在“另存为”对话框中单击shapefile的一个peice,然后删除扩展名并添加.cpg),与shapefile放在同一文件夹中(它基本上成为Hi的另一个peice多部分shapefile)。.cpg扩展名告诉Arc这是一个包含有关.dbf文件编码信息的文件。一旦将其及其同名但不同扩展名的同级兄弟一起捆绑到shapefile中,即可由ArcGIS自动识别shapefile的编码。

7)瞧。现在,据我所知,形状文件同时包含英语和阿拉伯字符串,与原始File GeoDataBase中的一样。它们在我的ArcMap和QGIS安装中都打开,在两种情况下,两种语言的字符串都可以正确显示,包括地图标签中的字符串。

注意事项:

  • 并非所有的ArcGIS副本都似乎将属性表导出为正确填充的文本文件(在至少一台计算机上,尝试将属性表导出为文本文件会导致文件仅包含标题,而不包含数据行。 Arc的行为不正确(当然应该能够将属性表导出为文本),但是对于某些用户来说可能会出现,这使得其余步骤无法实现。

  • 似乎ArcGIS不会以UTF-8编码保存新的shapefile。这只会影响希望根据数据创建新shapefile的用户,而不影响仅希望显示,修改并使用它们制作地图的用户。解决方法似乎涉及您的Windows注册表的混乱,详情如下:(http://support.esri.com/cn/knowledgebase/techarticles/detail/21106)。我不需要处理它,因为我的ArcGIS和QGIS似乎都可以愉快地识别使用上述过程保存的shapefile,并且我可以修改几何图形和表格条目,甚至可以添加带有更多阿拉伯文字的新多边形而没有任何明显的问题(即使Arc似乎不想使用UTF-8编码保存新的shapefile,它似乎也愿意更新/保存它们。

  • 我假设LibreOffice的功能在Windows中与在计算机上相同。我的大部分工作都使用GNU / Linux,并且仅在需要使用ArcGIS或Autocad进行某些任务时才引导至Windows,因此我在Fedora上运行的Libreoffice中对.dbf文件进行了修改。我认为它在Windows上的工作方式相同,但如果不在Windows分区上安装LibreOffice,就无法进行测试,而且对于不必要的下载,我当前的Internet连接速度有点慢。有一些Excel插件,允许您以选定的编码格式保存.dbf文件(例如,exceltodbf.sourceforge.net /),但我没有尝试过。可能还有其他方式可以操纵和保存.dbf,但是在找到使用LibreOffice的合理简便方法后,我没有对其进行研究。

  • 如果您为ArcGIS中的“生产映射”扩展付费,则整个问题似乎是可以避免的,该扩展允许您根据以下页面将FGDB直接转换为UTF-8编码的shapefile:http : //resources.arcgis.com/en/help /main/10.1/index.html#//0103000001m1000000。为什么只有相当付费的客户才能使用这种相当基本的功能(Unicode已经存在了一段时间,并且除了英语以外还有很多语言)才是ESRI的问题。


0

您需要首先弄清楚输入数据的编码方式,以便告诉您的工具如何将数据转换为适当的编码。如果您具有Access,我将尝试直接从MDB将表导出为文本,并将输出编码设置为UTF8。如果在ArcGIS中打开导出的shapefile,编码设置是否正确?DBF 支持代码页,并且OGR可能没有为转换选择正确的页面。

还有一些强制MDBtools(用作OGR驱动程序的一部分)以显式设置输入流的方法,但是我将首先尝试其他方法。


0

我宁愿去ArcGIS方式。按照此处的说明,只需在ArcGIS中将编码设置为UTF-8 。之后,只需将要素类导出到ShapeFile。现在,您将在每个图层上获得一个额外的CPG(代码页文件)文件。这只是一个文本文件,其中包含字符串“ UTF-8”,并且所有数据都会自动编码为UTF-8。

如果您有兴趣使用其他编码,请参阅说明。

重要的是完成此分配后,应将此设置更改为默认值,因为如果保留此值,例如“ UTF-8”,则以后ArcGIS将使用“ UTF-8”编码导出所有ShapeFile。

希望对您有帮助。

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.