除了正确创建shapefile之外,还有一些可选要求:
应保留列类型(根据Excel的格式说明符)(尤其是日期类型)
列名称应从标题中获取
我想从命令行
如果我可以在第三列中包括点的异构空间参考,我会非常高兴的:)
#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会将这些值转换为具有点的形状文件。列名称和类型可以根据需要设置
评论
看看这个gis.stackexchange.com/questions/86369/…