功能完整性 常见、免费 GIS/Geo-Databases (PostgreSQL/PostGIS、SQLite/Spa



对于GIS功能的实现,我们必须在各种替代方案之间进行选择。 应避免支付许可费,因此我们将其缩小到上述 3 项。但也许一个人也应该/可以考虑其他人?

我们的主要标准是:

  • 无许可费
  • 理想情况下,对整个系统的使用没有限制(对于公共,政府组织,调整/开发(
  • xx GB 范围内的 (XML( 输入数据(低冗余(
  • xx GB 范围内的 (XML( 输出(低冗余((转换后的输入数据(
  • 良好的性能(RAM 使用率、CPU 使用率、磁盘使用率(和吞吐量
  • SFA-SQL (OGC 标准(
    • (问题焦点(
    • 需要兼容性,但并非绝对必要
    • 不需要高功能覆盖率,但需要(至少是"基本"操作(
    • (其他搜索标签:SFS、SFSQL简单功能访问(
  • DB-GIS和sysadm/dbadm用户的经验:应该能够安装和配置数据库系统
  • 开发人员的DB-GIS经验:大多数具有PostgreSQL/PostGIS经验,其他次要经验

从各个网站收集上述要点的重要信息并不容易,所以我会尽量总结一下(稍后再补充(。
到目前为止,我们的发现(请随时调整/添加(:

空间数据库或比较列表

  • 维基百科中相当不完整的列表 (2018-10-09(
  • PostGIS与Spatialite相比如何?(2012(
  • djangoproject 兼容性表(Web 开发框架(比较 PostGIS、Oracle、MySQL、SpatiaLite 和 PGRaster (2018-10-09/v2.1.2 (2018-10-01((
  • 14 alternativeto.net 系统 (2018-10-09(

(1(:下面的纯"函数名称量"计算不应被视为完全可限定的度量,因为签名设计(重载、可组合性等(会对实际灵活性和功能覆盖率产生更大的影响。(=> 理论上更少的函数可能"更好"(

SQLite with SpatiaLite

  • 嵌入式数据库
  • C 语言编写
  • ~440(1( 地理函数(2018-10-09/4.3.0(
    • 请参阅底部的计算函数
  • SFA-SQL-coverage
    • SpatiaLite扩展了SQLite现有的空间支持,以涵盖OGC的SFS规范(维基百科(

    • SpatiaLite支持来自OGC的多个开放标准,并已被列为拟议的GeoPackage标准的参考实现(维基百科(

H2 与 H2GIS

  • 嵌入式数据库
  • 爪哇编写
  • ~191(1( 地理函数(2018-10-09/1.4.0(
  • SFA-SQL-coverage
    • H2GIS实现了">地理信息的 OpenGIS ® 实现标准 - 简单要素访问 - 第 2 部分:SQL 选项"中描述的 SQL 例程 OGS (2018-10-09/06-104r4 (

PostgreSQL with PostGIS

  • 通用客户端-服务器数据库
  • ~310(1( 地理函数(2018-10-09/2.5(
    • 请参阅底部的计算函数
  • SFA-SQL-coverage
    • PostGIS被OGC注册为"实现SQL的简单功能"的指定标准.4 PostGIS尚未被OGC认证为合规。(维基百科(

我们的偏好/选择

(这是非常主观的,仅出于此处的信息原因!

我们决定使用 PostGIS 仅仅是因为

  • 我们认为性能和海量数据处理的风险对于我们的需求来说是最低的
  • 我们将来可能会使用其他常见或更高级的关系数据库功能
  • 我们在这方面有很多经验
  • 我们将整个系统放在预安装的虚拟机中,因此在这一点上,DBMS的可嵌入性对我们或客户来说并不重要

附录:用于计算地理函数的帮助程序函数

(JavaScript 基于 Firefox 控制台/使用 Firefox 控制台进行测试(

用于 SpatiaLite 函数站点上计数函数的 JavaScript

结果:

"-#19  version  (tr#0 - tr#21)
-#15  generic  (tr#21 - tr#38)
-#08  global  (tr#38 - tr#48)
-#26  math  (tr#48 - tr#76)
+#06  error  (tr#76 - tr#84)
+#20  length_cvt  (tr#84 - tr#106)
+#02  dms_cvt  (tr#106 - tr#110)
-#14  blob  (tr#110 - tr#126)
+#32  p0  (tr#126 - tr#160)
+#11  p1  (tr#160 - tr#173)
+#11  p2  (tr#173 - tr#186)
+#03  p3  (tr#186 - tr#191)
+#13  p3misc  (tr#191 - tr#206)
+#20  p4  (tr#206 - tr#228)
+#01  repair  (tr#228 - tr#231)
+#02  compress  (tr#231 - tr#235)
+#09  cast  (tr#235 - tr#246)
+#04  dims-cast  (tr#246 - tr#252)
+#04  p5  (tr#252 - tr#258)
+#14  p6  (tr#258 - tr#274)
+#07  p7  (tr#274 - tr#283)
+#03  p8  (tr#283 - tr#288)
+#03  p9  (tr#288 - tr#293)
+#02  p10  (tr#293 - tr#297)
+#08  p11  (tr#297 - tr#307)
+#11  p12  (tr#307 - tr#320)
+#03  p13  (tr#320 - tr#325)
+#08  p14  (tr#325 - tr#335)
+#28  p14b  (tr#335 - tr#365)
+#03  p14c  (tr#365 - tr#370)
+#16  p14d  (tr#370 - tr#388)
+#10  p15  (tr#388 - tr#400)
+#23  p15plus  (tr#400 - tr#425)
+#22  p16  (tr#425 - tr#449)
-#02  p16metacatalog  (tr#449 - tr#453)
+#41  p16style  (tr#453 - tr#496)
-#03  p16isometa  (tr#496 - tr#501)
+#07  p16fdo  (tr#501 - tr#510)
+#23  p16gpkg  (tr#510 - tr#535)
+#04  p17  (tr#535 - tr#541)
+#04  p18  (tr#541 - tr#547)
+#33  xmlBlob  (tr#547 - tr#582)
+#12  srid  (tr#582 - tr#596)
+#17  advanced  (tr#596 - tr#615)
gis functions: 440"

功能:

x=$x("//tr/td/h3/a[@name]")   // header anchors
os=''                         // output string
trs=$x("//tr")                // tr nodes
gf=0                          // gis functions
nongis= ['version','generic','global','math','blob','p16metacatalog','p16isometa']  // non-gis function sections/anchors
for (var i=0; i< x.length; i++ ) {
isgs = nongis.indexOf( x[i].attributes['name'].value ) == -1  // is gis section
c= trs.indexOf( x[i].parentNode.parentNode.parentNode )       // current header index
n= (i == x.length-1) ? trs.length+1 : trs.indexOf( x[i+1].parentNode.parentNode.parentNode )  // next header index
os+= (!isgs ? '-' : '+' ) + '#' + ((n-c-2 > 9 ? '' : '0') + (n-c-2)) + '  ' + x[i].attributes['name'].value + '  (tr#' + c + ' - tr#' + n + ')n'
gf+= isgs ? n-c-2 : 0
}
os += 'gis functions: ' + gf

用于在PostGIS函数站点上计数函数的JavaScript

$x('//a[@name="PostGIS_TypeFunctionMatrix"]/../../../../..//tbody/tr').length

最新更新