代码之家  ›  专栏  ›  技术社区  ›  Andreas Covidiot

通用、免费GIS/Geo数据库(PostgreSQL/PostGIS、SQLite/SpatiaLite、H2/H2GIS等)的功能完整性比较

  •  0
  • Andreas Covidiot  · 技术社区  · 8 年前

    • 无许可证费用
    • (XML)xx GB范围内的输入数据(低冗余)
    • 良好的性能(RAM使用率、CPU使用率、磁盘使用率)和吞吐量
    • SFA-SQL (OGC标准)
      • ( 关注问题 )
      • 不需要高功能覆盖率,但需要(至少是“基本”操作)
      • (其他搜索标签: SFS公司 , SFSQL语言 , 简单的功能访问 )
    • DB-GIS和sysadm/dbadm用户体验:应该能够安装和配置DB系统
    • 开发人员的DB-GIS经验:大多数有PostgreSQL/PostGIS的经验,其他的经验较少
    1 回复  |  直到 8 年前
        1
  •  0
  •   Andreas Covidiot    8 年前

    从不同的站点收集上述要点的重要信息并不容易,所以我会尽可能地总结(稍后再补充)。

    空间数据库或比较列表

    (1):

    SQLite SpatiaLite

    • 写在 C
    • ~440 (1) geo functions (2018-10-09 / 4.3.0)
      • 请参阅底部的计算函数
    • :
      • SpatiaLite将SQLite现有的空间支持扩展到 涵盖OGC的SFS规范 ( Wikipedia )

      • SpatiaLite支持来自OGC的几个开放标准,并且已经 Wikipedia )

    H2 具有 H2GIS

    • 嵌入式数据库
    • 写在
    • ~191 (1) geo functions (2018-10-09 / 1.4.0)
    • :
      • H2GIS系统 工具 地理信息用OpenGIS实现标准简单特征存取第2部分:SQL选项 OGS (2018-10-09/06-104r4)

    PostgreSQL 具有 PostGIS

    • 常见的 客户服务器数据库
    • (1) geo functions
      • 请参阅底部的计算函数
    • SFA SQL覆盖率 :
      • OGC为“Simple Features for SQL”注册为“implements the specified standard” . 4 波斯吉斯 不 曾经 经OGC认证为合规 Wikipedia

    (这是非常主观的,只是为了提供信息!)

    • 我们认为性能和海量数据处理方面的风险对于我们的需求来说是最低的
    • 我们将来可能会使用其他常见的或更高级的关系数据库功能

    附录:计算geo函数的助手函数

    (JavaScript基于Firefox控制台/通过Firefox控制台测试)

    计算函数的JavaScript SpatiaLite functions site

    结果:

    "-#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 functions site

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