WKB - WKT JavaScript işlevi


10

Json , ikili verileri taşımakta o kadar iyi değil . Ancak HTML5 ile XHR2 artık lekeleri temiz bir şekilde aktarabilir . Ben (bant genişliğini kaydetmek için) ikili geometri aktarmak ve istemcinin kodunu çözmek için arıyorum.

Hiçbir boşuna, ben bir javascript tabanlı WKB (iyi bilinen ikili) WKT (iyi bilinen metin) işlevi için web ovma . Tekerleği yeniden icat etmeden önce - açık kaynaklı çözümlerin farkında olan var mı?


Btw, blobs değil arraybuffer kullanmalısınız.
Nicklas Avén

Yanıtlar:


11

Yeni ve daha iyi desteklenen bir JS WKB ayrıştırma kütüphanesi ortaya çıktı gibi görünüyor.

https://github.com/cschwarz/wkx

WKB'yi doğrudan postgreslerden tarayıcıda eşleştirilebilecek JS nesnelerine dönüştürmek için kullanabildim. Bunun çalışması için web sayfanıza https://github.com/cschwarz/wkx/blob/master/dist/wkx.js eklemeniz gerekir .

// 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
Hey, OP burada. Bunu 1.5 yıl önce sordum. Müthiş!
Jordan Arseno

7

Şimdiye kadar bulduğum tek çözüm saf javascript çözümü (ve denemedim) https://github.com/thejefflarson/wkb.js . Sadece eksik bir WKB ayrıştırıcısı (WKB'yi WKT'ye dönüştürebileceğiniz bir js nesnesine dönüştürür)

Javascript tarafında wkb'ye alternatif bir yol, deneysel twkb (şu anda standart değil) olabilir http://blog.jordogskog.no/2013/05/05/mapservice-from-websocket-with-twkb/ ama gerektirir özel bir PostGIS derlemesiyle oynamak (yeni başlayanlar için değil)


3

Başka bir olasılık , düz GeoJSON yerine TopoJSON kullanmak olabilir :

TopoJSON , topolojiyi kodlayan bir GeoJSON uzantısıdır. TopoJSON dosyalarındaki geometrileri ayrı ayrı temsil etmek yerine, ark adı verilen paylaşılan çizgi segmentlerinden birleştirilir . TopoJSON, GeoJSON'dan çok daha kompakt geometri sunumları sunarak artıklığı ortadan kaldırır; tipik TopoJSON dosyaları GeoJSON eşdeğerlerinden% 80 daha küçüktür.


3

ThomasG77 tarafından belirtildiği gibi bu "twkb" formatında ikili verilerle oynuyorum.

burada çalışırken görebilirsiniz (websocket örneği)

veya burada , bir php uygulaması.

Ayrıştırma çalışmasını istiyorsanız twkb.js dosyasını kontrol edin. Bence twkb_node örneğinde biraz daha temiz.

Gelen bu blog yayınında Eğer PostGIS kısmının kaynak kodu ve biçimi bazı açıklamasına bağlantı bulabilirsiniz.

O zamandan beri bazı yeniden çalışmalar yaptım ve yakında github hakkında yeni bir açıklama yapacağım. Ben twkb inanıyorum, ama iyi almak için daha fazla beyin gerekiyor.

Elbette wkb'yi ayrıştırabilirsiniz, ancak gzip edilmiş geojson'a kıyasla hiçbir bant genişliği kazanmazsınız. Ne kadar küçüldüğüne şaşırdım. İkinci bağlantıya bakın ve geojson vs twkb boyutlarını kontrol edin. WKB, twkb'den yaklaşık 2-6 kat daha büyüktür.


0

Bu cevap wkb - wkt işlevi ile ilgili değildir.

Sadece bant genişliğini kaydetmek için wkt'den wkb'ye dönüşüm kullanmamalısınız diyebilirim - sunucuda gzipping wkt (veya orada sahip olduğunuz diğer format) fazlasıyla (ve büyük olasılıkla - daha verimli) olmalı ve tarayıcılar unzipping yapabilir anında ve kutunun dışında.

Altındadır bak tarayıcı desteği tablolar bazı eski, ama hala kullanılan tarayıcılar desteklenmeyen olarak, XHTMLRequest2 için.


0

GeoScript, WKT ve WKB'yi okuyan ve yazan bir Javascript API'sine sahiptir. Yöntemler geom.io'nun bir parçasıdır.


1
FIY sadece java bağımlılıkları (en cf pom.xml ile bir kabuk ortamında github.com/tschaub/geoscript-js ) tarayıcıda değil
ThomasG77
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.