准备要在ArcGIS Desktop中使用的CSV文件?


16

如何准备CSV文件以在ArcGIS Desktop中使用。

我问是因为我在使用CSV文件时遇到了一些麻烦,因为ArcGIS将错误的字段类型归因于我的列,并且还会误解á或ê等特殊字符。

我已经在Esri论坛上阅读了一个所谓的schema.ini文件,该文件以某种方式定义了字段类型,例如“ Col22 = V002文本”,请参见此处http://forums.esri.com/Thread.asp?c=93&f = 1149&t = 64464

这很有趣,因为我经常在光盘上看到这些.ini文件,但从未真正想到它们有什么用。Excel将此类元数据存储在一个额外的文件中有点奇怪,因为R之类的其他程序没有这样做。

我已经尝试操纵此.ini文件,但收效甚微,因为我不知道如何应用“字符串”类型。MS网站上有一些信息,请参见此处:http : //msdn.microsoft.com/zh-cn/library/windows/desktop/ms709353%28v=vs.85%29.aspx,但我找不到解决方案。

另外,我真的不喜欢使用此.ini文件的想法,因为当我有50列时,定义和键入所有字段名需要大量的工作。这些.ini文件可能会丢失,等等。

Answers:


16

我的快速解决方案是创建所有带有伪值的第一行,然后在将它们引入ArcGIS之后删除该行/记录。

第一行包含代表性值或通常非常不同的值(例如,即使该列包含我想成为文本数据类型的数字,也包含字母字符),并且该行所需的字符数最多(因为文本字段倾向于被截断) 。

日期/时间值可能会导入错误(尤其是在加拿大/美国默认日期格式之间),因此我的解决方法是将日期/时间部分拆分为单独的列(例如,年,月,日,时,分),然后成功导入ArcGIS后,将它们合并到新的字段计算中。

杰米(Jamie)的地理坐标提示也是必要的-为西半球经度和南半球纬度指定负值。unicode处理特殊字符。

最后,如果将字段数据类型带入ArcGIS后仍然被误解,我将以正确的数据类型添加一个新字段,并计算/转换原始字段中的值,但是通常,虚拟行/记录会处理大部分(如果不是)所有的问题。


8

与传统的CSV-> ArcGIS图层略有不同的是,可以先使用ogr2​​ogr从CSV创建shapefile, 然后再将其加载到ArcMap中。

使用OGR时,可以手动创建描述列类型的CSVT文件,类似于ArcGIS尝试对schema.ini文件进行的操作。

@underdark撰写的有关如何指定CSV列的数据类型(在QGIS中使用)的帖子介绍了创建CSVT的详细信息。您可以忽略QGIS的使用,因为QGIS仅使用ogr将CSV数据导入到其UI中。


7

使用ArcGIS 10,您可以创建要素类并首先设置所有字段类型,然后使用ArcCatalog加载.csv文件。只需右键单击要素类,然后选择“加载”>“加载数据”。然后,按照“简单数据加载器”对话框来匹配字段等。这是一个简单的加载器,因为没有太多选项,但适用于格式正确的数据。我不确定这是10的新手,因为我没有方便检查的早期版本。


3

解决这些问题的正确方法是使用@Kirk_Kuykendall在注释中建议的“ schema.ini”文件。这是Microsoft处理来自CSV到数据库的输入的标准方法,在该数据库中列类型可能会被不明确地解释。

从CSV导入时,ArcGIS尊重这些“ schema.ini”文件。

请参阅以下网址的 Microsoft文档:https : //docs.microsoft.com/zh-cn/sql/odbc/microsoft/schema-ini-file-text-file-driver?view=sql-server-2017

“ schema.ini”文件必须与CSV文件位于同一位置,并且如果需要,它可以在同一位置包含多个其他CSV文件的配置。

单个CSV文件的简单“ schema.ini”文件只有一列,否则会读取错误的类型,看起来像这样:

[SomeFileName.csv]
Col2=SomeFieldName Long

确认这在ArcGIS Pro中有效。我正在使用其他方法,在该方法中,您添加一个顶部数据行,该行的值与所需的数据类型相匹配,这适用于一次性数据,但是如果表很大或您具有自动化功能,那么这无疑是最好的解决方案。您只需设置它,然后忘记它!
alexGIS

1

我发现一种解决方法是在文本编辑器(我使用notepad ++)中打开CSV并再次另存为CSV。我没有看到文件内容的任何可见变化,包括特殊的标记字符,但是问题可能与Excel如何格式化CSV文件有关。我使用标准CSV选项“ CSV(逗号分隔)(*。csv)”将文件保存在Excel中。也许使用其他CSV格式会更好。

附加信息:当我用notepad ++保存CSV文件时,它的基本内容必须已更改,因为现在我可以在excel中对其进行编辑和保存,并且arcmap仍会将其导入为数字。我不知道有什么改变。


-2

出乎意料的是,在文本编辑器(对我而言是UltraEdit)中打开原始文件(对我来说是.txt)并将其另存为.csv或.txt可以正常工作。UltraEdit,pandas或我可以看到的任何其他检查方法中的文件没有明显变化。

没有一种解决方法,包括我自己的解决方法,都无法解释ArcMap有时仅决定将数字列读取为文本的根本原因。

因此,它两次工作了……然后完全相同的过程停止了工作。

我必须删除所有联接,删除表,关闭ArcMap,在文本编辑器中打开表,重新保存表,打开ArcMap,添加表并重做联接...每次更改表。

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.