Fungsi WKB ke WKT JavaScript

10

Ternyata json tidak begitu baik dalam mengangkut data biner. Tetapi dengan HTML5, XHR2 sekarang mampu mentransfer gumpalan dengan bersih. Saya ingin mentransfer geometri biner (untuk menghemat bandwidth) dan mendekodekannya pada klien.

Tidak berhasil, saya telah menjelajahi web untuk WKB (Well-known Binary) berbasis javascript ke fungsi WKT (Teks Terkenal) . Sebelum saya menemukan kembali roda - apakah ada yang tahu ada solusi open-source?

Jordan Arseno
sumber
Btw, Anda seharusnya tidak menggunakan gumpalan tetapi arraybuffer.
Nicklas Avén

Jawaban:

11

Sepertinya parsing library JS WKB baru dan lebih didukung sejak muncul.

https://github.com/cschwarz/wkx

Saya sudah bisa menggunakannya untuk mengubah WKB langsung dari postgres menjadi objek JS yang dapat dipetakan di browser. Anda harus menyertakan https://github.com/cschwarz/wkx/blob/master/dist/wkx.js di halaman web Anda agar ini berfungsi.

// 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)
Talos
sumber
1
Hei, OP di sini. Ditanya ini 1,5 tahun yang lalu. Luar biasa!
Jordan Arseno
7

Satu-satunya solusi solusi javascript murni yang saya temukan sejauh ini (dan saya tidak mencoba) adalah https://github.com/thejefflarson/wkb.js . Ini hanya pengurai WKB yang tidak lengkap (itu mengonversi WKB ke objek js yang dapat Anda ubah ke WKT)

Cara alternatif untuk wkb di sisi javascript dapat menjadi twkb eksperimental (bukan standar saat ini) http://blog.jordogskog.no/2013/05/05/mapservice-from-websocket-with-twkb/ tetapi membutuhkan untuk bermain dengan build PostGIS khusus (jadi benar-benar tidak untuk pemula)

ThomasG77
sumber
3

Kemungkinan lain mungkin menggunakan TopoJSON alih-alih GeoJSON biasa:

TopoJSON adalah perpanjangan dari GeoJSON yang menyandikan topologi. Daripada merepresentasikan geometri secara terpisah, geometri dalam file TopoJSON dijahit bersama dari segmen garis bersama yang disebut arc . TopoJSON menghilangkan redundansi, menawarkan representasi geometri yang jauh lebih ringkas daripada dengan GeoJSON; file TopoJSON tipikal adalah 80% lebih kecil dari setara GeoJSON mereka.

blah238
sumber
3

Seperti yang disebutkan oleh ThomasG77 saya telah bermain dengan data biner dalam format "twkb" ini.

Anda dapat melihatnya beraksi di sini (contoh websocket)

atau di sini , implementasi php.

Jika Anda ingin mempelajari penguraian, periksa file twkb.js. Itu sedikit lebih bersih dalam contoh twkb_node saya pikir.

Dalam posting blog ini Anda dapat menemukan tautan ke kode sumber bagian PostGIS dan beberapa deskripsi format.

Saya telah melakukan pengerjaan ulang sejak dan akan segera memberikan deskripsi baru pada github. Saya memiliki kepercayaan pada twkb, tetapi perlu lebih banyak otak untuk menjadi baik.

Tentu saja Anda juga dapat menguraikan wkb tetapi Anda tidak akan mendapatkan bandwidth dibandingkan dengan gojipped geojson. Saya terkejut betapa kecilnya itu. Lihat tautan kedua dan periksa ukuran geojson vs twkb. WKB sekitar 2-6 kali lebih besar dari twkb.

Nicklas Avén
sumber
0

Jawaban ini bukan tentang fungsi wkb ke wkt.

Saya katakan Anda tidak boleh menggunakan konversi dari wkt ke wkb hanya untuk menghemat bandwidth - gzipping wkt (atau format lain yang Anda miliki di sana) pada server harus lebih dari cukup (dan kemungkinan besar - lebih efisien) dan browser dapat melakukan unzipping dengan cepat dan keluar dari kotak.

Lihat juga di tabel dukungan browser untuk XHTMLRequest2, karena tidak didukung di beberapa browser yang lebih lama, namun masih digunakan.

mrówa
sumber
0

GeoScript memiliki Javascript API yang membaca dan menulis WKT dan WKB. Metode adalah bagian dari geom.io.

Klewis
sumber
1
FIY hanya di lingkungan shell dengan dependensi java (cf pom.xml di github.com/tschaub/geoscript-js ) tidak ada di browser
ThomasG77