如何将具有x,y列的Excel文件转换为shapefile?


26

如何将具有x,y列的Excel文件转换为点shapefile?

除了正确创建shapefile之外,还有一些可选的要求:

  1. 列类型(根据Excel的格式说明符)应保留(尤其是日期类型)
  2. 列名应取自标题
  3. 在命令行做到这一点
  4. 如果我可以在第三列中包括点的异构空间参考,我会非常高兴的:)

Answers:


24

我建议使用OGR / GDAL,它是GDAL库的一部分。OGR支持虚拟格式,该格式允许通过XML文件进行规范。如果将Excel工作表转换为CSV,则可以生成VRT来访问数据。

假设您有这样的事情example.csv

Lat,Long,Year,Name
34.0,-120.0,2010-05-01,Off Santa Rosa Island

您可以example.vrt如下创建VRT :

<OGRVRTDataSource>
    <OGRVRTLayer name="example">
        <SrcDataSource>example.csv</SrcDataSource>
        <GeometryType>wkbPoint</GeometryType>
        <LayerSRS>WGS84</LayerSRS>
        <GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
    </OGRVRTLayer>
</OGRVRTDataSource>

从GDAL 1.7开始,您还可以使用中的<Field>元素另外指定属性字段的数据类型<OGRVRTLayer>,如下所示:

    <Field name="date" src="Year" type="Date" />

请记住,shapefile以DBASE IV格式存储属性,该属性在数据类型上的灵活性低于Excel。一旦指定了VRT文件,就可以使用普通的OGR工具链将数据转换为Shapefile:

ogr2ogr -f "ESRI Shapefile" example.shp example.vrt

不幸的是,#4是不可能的-shapefile规范允许单个投影(example.prj在最后一步之后可以在此处查看)。


唯一的缺点是我必须以编程方式找出列的数据类型,以便编写<Field>标签。我想我会自己解决这个问题的:)
fmark

对。如果您想要一个自动化解决方案并可以访问ArcGIS,则可以使用“添加XY坐标”工具 tinyurl.com/38jm55k来完成,该步骤将为您完成。
SCW

一个重要的考虑因素是首先将Excel文件转换为适合ESRI shapefile的格式-列名,名称的长度受到限制,如果您使用添加XY工具,则ESRI自动使用可能会导致字段类型的方式问题。webhelp.esri.com/arcgisdesktop/9.2/...
SPG

3
在线服务以帮助构建格式正确的vrt文件:vrtbuilder.appspot.com
马特·威尔基

9

您可以使用QGIS (http://qgis.org)随附的Delimited Text插件加载文本文件,然后将其另存为shapefile。


使用该工具时,我经常会遇到解析器错误。有什么建议吗?
fmark

1
你有具体的例子吗?
gsherman 2010年

@fmark-我也得到这些错误,这通常是由于MS Excel处理csv
dassouki 2010年

6

尽管不是通过命令行,但是您可以在ArcGIS App中执行此操作。从9.3.1开始,只需将XLS直接添加到ArcMap中即可。从XLS创建XY事件层(即,选择X,Y列并设置空间参考),然后将此XY事件层导出到新的.shp中,这可以通过简单的python / VBA脚本或modelbuilder中的模型轻松实现。如果您需要更多信息,很高兴在此基本工作流程上提供帮助。


1
如果使用Python,则可以从命令行运行地理处理工具。
jswise

6

我在网络帮助中寻找但未在“显示XY数据”上找到帮助页面,但过程很简单。

  1. 使用添加数据(或从目录窗口拖放)浏览工作表(在电子表格中)并将其添加到地图
  2. 右键单击以选择并使用“ 显示XY数据”添加事件层
  3. 右键单击刚刚创建的事件层,然后使用“ 数据|导出数据”创建一个shapefile

您只需要ArcGIS(for)Desktop的ArcView(Basic)许可级别即可。


我需要对不属于数据一部分的顶部列执行任何操作吗?
Zoran

哪两列不属于您的数据?我描述的过程应该使用您选择的任何长/纬度列来生成点几何,然后,我将其余的存储为它们的属性。最好的办法是尝试一下,如果结果与预期不符,请描述您观察到的与预期的对比。
PolyGeo

认为我误读了top的两个-并假设您是指(标题)的第一行。它们应该只是在添加数据之后的字段名称。
PolyGeo

不确定是否仍然如此,但是Excel文件中标头名称中的空格曾经是添加XY的头疼问题。
乍得·库珀

1
将Excel文件直接加载到ArcGIS可以很好地工作-除非不是这样!需要注意的事情:日期混乱,数字被截断。故障排除的第一步始终是将所有列定义为文本导出到CSV并加载,以查看问题是否持续存在。除了警告。显示为X / Y效果很好。
马特·威尔基

4

总是有冒险的选择。您可以自己编写形状文件。ESRI发布了shapefile的规范,您可以在此处阅读:

http://www.esri.com/library/whitepapers/pdfs/shapefile.pdf

您可能还需要编写一个DBF文件。您可以在此处阅读有关格式的信息:

http://www.clicketyclick.dk/databases/xbase/format/dbf.html#DBF_STRUCT

毫无疑问,这太过分了,但是它将为您带来对整个过程进行控制的优势。


我实际上是这样的-虽然我将使用OGR而不是直接编写shapefile!
fmark

2
尽管我使用那些DBF作为shapefile的DBF组件获得了不同程度的成功,但Excel可能可以直接编写DBF。
mwalker

Excel不会写出dbf文件。
user30184 2014年

3

我个人更喜欢使用Safe Software(http://www.safe.com)的FME,它不仅可以让我根据XY值来绘制点,而且还可以让我灵活地在绘制之前将坐标从一个投影转换为另一个投影,请指定分隔符的类型,起始行(如果文本文件具有标题信息),附加属性(如果文本文件具有X,Y,点数据的属性信息)。如果您想在Google Earth中可视化此数据,则可以在指定KML点样式的同时将它们写入KML格式。〜SRG


2

如果要对x,y数据进行其他处理,则可以将数据加载到postgres中,并用geomfromtext和串联创建几何数据类型,然后使用pgsql2shp导出形状。这种方法还允许您将异构空间参考系统数据保留在另一列中,然后可以将其用于将所有点转换为db中的公共参考系统,然后再导出为形状。我意识到与ogr / gdal相比,这涉及更多的步骤,但是它将为您提供更多的灵活性。


我过去曾使用过这种方法,这是一种很好的方法。我觉得我一贯的绊脚石这里检测可靠Excel数据类型....
FMARK

1
我想您可以在excel vba中写一些东西来首先重新排列您的列,以便日期x,y始终是前3列。但是,如果没有某种列命名约定,我想很难完全自动化您的想法。
约翰·鲍威尔

1

怎样将CSV文件加载到spaceallite中,然后使用OGR或QGIS导出到shapefile呢?

http://www.gaia-gis.it/spatialite-2.2/index.html

您甚至可以直接从spacespaceite导出到shapefile。

http://www.gaia-gis.it/spatialite-2.2/spatialite-2.2_tutorial.html#t3.1


如果Spatialite具有旧的.xls格式(Excel 97-2003),则可以直接导入Excel文件。初始导入后,必须使用SQL将X和Y坐标转换为几何形状。
user30184 2014年

如果您不介意使用Java,则可以使用POI项目将excel文件拆开,然后使用GeoTools编写新的shapefile
TheSteve0 2014年

0

若要进行更基本的转换,可以在FME 2013中使用2Dpointreplacer转换器。您需要指出X和Y值位于哪些列中,然后FME会将这些值转换为具有点的形状文件。
列名称和类型可以根据需要设置

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.