WKB到WKT JavaScript函数


10

事实证明json 在传输二进制数据方面不太好。但是,有了HTML5,XHR2现在能够干净地传输blob。我希望传输二进制几何图形(以节省带宽)并在客户端上对其进行解码。

无济于事,我在网上搜索了基于JavaScript的WKB(知名二进制)WKT(知名文本)功能。在我重新发明轮子之前-有人知道任何开源解决方案吗?


顺便说一句,您不应使用blob,而应使用arraybuffer。
NicklasAvén'13年

Answers:


11

此后似乎出现了一个新的且受到更好支持的JS WKB解析库。

https://github.com/cschwarz/wkx

我已经能够使用它将WKB直接从postgres转换为可以在浏览器中映射的JS对象。您需要在网页中包含https://github.com/cschwarz/wkx/blob/master/dist/wkx.js,此功能才能正常工作。

// Required imports (works in browser, too)
var wkx = require('wkx');
var buffer = require('buffer');

// Sample data to convert
var wkbLonlat = '010100000072675909D36C52C0E151BB43B05E4440';

// Split WKB into array of integers (necessary to turn it into buffer)
var hexAry = wkbLonlat.match(/.{2}/g);
var intAry = [];
for (var i in hexAry) {
  intAry.push(parseInt(hexAry[i], 16));
}

// Generate the buffer
var buf = new buffer.Buffer(intAry);

// Parse buffer into geometric object
var geom = wkx.Geometry.parse(buf);

// Should log '-73.700380647'
console.log(geom.x)

// Should log '40.739754168'
console.log(geom.y)

1
嘿,OP。在1.5年前问过这个问题。太棒了!
乔丹·阿塞诺

7

到目前为止,我发现的唯一的纯JavaScript解决方案(并且我没有尝试)是https://github.com/thejefflarson/wkb.js。这只是一个不完整的WKB解析器(它将WKB转换为可以转换为WKT的js对象)

在javascript方面,wkb的另一种替代方法可以是实验性twkb(目前尚不为标准) http://blog.jordogskog.no/2013/05/05/mapservice-from-websocket-with-twkb/但需要与自定义PostGIS构建一起玩(所以实际上不适合初学者)


3

另一种可能是使用TopoJSON而不是普通的GeoJSON:

TopoJSON是GeoJSON的扩展,对拓扑进行编码。TopoJSON文件中的几何图形不是从离散的角度表示,而是从称为arcs的共享线段缝合在一起的。TopoJSON消除了冗余,提供了比GeoJSON更紧凑的几何图形表示。典型的TopoJSON文件比其GeoJSON等效文件小80%。


3

如ThomasG77所述,我一直在使用这种“ twkb”格式的二进制数据。

您可以在此处看到它的运行情况(一个websocket示例)

或者在这里,一个PHP实现。

如果您想研究解析,请检查文件twkb.js。在我认为的twkb_node示例中,它稍微干净一些。

博客文章中,您可以找到指向PostGIS部分的源代码的链接以及该格式的一些说明。

从那以后,我做了一些修改,并将很快在github上进行新的描述。我相信twkb,但需要更多的头脑才能变得良好。

您当然也可以解析wkb,但是与gzip压缩的geojson相比,您不会获得带宽。我感到惊讶的是它的确很小。请参阅第二个链接,并检查geojson vs twkb的大小。WKB大约是twkb的2-6倍。


0

这个答案与wkb到wkt函数无关。

我想说,您不应该仅使用从wkt到wkb的转换来保存bandwith-在服务器上gzip压缩wkt(或其他那里存在的格式)应该绰绰有余(并且很有可能更有效),并且浏览器可以解压缩随时随地开箱即用。

另请参阅XHTMLRequest2的浏览器支持表,因为某些较旧但仍在使用的浏览器不支持该


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.