Shapefile的替代品,作为开源,跨平台数据集类型


20

我正在开发非常面向ESRI的软件,但是将来的版本可能不会使用ESRI软件。它使用Shapefile和Geodatabase。我计划将所有数据都存储到Shapefile中,以期该软件的未来版本可能会在Android和其他移动设备上使用。看起来Shapefile是开放源GIS世界中最常见的要素数据类型,但其他还有什么,它们带来什么好处?我熟悉GeoJSON和KML,但我敢肯定还有其他人。

我想知道所有选项,但是我对最适合存储在移动设备上的数据集类型特别感兴趣(必须在没有Internet连接的情况下访问数据)。



1
在GeoPackage存在之前就提出了2011年的问题,答案自然不包括该选择。
user30184

2
Esri File Geodatabase的char字段的最大长度可以与大多数小型图书馆的文本内容匹敌,Esri Personal Geodatabase也支持非常长的文本字段。两者都可以通过QGIS和Esri ArcGIS进行访问,但是在这些软件包之外,对这些数据类型的支持受到限制。不过请注意版本,我会尝试创建9.3兼容版本,因为您可能会遇到的大多数Esri软件都将是10+,并且用于QGIS的地理数据库API 应该支持该版本。GeoJSON和KML还可以支持较大的文本字段,但并不通用。
Michael Stimson

1
嗯,9.3对于文件地理数据库兼容性不是一个好的计划-FGDB API不支持9.x样式的.gdb。
文斯

1
尽管有其局限性,但@ElioDiaz shapefile仍然存在,因为它们是最通用的功能转移媒体- 几乎每个 GIS包都可以打开或可以导入Esri shapefile。该格式是一个开放标准,因此任何人都可以以自己的方式阅读和实现。毫无疑问,有优越的地理信息系统功能,格式,但他们并不像普遍采用的......这个话题已经讨论了很多关于GIS.SE.倍 就像我们希望的那样,否则shapefile在一段时间内可能是要素的最低公分母,因此我们只需要咧着嘴笑即可。
Michael Stimson

Answers:


18

正如@ user890所说,这在很大程度上取决于如何使用数据。主要有两种访问数据的方式:

  1. 通过将它们全部加载到内存中,然后访问/查询内存中的数据。
  2. 通过查询特定特征,边界框等

像GeoJSON和KML这样的格式最适合想要一次性加载所有内容的情况。好处是可以以更适合您的应用程序的方式来结构化数据。缺点:文件较大(由于它们是基于文本的),并且无法直接从文件中进行有效查询。

SQLite / Spatialite更适合查询(SQL),但结构化数据更为困难-查询时,您必须将所有内容放平到数据库表中,然后执行JOIN(这可能很昂贵)。

确实没有一种完美的文件格式可以覆盖所有文件(但是shapefile远非完美)。考虑的一种替代方法是滚动使用自己的特定于应用程序的格式,但这仅在不需要与外界共享数据的情况下才有效。


14

我认为OGR矢量格式列表(链接已更新)几乎可以标识出我所听说过的每种开源格式,以及更多。这些格式中的每一种都有其自身的优点/缺点,因此很难说哪种是“最佳”的。对于移动应用程序,我认为文件大小将是更重要的决定因素之一。

对于移动应用程序,我认为sqlite / spatialite格式将是一开始的逻辑格式。我知道Android为sqlite提供了本机支持。因此,假设您可以加载spacespaceite扩展,那么您将拥有非常强大的gis。

根据您的冒险程度,似乎并非不可能为Android构建gdal。可以想象,您可以使用更多的格式。我敢肯定,如果您选择此路线,此网站上的许多用户都会感兴趣。


13

Geopackage是最近出现的一种新格式。该规范建立在SQLite数据库之上,因此具有相同的单文件基础,但具有作为OGC标准的附加好处。
关于文件大小,存储格式可能比Shapefile中使用的空间和属性数据的.shp.dbf格式更紧凑。因此,与Shapefile中相同要素的总和相比,GeoPackage的大小可能相同或较小。
这张照片显示了同时保存为Shapefile和GeoPackage的圣地亚哥下水道干线。如您所见,它们的大小基本相同。 Shapefile与Geopackage大小
由于此格式基于SQLite,因此应为移动设备准备就绪。许多应用程序已经使用此数据库格式进行存储,因此这是一项经过验证的技术。它可以跨平台使用,无需任何翻译。


4

同意Lennert,为工作选择正确的格式。

但是我发现Spatialite是一种非常通用的格式。您只有一个文件,可以像shapefile一样灵活地存储和共享数据,但是可以用字符数限制来消除所提到的问题。同时让您有机会利用空间数据库的优势。

不幸的是,它在ArcGIS中并未得到完全支持(我已经有一段时间没有尝试过了,所以我可能是错的),但是在QGIS中却能很好地工作。


4

有很多不同的格式,最好的格式取决于您拥有的数据集,使用的工具以及您要使用的功能。

我使用的一些:

  • 文件地理数据库和空间数据库:我喜欢使用的包包。它可以保存各种数据,并具有关系,建立索引...在Esri环境中工作时,我会使用gdb,在其他方面都使用spacespaceite。

  • GeoJson:易于阅读的格式,我通常用于不需要太多索引方式的小型数据集

  • 合适的数据库:我倾向于将其用于海量数据集和复杂算法。

但是还有很多其他的。


3

我建议使用SQLite / spatiallite数据库。它是一个单独的文件,如地理数据库(一个到多个表/图层),可以在ArcGIS Desktop和QGIS中使用。


我将多边形数据保存在sqlite中,并使用QGIS加载了该数据,并收到一条消息,指出“ CRS未定义:默认为CRS EPSG:4326-WGS84”。它不会丢失投影信息吗?
一郎2017年

您使用什么软件将多边形图层保存到sqlite?
Artwork21年

1

这些选项实际上取决于您将使用哪种语言以及如何使用数据。Android很可能是Java。根据该决定,每种选择都是一种成本/收益比较。所有数据格式针对特定用例进行了优化。

下一个问题是如何使用数据。移动应用程序会读取空间数据吗?还是会经常读写数据?它会多久与其他设备或服务器交换一次数据?

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.