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

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


应保留列类型(根据Excel的格式说明符)(尤其是日期类型)
列名称应从标题中获取
我想从命令行
如果我可以在第三列中包括点的异构空间参考,我会非常高兴的:)


评论

看看这个gis.stackexchange.com/questions/86369/…

#1 楼

我建议使用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


您可以按以下方式创建VRT example.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中可见)。

评论


唯一的缺点是我必须以编程方式找出列的数据类型,以便编写标记。我想我会自己找出一个的:)

–fmark
2010年7月26日在1:33

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

– scw
2010年7月26日2:00



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

–spg
2010年7月26日4:24



用于帮助构建格式正确的vrt文件的在线服务:vrtbuilder.appspot.com

–马特·威尔基
15年5月25日在23:15

#2 楼

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

评论


使用该工具时,解析器错误经常困扰我。有什么建议吗?

–fmark
10年7月27日在0:12

你有具体的例子吗?

– gsherman
10年7月27日在1:18

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

– dassouki
10年7月27日在11:49

#3 楼

尽管不是从命令行开始的,但是您可以在ArcGIS App中执行此操作。
从9.3.1开始,只需将XLS直接添加到ArcMap中。 Y列并设置您的空间参考)
,然后将此XY事件层导出到新的.shp
,可以使用简单的python / VBA脚本或modelbuilder中的模型轻松地将其自动化。
如果您需要更多信息,可以在此基本工作流程上提供帮助。

评论


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

–jswise
2010年8月2日在17:42

#4 楼

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


使用“添加数据”(或从“目录”窗口拖放)为您的工作表(在电子表格中)并将其添加到地图中
右键单击以选择并使用“显示XY数据”来添加事件层
右键单击刚刚创建的事件层并使用Data |导出数据以创建shapefile

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

评论


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

–佐兰
2012年8月23日在4:22



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

– PolyGeo♦
2012年8月23日在4:40

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

– PolyGeo♦
2012年8月23日4:50

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

–乍得·库珀
2012年8月23日下午13:14

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

–马特·威尔基
15年5月25日在23:13



#5 楼

总是有冒险的选择。您可以自己编写形状文件。 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
10年7月28日在0:28

尽管我使用DBF作为shapefile的DBF组件已经取得了不同程度的成功,但Excel可能可以直接编写DBF。

–mwalker
2010年7月28日在17:51

Excel不会写出dbf文件。

–user30184
14年6月16日在12:33

#6 楼

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

#7 楼

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

评论


我过去曾使用过这种方法,这是一种很好的方法。我认为我一贯的绊脚石是可靠地检测excel数据类型...。

–fmark
2010年8月3日,2:19

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

–约翰·鲍威尔(John Powell)
2010年8月3日在15:34

#8 楼

将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
14年6月16日在12:36

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

–TheSteve0
14年6月25日在21:18

#9 楼

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