shapefile
Version:
An implementation of the shapefile (.shp) spatial data format.
34 lines (30 loc) • 1.04 kB
JavaScript
import slice from "slice-source";
import dbf_cancel from "./cancel";
import dbf_read from "./read";
import view from "../view";
export default function(source, decoder) {
source = slice(source);
return source.slice(32).then(function(array) {
var head = view(array);
return source.slice(head.getUint16(8, true) - 32).then(function(array) {
return new Dbf(source, decoder, head, view(array));
});
});
}
function Dbf(source, decoder, head, body) {
this._source = source;
this._decode = decoder.decode.bind(decoder);
this._recordLength = head.getUint16(10, true);
this._fields = [];
for (var n = 0; body.getUint8(n) !== 0x0d; n += 32) {
for (var j = 0; j < 11; ++j) if (body.getUint8(n + j) === 0) break;
this._fields.push({
name: this._decode(new Uint8Array(body.buffer, body.byteOffset + n, j)),
type: String.fromCharCode(body.getUint8(n + 11)),
length: body.getUint8(n + 16)
});
}
}
var prototype = Dbf.prototype;
prototype.read = dbf_read;
prototype.cancel = dbf_cancel;