事实证明json 在传输二进制数据方面不太好。但是,有了HTML5,XHR2现在能够干净地传输blob。我希望传输二进制几何图形(以节省带宽)并在客户端上对其进行解码。
无济于事,我在网上搜索了基于JavaScript的WKB(知名二进制)到WKT(知名文本)功能。在我重新发明轮子之前-有人知道任何开源解决方案吗?
事实证明json 在传输二进制数据方面不太好。但是,有了HTML5,XHR2现在能够干净地传输blob。我希望传输二进制几何图形(以节省带宽)并在客户端上对其进行解码。
无济于事,我在网上搜索了基于JavaScript的WKB(知名二进制)到WKT(知名文本)功能。在我重新发明轮子之前-有人知道任何开源解决方案吗?
Answers:
此后似乎出现了一个新的且受到更好支持的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)
到目前为止,我发现的唯一的纯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构建一起玩(所以实际上不适合初学者)
如ThomasG77所述,我一直在使用这种“ twkb”格式的二进制数据。
您可以在此处看到它的运行情况(一个websocket示例)
或者在这里,一个PHP实现。
如果您想研究解析,请检查文件twkb.js。在我认为的twkb_node示例中,它稍微干净一些。
在此博客文章中,您可以找到指向PostGIS部分的源代码的链接以及该格式的一些说明。
从那以后,我做了一些修改,并将很快在github上进行新的描述。我相信twkb,但需要更多的头脑才能变得良好。
您当然也可以解析wkb,但是与gzip压缩的geojson相比,您不会获得带宽。我感到惊讶的是它的确很小。请参阅第二个链接,并检查geojson vs twkb的大小。WKB大约是twkb的2-6倍。
GeoScript具有可读写WKT和WKB的Javascript API。这些方法是geom.io的一部分。