ฟังก์ชัน WKB ถึง WKT JavaScript


10

ปรากฎว่า json ไม่ดีในการขนส่งข้อมูลไบนารี แต่ด้วย HTML5 ทำให้ XHR2 สามารถถ่ายโอน blobs ได้อย่างหมดจด ฉันกำลังมองหาการถ่ายโอนรูปทรงเรขาคณิตไบนารี (เพื่อประหยัดแบนด์วิดธ์) และถอดรหัสบนไคลเอนต์

เพื่อประโยชน์ใด ๆ ฉันได้ทำการค้นหาเว็บสำหรับฟังก์ชั่นWKB (ไบนารีรู้จักกันดี)จาวาสคริปต์เพื่อWKT (ข้อความที่รู้จักกันดี) ก่อนที่ฉันจะคิดค้นวงล้อใหม่ - มีใครรู้บ้างเกี่ยวกับโซลูชั่นโอเพนซอร์ซหรือไม่?


Btw คุณไม่ควรใช้ blobs แต่เป็น arraybuffer
Nicklas Avén

คำตอบ:


11

ดูเหมือนว่าไลบรารีการแยกวิเคราะห์ 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 ปีก่อน ! น่ากลัว
Jordan Arseno

7

วิธีการแก้ปัญหาจาวาสคริปต์ทางออกเดียวที่บริสุทธิ์ที่ฉันได้พบเพื่อให้ห่างไกล (และผมไม่ได้ลอง) เป็นhttps://github.com/thejefflarson/wkb.js เป็นเพียงตัวแยกวิเคราะห์ WKB ที่ไม่สมบูรณ์ (แปลง WKB เป็นวัตถุ js ที่คุณสามารถเปลี่ยนเป็น WKT)

อีกวิธีหนึ่งในการ wkb ทางด้าน javascript สามารถเป็น twkb ทดลอง (ไม่ใช่มาตรฐานในขณะนี้) http://blog.jordogskog.no/2013/05/05/mapservice-from-websocket-with-twkb/แต่มันต้อง ที่จะเล่นกับการสร้าง PostGIS ที่กำหนดเอง (ดังนั้นจริงๆไม่ใช่สำหรับผู้เริ่มต้น)


3

ความเป็นไปได้อีกอย่างหนึ่งอาจใช้TopoJSONแทน GeoJSON ธรรมดา:

TopoJSONเป็นส่วนเสริมของ GeoJSON ที่เข้ารหัสโทโพโลยี แทนที่จะเป็นตัวแทนของรูปทรงเรขาคณิต discretely รูปทรงเรขาคณิตในแฟ้ม TopoJSON จะเย็บเข้าด้วยกันจากกลุ่มสายที่ใช้ร่วมกันที่เรียกว่าโค้ง TopoJSON ขจัดความซ้ำซ้อนซึ่งให้การแสดงรูปร่างที่กะทัดรัดกว่า GeoJSON; ไฟล์ TopoJSON ทั่วไปจะเล็กกว่าไฟล์ GeoJSON 80%


3

ตามที่กล่าวไว้โดย ThomasG77 ฉันได้เล่นกับข้อมูลไบนารีในรูปแบบ "twkb" นี้

คุณสามารถเห็นมันทำงานได้ที่นี่ (ตัวอย่างเช่น websocket)

หรือที่นี่การใช้งาน php

หากคุณต้องการศึกษาการแยกวิเคราะห์ให้ตรวจสอบไฟล์ twkb.js. ฉันคิดว่ามันสะอาดขึ้นเล็กน้อยในตัวอย่าง twkb_node

ในโพสต์บล็อกนี้คุณสามารถค้นหาลิงค์ไปยังซอร์สโค้ดของส่วน PostGIS และคำอธิบายของรูปแบบ

ฉันได้ทำการ reworking มาแล้วและจะใส่คำอธิบายใหม่ลงบน GitHub ฉันมีความเชื่อมั่นใน twkb แต่มันต้องใช้สมองมากขึ้นในการได้รับที่ดี

แน่นอนคุณสามารถแยกวิเคราะห์ wkb แต่คุณจะไม่ได้รับแบนด์วิดธ์เมื่อเทียบกับ gzipped geojson ฉันประหลาดใจที่มีขนาดเล็ก ดูลิงค์ที่สองและตรวจสอบขนาดของ geojson vs twkb WKB ใหญ่กว่า twkb ประมาณ 2-6 เท่า


0

คำตอบนี้ไม่เกี่ยวกับฟังก์ชั่น wkb to wkt

ฉันว่าคุณไม่ควรใช้การแปลงจาก wkt เป็น wkb เพียงเพื่อบันทึกแบนด์วิดท์ - gzipping wkt (หรือรูปแบบอื่น ๆ ที่คุณมี) บนเซิร์ฟเวอร์ควรมากกว่าเพียงพอ (และน่าจะเป็น - ประสิทธิภาพมากกว่า) และเบราว์เซอร์สามารถทำการขยายไฟล์ ได้ทันทีและออกจากกล่อง

ดูที่ตารางการสนับสนุนเบราว์เซอร์สำหรับ XHTMLRequest2 เนื่องจากเบราว์เซอร์รุ่นเก่ายังไม่รองรับ แต่ยังใช้เบราว์เซอร์


0

GeoScript มี Javascript API ที่อ่านและเขียน WKT และ WKB วิธีการเป็นส่วนหนึ่งของ geom.io


1
FIY เฉพาะในสภาพแวดล้อมของเชลล์ที่มีการขึ้นต่อกันของจาวา (cf pom.xml ที่github.com/tschaub/geoscript-js ) ไม่ได้อยู่ในเบราว์เซอร์
ThomasG77
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.