geobuf, 用于地理数据的compact 二进制编码

分享于 

5分钟阅读

GitHub

  繁體 雙語
A compact encoding for geographic data.
  • 源代码名称:geobuf
  • 源代码网址:http://www.github.com/mapbox/geobuf
  • geobuf源代码文档
  • geobuf源代码下载
  • Git URL:
    git://www.github.com/mapbox/geobuf.git
    Git Clone代码到本地:
    git clone http://www.github.com/mapbox/geobuf
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mapbox/geobuf
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Geobuf

    Build StatusCoverage Status

    Geobuf是用于地理数据的compact 二进制编码。

    Geobuf为GeoJSON数据缓冲区压缩提供了无损的无损压缩压缩。 单独使用GeoJSON的优势:

    • compact: 通常使 GeoJSON 6 small。
    • 比较压缩大小时更小的2-2.5x。
    • 快速编码和解码 - 比原生JSON解析/stringify更快。
    • 可以容纳任何GeoJSON数据,包括任意属性的扩展名。

    编码格式也可能允许:

    • 易于收费的增量分析- 在你读到这些特性时,不需要构建整个数据的内存表示。
    • 部分读只读你实际需要的部分,跳过剩下的部分。

    想想这是一个尝试设计一个简单的现代化的with继承者,它是在GeoJSON中无缝工作的。 不像 Mapbox矢量瓷砖,它的目标是无损无损压缩数据集- 没有平铺,投影坐标,展平几何图形或者删除属性。

    要注意的是,编码模式的代价是还不稳定它可能仍然会随着社区反馈的变化而变化,发现改进它的新方法。

    示例压缩大小数据 JSON Geobuf Geobuf ( 广州)
    美国邮政编码101.85 MB26.67 MB12.24 MB10.48 MB
    Idaho县10.92 MB2.57 MB1.37 MB1.17 MB

    API

    编码

    var buffer =geobuf.encode(geojson, newPbf());

    指定要写入的GeoJSON对象和 Pbf对象,返回一个Geobuf作为字节的array。 在 node@4.5.0 或者更高版本中,可以使用 Buffer.from 转换为缓冲区。

    解码

    var geojson =geobuf.decode(newPbf(data));

    返回具有Geobuf数据的Pbf 对象,返回一个GeoJSON对象。 在通过 XMLHttpRequest 加载Geobuf数据时,需要将 responseType 设置为 arraybuffer

    安装

    node 和 Browserify:

    npm install geobuf

    浏览器建立CDN链接:

    本地建筑:

    npm install
    npm run build-dev # dist/geobuf-dev.js (development build)npm run build-min # dist/geobuf.js (minified production build)

    命令行

    npm install -g geobuf

    安装这些漂亮的二进制文件:

    • geobuf2json: 将Geobuf从 stdin 或者指定文件转换为 stdout 上的GeoJSON
    • json2geobuf: 将GeoJSON从 stdin 或者指定文件转换为 stdout 上的Geobuf
    • shp2geobuf: 给定一个Shapefile文件名,在 stdout 上发送 Geobuf
    json2geobuf data.json > data.pbf
    shp2geobuf myshapefile > data.pbf
    geobuf2json data.pbf > data.json

    在大型文件中,geobuf2json 命令可能非常慢,但是瓶颈不是解码,而是解码对象上的本地 JSON.stringify 将它的作为一个字符串来传递给它。 在某些文件上,这里步骤可能比实际解码花费的时间要长 40倍。

    请参见

    • geojsonp - 导致这里项目的Prototype
    • pygeobuf Geobuf的python 实现
    • twkb - 一个地理空间二进制编码,不支持拓扑,不编码除 id 之外的任何非地理属性
    • vector-tile-spec
    • topojson - 支持拓扑的GeoJSON的扩展
    • WKT和 WKB - 在数据库中流行
    • EWKB - 一个流行的WKB超集

    COM  数据  BIN  GEO  二进制  
    相关文章