Hàm WKB đến WKT JavaScript


10

Hóa ra json không giỏi trong việc vận chuyển dữ liệu nhị phân. Nhưng với HTML5, XHR2 hiện có khả năng chuyển các đốm màu một cách sạch sẽ. Tôi đang tìm cách chuyển hình học nhị phân (để tiết kiệm băng thông) và giải mã nó trên máy khách.

Không có kết quả, tôi đã lùng sục trên web cho một javascript dựa trên WKB (Nổi tiếng nhị phân) để WKT (Text Nổi tiếng) chức năng. Trước khi tôi phát minh lại bánh xe - có ai biết về bất kỳ giải pháp nguồn mở nào không?


Btw, bạn không nên sử dụng blobs mà là Arraybuffer.
Nicklas Avén

Câu trả lời:


10

Có vẻ như một thư viện phân tích cú pháp JS WKB mới và được hỗ trợ tốt hơn đã xuất hiện.

https://github.com/cschwarz/wkx

Tôi đã có thể sử dụng nó để chuyển đổi WKB trực tiếp từ postgres thành các đối tượng JS có thể được ánh xạ trong trình duyệt. Bạn sẽ cần bao gồm https://github.com/cschwarz/wkx/blob/master/dist/wkx.js trong trang web của bạn để điều này hoạt động.

// 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
Này, OP đây. Đã hỏi điều này 1,5 năm trước. Tuyệt vời!
Jordan Arseno 6/2/2015

7

Giải pháp javascript thuần túy duy nhất mà tôi tìm thấy cho đến nay (và tôi đã không thử) là https://github.com/thejefflarson/wkb.js . Nó chỉ là một trình phân tích cú pháp WKB chưa hoàn chỉnh (nó chuyển đổi WKB thành một đối tượng js mà bạn có thể chuyển đổi thành WKT)

Một cách khác để wkb ở phía javascript có thể là twkb thử nghiệm (không phải là một tiêu chuẩn tại thời điểm này) http://blog.jordogskog.no/2013/05/05/mapservice-from-websocket-with-twkb/ nhưng nó yêu cầu để chơi với bản dựng PostGIS tùy chỉnh (vì vậy thực sự không dành cho người mới bắt đầu)


3

Một khả năng khác có thể là sử dụng TopoJSON thay vì GeoJSON đơn giản:

TopoJSON là một phần mở rộng của GeoJSON mã hóa cấu trúc liên kết. Thay vì đại diện cho hình học một cách riêng biệt, hình học trong các tệp TopoJSON được gắn với nhau từ các phân đoạn dòng chia sẻ được gọi là vòng cung . TopoJSON loại bỏ sự dư thừa, cung cấp các biểu diễn hình học nhỏ gọn hơn nhiều so với GeoJSON; các tệp TopoJSON điển hình nhỏ hơn 80% so với các tệp tương đương GeoJSON của chúng.


3

Như ThomasG77 đã đề cập, tôi đã chơi với dữ liệu nhị phân ở định dạng "twkb" này.

bạn có thể thấy nó hoạt động ở đây (một ví dụ về websocket)

hoặc ở đây , một triển khai php.

Nếu bạn muốn nghiên cứu phân tích cú pháp, hãy kiểm tra tệp twkb.js. Tôi nghĩ nó sạch hơn một chút trong ví dụ twkb_node.

Trong bài đăng trên blog này, bạn có thể tìm thấy liên kết đến mã nguồn của phần PostGIS và một số mô tả về định dạng.

Tôi đã thực hiện một số thao tác lại từ đó và sẽ sớm đưa ra một mô tả mới trên github. Tôi có một niềm tin vào twkb, nhưng nó cần nhiều bộ não hơn để có được điều tốt.

Tất nhiên bạn cũng có thể phân tích wkb nhưng bạn sẽ không nhận được băng thông so với Geojson được nén. Tôi đã ngạc nhiên khi nhỏ mà đã nhận được. Xem liên kết thứ hai và kiểm tra kích thước của Geojson vs twkb. WKB lớn hơn twkb khoảng 2-6 lần.


0

Câu trả lời này không phải là về chức năng wkb đến wkt.

Tôi muốn nói rằng bạn không nên sử dụng chuyển đổi từ wkt sang wkb chỉ để lưu bandwith - gzipping wkt (hoặc định dạng khác bạn có) trên máy chủ nên là quá đủ (và có lẽ là - hiệu quả hơn) và trình duyệt có thể giải nén trên bay và ra khỏi hộp.

Cũng xem các bảng hỗ trợ trình duyệt cho XHTMLRequest2, vì nó không được hỗ trợ trong một số trình duyệt cũ hơn nhưng vẫn được sử dụng.


0

GeoScript có API Javascript đọc và ghi WKT và WKB. Các phương thức này là một phần của geom.io.


1
FIY chỉ trong một môi trường shell với các phụ thuộc java (cf pom.xml tại github.com/tschaub/geoscript-js ) không có trong trình duyệt
ThomasG77
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.