json はバイナリデータの転送があまり得意ではないことがわかりました。しかし、HTML5により、XHR2はBLOBをきれいに転送できるようになりました。(帯域幅を節約するために)バイナリジオメトリを転送し、クライアントでデコードしたいと考えています。
役に立たないために、私はJavaScriptベースのWKB(Well-known Binary)からWKT(Well-known Text)関数をWebで探しました。車輪を再発明する前に、オープンソースのソリューションを知っている人はいますか?
json はバイナリデータの転送があまり得意ではないことがわかりました。しかし、HTML5により、XHR2はBLOBをきれいに転送できるようになりました。(帯域幅を節約するために)バイナリジオメトリを転送し、クライアントでデコードしたいと考えています。
役に立たないために、私はJavaScriptベースのWKB(Well-known Binary)からWKT(Well-known Text)関数をWebで探しました。車輪を再発明する前に、オープンソースのソリューションを知っている人はいますか?
回答:
新しくサポートが向上した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)
これまでに見つけた唯一の解決策は、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」形式のバイナリデータで遊んでいます。
あなたはここでそれを実際に見ることができます(ウェブソケットの例)
または、ここでは、phpの実装。
解析について学習したい場合は、twkb.jsファイルを確認してください。私が思うtwkb_nodeの例では少しクリーンです。
で、このブログの記事あなたは、PostGISの部分のソースコードやフォーマットのいくつかの説明へのリンクを見つけることができます。
それ以来、私はいくつかの手直しを行い、まもなくgithubに新しい説明を置きます。私はtwkbを信じていますが、うまくいくにはもっと多くの頭脳が必要です。
もちろん、wkbも解析できますが、gzip圧縮されたgeojsonに比べて帯域幅は得られません。それがどれほど小さいか驚いた。2番目のリンクを参照して、geojsonとtwkbのサイズを確認してください。WKBはtwkbの約2〜6倍です。
この回答は、wkb関数からwkt関数についてではありません。
帯域幅を節約するためだけにwktからwkbへの変換を使用しないでください-サーバー上のgktのwkt(または他のフォーマット)は十分以上(そしておそらく-より効率的)で、ブラウザーはunzipを実行できますその場で、箱から出して。
XHTMLRequest2のいくつかの古い、まだ使用されているブラウザーではサポートされていないため、ブラウザーサポート表も参照してください。
GeoScriptには、WKTおよびWKBを読み書きするJavascript APIがあります。メソッドはgeom.ioの一部です。