Arcinfo Generate 格式转Shapefile 的方法

Arc/Info Generate 格式已经有点历史,现在版本的ArcMap 都不能直接支持对该格式的读取。但由于Generate 格式对矢量数据模型的表达十分简明,在教学中仍然还广泛提及。为了看看Generate 文件的地图效果,需要把该格式转为Shapefile 等格式,才能在ArcMap 中显示。

第一种转换的方法是使用ArcGIS 的Data Interoperability 模块

ArcGIS Desktop 里需要安装 Data Interoperability 模块,在ArcMap Extension 里将该模块打勾,然后通过 ArcToolbox 下的 Data Interoperability Tools 里的Quick Import 将Generate 文件导入到Shapefile 或者 Geodatabase。

Data Interoperability 实际上是调用了内置的FME Reader 来实现格式互转,ArcInfo Generate 的短名是ARCGEN。如果Generate 文件后缀是.gen,在import时可以被自动识别;如果不是.gen,则需要手动设置输入格式是ARCGEN。

第二种转换方法是使用第三方工具 gen2shp (提供可执行文件下载)

该工具运行在命令行,可以不需要ArcGIS 独立运行。源代码在这个网址:https://www.intevation.de/cgi-bin/viewcvs-freegis.cgi/*checkout*/gen2shp/gen2shp-index.html。需要自行编制。该工具依赖一个外部库是 shapefile 库 (shapelib.dll)。

我在vs 2017下对之进行了编译,生成了可执行代码。可以从以下地址下载:

使用方法:

将下载的压缩包解压缩,里面有可执行文件和示例文件。当前目录切换到gen2shp.exe 目录,在命令行敲入:

gen2shp.exe pnttest points < pnttest.gen

gen2shp.exe arctest lines < arctest.gen

gen2shp.exe plytest polygons < plytest.gen

可以将点文件(pnttest.gen)、线文件(arctest.gen)、多边形文件(plytest.gen)转为点、线、面的shapefile。

命令格式是:

gen2shp 输出文件名 points|lines|polygons < 输入文件名

vs 2017 下的编译要点:

在vs 2017下编译,需要做一点小的改动。

  1. 在gen2shp.c 第29行,加入 #define strcasecmp _stricmp

  2. 在项目属性c/c++ 的Preprocessor 里预定义 _CRT_SECURE_NO_WARNINGS,压制使用了不安全函数的错误。

  3. 项目属性里在 Additional include directories,Additional Library Directories 里正确设置到shapelib 的头文件(shapefil.h)和库文件(shapelib.lib)的目录;

  4. 在Linker 下的Additional Dependencies 需要指定库名 shapelib.lib

然后大概差不多可以顺利编译了。

第三种方法是利用gdal工具

GDAL提供了很多种GIS矢量和栅格格式的相互转换,网址在:https://www.gdal.org。支持的数十种矢量格式列表在:https://www.gdal.org/ogr_formats.html。GDAL支持从generate 格式到 shapefile 的转换,但不支持从Shapefile 到generate。

目前GDAL 稳定版是 2.4.0。

我用VS 2017 编译了一下,生成的可执行文件、数据文件和文档可从以下链接下载:

使用方法:

  1. 解压缩,进到bin目录下

  2. 在命令行运行 ogr2ogr -f “ESRI Shapefile” outfile infile

其中 infile 是.gen文件(自动识别),outfile 是放生成shapefile 文件的一个文件夹名。

Leave a Reply

Your email address will not be published.