WKBからWKT JavaScript関数へ


10

json バイナリデータの転送があまり得意はないことがわかりました。しかし、HTML5により、XHR2はBLOBをきれいに転送できるようになりました。(帯域幅を節約するために)バイナリジオメトリを転送し、クライアントでデコードしたいと考えています。

役に立たないために、私はJavaScriptベースのWKB(Well-known Binary)からWKT(Well-known Text)関数をWebで探しました。車輪を再発明する前に、オープンソースのソリューションを知っている人はいますか?


ところで、blobではなくarraybufferを使うべきです。
NicklasAvén2013年

回答:


10

新しくサポートが向上した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年前にこれを尋ねました。驚くばかり!
ジョーダンアルセノ2015

7

これまでに見つけた唯一の解決策は、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

もう1つの可能性は、プレーンなGeoJSONの代わりにTopoJSONを使用することです

TopoJSONは、トポロジをエンコードするGeoJSONの拡張です。形状を個別に表すのではなく、TopoJSONファイル内の形状は、と呼ばれる共有線セグメントから結合されます。TopoJSONは冗長性を排除し、GeoJSONよりもはるかにコンパクトなジオメトリの表現を提供します。一般的なTopoJSONファイルは、GeoJSONの同等のファイルよりも80%小さくなります。


3

ThomasG77で述べたように、私はこの「twkb」形式のバイナリデータで遊んでいます。

あなたはここでそれを実際に見ることができます(ウェブソケットの例)

または、ここでは、phpの実装。

解析について学習したい場合は、twkb.jsファイルを確認してください。私が思うtwkb_nodeの例では少しクリーンです。

、このブログの記事あなたは、PostGISの部分のソースコードやフォーマットのいくつかの説明へのリンクを見つけることができます。

それ以来、私はいくつかの手直しを行い、まもなくgithubに新しい説明を置きます。私はtwkbを信じていますが、うまくいくにはもっと多くの頭脳が必要です。

もちろん、wkbも解析できますが、gzip圧縮されたgeojsonに比べて帯域幅は得られません。それがどれほど小さいか驚いた。2番目のリンクを参照して、geojsonとtwkbのサイズを確認してください。WKBはtwkbの約2〜6倍です。


0

この回答は、wkb関数からwkt関数についてではありません。

帯域幅を節約するためだけにwktからwkbへの変換を使用しないでください-サーバー上のgktのwkt(または他のフォーマット)は十分以上(そしておそらく-より効率的)で、ブラウザーはunzipを実行できますその場で、箱から出して。

XHTMLRequest2のいくつかの古い、まだ使用されているブラウザーではサポートされていないため、ブラウザーサポート表も参照してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.